29
29
*
30
30
* Battery voltage is as battery percentage (Internal message), and optionally as a sensor value (See defines below)
31
31
*
32
+ *
33
+ * Version 1.3 - Thomas Bowman Mørch
34
+ * Improved transmission logic, eliminating spurious transmissions (when temperatuere / humidity fluctuates 1 up and down between measurements)
35
+ *
36
+ * Added OTA boot mode, need to hold A1 low while applying power. (uses slightly more power as it's waiting for bootloader messages)
37
+ *
32
38
*/
33
39
34
40
49
55
// Uncomment the line below, to transmit battery voltage as a normal sensor value
50
56
// #define BATT_SENSOR 199
51
57
52
- #define RELEASE " 1.2 "
58
+ #define RELEASE " 1.3 "
53
59
54
60
#define AVERAGES 2
55
61
60
66
// How many milli seconds between each measurement
61
67
#define MEASURE_INTERVAL 60000
62
68
69
+ // How many milli seconds should we wait for OTA?
70
+ #define OTA_WAIT_PERIOD 1000
71
+
63
72
// FORCE_TRANSMIT_INTERVAL, this number of times of wakeup, the sensor is forced to report all values to the controller
64
73
#define FORCE_TRANSMIT_INTERVAL 30
65
74
73
82
74
83
// Pin definitions
75
84
#define TEST_PIN A0
85
+ #define OTA_ENABLE A1
76
86
#define LED_PIN A2
77
87
#define ATSHA204_PIN 17 // A3
78
88
@@ -97,6 +107,8 @@ int measureCount = 0;
97
107
int sendBattery = 0 ;
98
108
boolean isMetric = true ;
99
109
boolean highfreq = true ;
110
+ boolean ota_enabled = false ;
111
+ boolean transmission_occured = false ;
100
112
101
113
// Storage of old measurements
102
114
float lastTemperature = -100 ;
@@ -126,11 +138,17 @@ void setup() {
126
138
digitalWrite (TEST_PIN, HIGH); // Enable pullup
127
139
if (!digitalRead (TEST_PIN)) testMode ();
128
140
141
+ pinMode (OTA_ENABLE, INPUT);
142
+ digitalWrite (OTA_ENABLE, HIGH);
143
+ if (!digitalRead (OTA_ENABLE)) ota_enabled = true ;
144
+
129
145
// Make sure that ATSHA204 is not floating
130
146
pinMode (ATSHA204_PIN, INPUT);
131
147
digitalWrite (ATSHA204_PIN, HIGH);
132
148
133
149
digitalWrite (TEST_PIN,LOW);
150
+ digitalWrite (OTA_ENABLE, LOW); // remove pullup, save some power.
151
+
134
152
digitalWrite (LED_PIN, HIGH);
135
153
136
154
#ifdef NODE_ADDRESS
@@ -169,13 +187,14 @@ void setup() {
169
187
*
170
188
***********************************************/
171
189
void loop () {
190
+
172
191
measureCount ++;
173
192
sendBattery ++;
174
193
bool forceTransmit = false ;
175
-
194
+ transmission_occured = false ;
176
195
if ((measureCount == 5 ) && highfreq)
177
196
{
178
- // clock_prescale_set(clock_div_8); // Switch to 1Mhz for the reminder of the sketch, save power.
197
+ clock_prescale_set (clock_div_8); // Switch to 1Mhz for the reminder of the sketch, save power.
179
198
highfreq = false ;
180
199
}
181
200
@@ -192,7 +211,11 @@ void loop() {
192
211
sendBattLevel (forceTransmit); // Not needed to send battery info that often
193
212
sendBattery = 0 ;
194
213
}
195
-
214
+
215
+ if (ota_enabled & transmission_occured) {
216
+ gw.wait (OTA_WAIT_PERIOD);
217
+ }
218
+
196
219
gw.sleep (MEASURE_INTERVAL);
197
220
}
198
221
@@ -235,6 +258,7 @@ void sendTempHumidityMeasurements(bool force)
235
258
gw.send (msgHum.set (humidity));
236
259
lastTemperature = temperature;
237
260
lastHumidity = humidity;
261
+ transmission_occured = true ;
238
262
}
239
263
}
240
264
@@ -263,6 +287,7 @@ void sendBattLevel(bool force)
263
287
264
288
long percent = vcc / 14.0 ;
265
289
gw.sendBatteryLevel (percent);
290
+ transmission_occured = true ;
266
291
}
267
292
}
268
293
@@ -271,7 +296,7 @@ void sendBattLevel(bool force)
271
296
* Internal battery ADC measuring
272
297
*
273
298
*******************************************/
274
- long readVcc () {/*
299
+ long readVcc () {
275
300
// Read 1.1V reference against AVcc
276
301
// set the reference to Vcc and the measurement to the internal 1.1V reference
277
302
#if defined(__AVR_ATmega32U4__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
@@ -295,7 +320,7 @@ long readVcc() {/*
295
320
296
321
result = 1125300L / result; // Calculate Vcc (in mV); 1125300 = 1.1*1023*1000
297
322
return result; // Vcc in millivolts
298
- */
323
+
299
324
}
300
325
301
326
/* ***************************************************
0 commit comments