Initial commit
This commit is contained in:
@@ -0,0 +1,96 @@
|
||||
/*
|
||||
* NodeManager
|
||||
*/
|
||||
|
||||
#include "NodeManager.h"
|
||||
|
||||
/***************************************
|
||||
Global functions
|
||||
*/
|
||||
|
||||
// return vcc in V
|
||||
float getVcc() {
|
||||
#ifndef MY_GATEWAY_ESP8266
|
||||
// Measure Vcc against 1.1V Vref
|
||||
#if defined(__AVR_ATmega32U4__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
|
||||
ADMUX = (_BV(REFS0) | _BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1));
|
||||
#elif defined (__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__)
|
||||
ADMUX = (_BV(MUX5) | _BV(MUX0));
|
||||
#elif defined (__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__)
|
||||
ADMUX = (_BV(MUX3) | _BV(MUX2));
|
||||
#else
|
||||
ADMUX = (_BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1));
|
||||
#endif
|
||||
// Vref settle
|
||||
wait(70);
|
||||
// Do conversion
|
||||
ADCSRA |= _BV(ADSC);
|
||||
while (bit_is_set(ADCSRA, ADSC)) {};
|
||||
// return Vcc in mV
|
||||
return (float)((1125300UL) / ADC) / 1000;
|
||||
#else
|
||||
return (float)0;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
/***************************************
|
||||
PowerManager
|
||||
*/
|
||||
|
||||
// set the vcc and ground pin the sensor is connected to
|
||||
void PowerManager::setPowerPins(int8_t vcc_pin, int8_t ground_pin, int wait_time) {
|
||||
#if DEBUG == 1
|
||||
Serial.print(F("PWR G="));
|
||||
Serial.print(ground_pin);
|
||||
Serial.print(F(" V="));
|
||||
Serial.println(vcc_pin);
|
||||
#endif
|
||||
_vcc_pin = vcc_pin;
|
||||
// configure the vcc pin as output and initialize to high (power on)
|
||||
pinMode(_vcc_pin, OUTPUT);
|
||||
digitalWrite(_vcc_pin, HIGH);
|
||||
_ground_pin = ground_pin;
|
||||
if (_ground_pin >= 0) {
|
||||
// configure the ground pin as output and initialize to low
|
||||
pinMode(_ground_pin, OUTPUT);
|
||||
digitalWrite(_ground_pin, LOW);
|
||||
}
|
||||
_wait = wait_time;
|
||||
}
|
||||
|
||||
// return true if power pins have been configured
|
||||
bool PowerManager::isConfigured() {
|
||||
if (_vcc_pin != -1) return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
bool PowerManager::isPowerOn() {
|
||||
return digitalRead(_vcc_pin);
|
||||
}
|
||||
|
||||
// turn on the sensor by activating its power pins
|
||||
void PowerManager::powerOn() {
|
||||
if (! isConfigured()) return;
|
||||
#if DEBUG == 1
|
||||
Serial.print(F("ON P="));
|
||||
Serial.println(_vcc_pin);
|
||||
#endif
|
||||
// power on the sensor by turning high the vcc pin
|
||||
digitalWrite(_vcc_pin, HIGH);
|
||||
// wait a bit for the device to settle down
|
||||
if (_wait > 0) wait(_wait);
|
||||
}
|
||||
|
||||
// turn off the sensor
|
||||
void PowerManager::powerOff() {
|
||||
if (! isConfigured()) return;
|
||||
#if DEBUG == 1
|
||||
Serial.print(F("OFF P="));
|
||||
Serial.println(_vcc_pin);
|
||||
#endif
|
||||
// power off the sensor by turning low the vcc pin
|
||||
digitalWrite(_vcc_pin, LOW);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user