-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSensor-Microbit.h
123 lines (104 loc) · 2.28 KB
/
Sensor-Microbit.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
/*
* Author: Napattnpp
* File: Sensor-Microbit.h
* Version: sm.1.2
*/
class Sensor {
private:
// Number of sensor
unsigned char NOS = 0;
public:
int port[16];
short val[16];
int ref[16];
String val_str = "";
void init(int _NOS, ...);
void set_ref(...);
void gett();
void conv();
void conv_str();
void print_val();
void print_ref();
void gett_ref();
};
void Sensor::init(int _NOS, ...) {
IBIT();
NOS = _NOS;
va_list vaList;
/* Initialize va_list for port number of arguments */
va_start(vaList, _NOS);
for (unsigned char i = 0; i < _NOS; i++) {
port[i] = va_arg(vaList, int);
}
va_end(vaList);
}
void Sensor::set_ref(...) {
va_list vaList;
/* Initialize va_list for port number of arguments */
va_start(vaList, NOS);
for (unsigned char i = 0; i < NOS; i++) {
ref[i] = va_arg(vaList, int);
}
va_end(vaList);
}
void Sensor::gett() {
for (unsigned char i = 0; i < NOS; i++) {
val[i] = analog(port[i]);
}
}
void Sensor::conv() {
gett();
for (unsigned char i = 0; i < NOS; i++) {
(val[i] < ref[i]) ? val[i] = 1 : val[i] = 0;
}
}
void Sensor::conv_str() {
val_str = "";
gett();
for (unsigned char i = 0; i < NOS; i++) {
(val[i] < ref[i]) ? val[i] = 1 : val[i] = 0;
val_str += val[i];
}
}
/* Show & Print val, ref, conv */
void Sensor::print_val() {
for (unsigned char i = 0; i < NOS; i++) {
Serial.print("val: ");
Serial.println(val[i]);
}
Serial.println("====================");
}
void Sensor::print_ref() {
for (unsigned char i = 0; i < NOS; i++) {
Serial.print("ref: ");
Serial.println(ref[i]);
}
Serial.println("====================");
}
void Sensor::gett_ref() {
if (!digitalRead(PIN_BUTTON_A)) {
fd(10);
delay(2000);
fd(0);
gett();
print_val();
for (unsigned char i = 0; i < NOS; i++) {
ref[i] = val[i];
}
while (1) {
delay(1500);
if (!digitalRead(PIN_BUTTON_A)) {
break;
}
}
fd(10);
delay(2000);
fd(0);
gett();
print_val();
for (unsigned char i = 0; i < NOS; i++) {
ref[i] = ((ref[i] + val[i]) / 2);
}
print_ref();
}
}