-
Notifications
You must be signed in to change notification settings - Fork 0
/
master_nodemcu.ino
123 lines (95 loc) · 2.95 KB
/
master_nodemcu.ino
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
#include "Common.h" // Need to be included first as values are requiered by other includes
// Used to store text to display on LCD & serial
char value[256];
// Store each node sensors values
float values[MAXNODES*2];
// Count number of retries per nodes (sensors independant)
unsigned char retries[MAXNODES];
#include "include/lcd.cpp"
// Transitional value to store nodes sensors
RFDATA temp;
void setup() {
setup_rf24();
setup_lcd();
lcd_line2("almost done");
setup_wifintp();
Serial.println(F("********** Init done **********"));
lcd_line2("initialised! ");
std::fill_n(values, MAXNODES*2,NOSENSOR);
std::fill_n(retries, MAXNODES, MAXRETRIES);
munin_setup();
}
void loop() {
/****************** Pong Back Role ***************************/
RFDATA * temp_ptr = &temp;
for(int i=0; i<MAXNODES;i++){
// Increase retry counter for node tested by for loop
retries[i] = (retries[i]) +1;
// Read data & retrieve node number
rf24_read(temp_ptr, i);
unsigned char node_addr = (int)(temp.addr.value/2);
unsigned char sens_addr = (int)(temp.addr.value%2);
// if there was a receive, store it on the right position
if (temp.addr.value != (DUMMYVALUE)) {
values[temp.addr.value] = temp.rffloat.value;
retries[node_addr] = 0;
sprintf(value, "Node %i sens %i: %0.2f in [%i]", node_addr, sens_addr, values[temp.addr.value], temp.addr.value);
Serial.println(value);
}
// ensure retries counter does not loop
if ( retries[i] > MAXRETRIES ) {
retries[i] = MAXRETRIES;
}
}
if ( WiFi.status() == WL_CONNECTED ) {
ntp_client();
}
display.clearDisplay();
lcd_ntp();
lcd_wifi();
lcd_modem();
// if node has been received recently display it
if (retries[0] < MAXRETRIES) {
// if node have two sensors, display both
if ( (int)values[1] != (int)NOSENSOR) {
sprintf(value, "1: %0.2f / %0.2f'C", values[0], values[1]);
} else {
sprintf(value, "1: %0.2f 'C", values[0]);
}
lcd_line1(value);
}
if (retries[1] < MAXRETRIES) {
// if node have two sensors, display both
if ( (int)values[3] != (int)NOSENSOR) {
sprintf(value, "2: %0.2f / %0.2f'C", values[2], values[3]);
} else {
sprintf(value, "2: %0.2f 'C", values[2]);
}
lcd_line2(value);
}
if (retries[2] < MAXRETRIES) {
// if node have two sensors, display both
if ( (int)values[5] != (int)NOSENSOR) {
sprintf(value, "3: %0.2f / %0.2f'C", values[4], values[5]);
} else {
sprintf(value, "3: %0.2f 'C", values[4]);
}
lcd_line3(value);
}
display.display();
/****************** Change Roles via Serial Commands ***************************/
if ( Serial.available() )
{
char c = toupper(Serial.read());
Serial.print(c);
if (c == 'S') {
system_restart();
}
if (c == 'I') {
Serial.print("IP: ");
Serial.println(WiFi.localIP());
}
}
munin_server();
delay(250);
} // Loop