File tree Expand file tree Collapse file tree 7 files changed +37
-21
lines changed Expand file tree Collapse file tree 7 files changed +37
-21
lines changed Original file line number Diff line number Diff line change @@ -277,6 +277,8 @@ You can interact with each class provided by NodeManager through a set of API fu
277
277
Sensor* getSensorWithChild(uint8_t child_id);
278
278
// sleep between send()
279
279
void sleepBetweenSend();
280
+ // set the analog reference to the given value and optionally perform some fake reading on the given pin
281
+ void setAnalogReference(uint8_t value, uint8_t pin = -1);
280
282
#if NODEMANAGER_SLEEP == ON
281
283
// [ 3] set the duration (in seconds) of a sleep cycle
282
284
void setSleepSeconds(unsigned long value);
Original file line number Diff line number Diff line change @@ -721,3 +721,23 @@ void NodeManager::sleepBetweenSend() {
721
721
// if we sleep here ack management will not work
722
722
if (_sleep_between_send > 0 ) wait (_sleep_between_send);
723
723
}
724
+
725
+ // set the analog reference
726
+ void NodeManager::setAnalogReference (uint8_t value, uint8_t pin) {
727
+ #ifdef CHIP_AVR
728
+ // nothing to do
729
+ if (value == _analog_reference) return ;
730
+ // change the analog reference
731
+ analogReference (value);
732
+ // wait a bit
733
+ wait (200 );
734
+ // perform some reading before actually reading the value
735
+ if (pin > -1 ) {
736
+ for (int i = 0 ; i < 5 ; i++) {
737
+ analogRead (pin);
738
+ wait (50 );
739
+ }
740
+ }
741
+ #endif
742
+ }
743
+
Original file line number Diff line number Diff line change @@ -83,6 +83,8 @@ class NodeManager {
83
83
Sensor* getSensorWithChild (uint8_t child_id);
84
84
// sleep between send()
85
85
void sleepBetweenSend ();
86
+ // set the analog reference to the given value and optionally perform some fake reading on the given pin
87
+ void setAnalogReference (uint8_t value, uint8_t pin = -1 );
86
88
#if NODEMANAGER_SLEEP == ON
87
89
// [3] set the duration (in seconds) of a sleep cycle
88
90
void setSleepSeconds (unsigned long value);
@@ -179,6 +181,7 @@ class NodeManager {
179
181
uint8_t _reboot_pin = -1 ;
180
182
void _present (uint8_t child_id, uint8_t type);
181
183
List<Timer*> _timers;
184
+ uint8_t _analog_reference = DEFAULT;
182
185
#if NODEMANAGER_INTERRUPTS == ON
183
186
uint8_t _interrupt_1_mode = MODE_NOT_DEFINED;
184
187
uint8_t _interrupt_2_mode = MODE_NOT_DEFINED;
Original file line number Diff line number Diff line change @@ -111,10 +111,7 @@ class SensorAnalogInput: public Sensor {
111
111
int _getAnalogRead () {
112
112
#ifdef CHIP_AVR
113
113
// set the reference
114
- if (_reference != -1 ) {
115
- analogReference (_reference);
116
- wait (100 );
117
- }
114
+ if (_reference != -1 ) nodeManager.setAnalogReference (_reference);
118
115
#endif
119
116
// read and return the value
120
117
int value = analogRead (_pin);
Original file line number Diff line number Diff line change @@ -74,25 +74,21 @@ class SensorBattery: public Sensor {
74
74
_battery_adj_factor = value;
75
75
};
76
76
77
- // define what to do during setup
78
- void onSetup () {
79
- #ifdef CHIP_AVR
80
- // when measuring the battery from a pin, analog reference must be internal
81
- if (! _battery_internal_vcc && _battery_pin > -1 )
82
- #ifdef CHIP_MEGA
83
- analogReference (INTERNAL1V1);
84
- #else
85
- analogReference (INTERNAL);
86
- #endif
87
- #endif
88
- };
89
-
90
77
// define what to do during loop
91
78
void onLoop (Child* child) {
92
- // measure the board vcc
79
+ // measure the battery
93
80
float volt = 0 ;
94
81
if (_battery_internal_vcc || _battery_pin == -1 ) volt = (float )hwCPUVoltage ()/1000 ;
95
- else volt = analogRead (_battery_pin) * _battery_volts_per_bit;
82
+ else {
83
+ // when measuring the battery from a pin, analog reference must be internal
84
+ #ifdef CHIP_AVR
85
+ nodeManager.setAnalogReference (INTERNAL);
86
+ #endif
87
+ #ifdef CHIP_MEGA
88
+ nodeManager.setAnalogReference (INTERNAL1V1);
89
+ #endif
90
+ volt = analogRead (_battery_pin) * _battery_volts_per_bit;
91
+ }
96
92
volt = volt * _battery_adj_factor;
97
93
child->setValue (volt);
98
94
// calculate the percentage
Original file line number Diff line number Diff line change @@ -32,7 +32,6 @@ class SensorRain: public SensorAnalogInput {
32
32
children.get ()->setPresentation (S_RAIN);
33
33
children.get ()->setType (V_RAINRATE);
34
34
children.get ()->setDescription (_name);
35
- setReference (DEFAULT);
36
35
setOutputPercentage (true );
37
36
setReverse (true );
38
37
setRangeMin (100 );
Original file line number Diff line number Diff line change @@ -35,7 +35,6 @@ class SensorSoilMoisture: public SensorAnalogInput {
35
35
setReverse (true );
36
36
setRangeMin (100 );
37
37
setOutputPercentage (true );
38
- setReference (DEFAULT);
39
38
};
40
39
41
40
};
You can’t perform that action at this time.
0 commit comments