added sensor pausing commands
This commit is contained in:
93
main.cpp
93
main.cpp
@ -22,13 +22,14 @@ char buffer[SNPRINTF_BUFFER_SIZE];
|
||||
|
||||
SVector<WirelessRelay, MAX_RELAYS> relays;
|
||||
|
||||
bool flag = false;
|
||||
|
||||
ISR(PCINT1_vect)
|
||||
{
|
||||
W433DataReciver::staticInterrupt();
|
||||
}
|
||||
|
||||
bool sensorsPaused = false;
|
||||
|
||||
inline static void printHelp(Serial* serial)
|
||||
{
|
||||
|
||||
@ -41,6 +42,9 @@ inline static void printHelp(Serial* serial)
|
||||
state : Get machine readable state.\n\
|
||||
erase : Erase epprom.\n\
|
||||
dump : Dump epprom.\n\
|
||||
pause : pause sensor output.\n\
|
||||
resume : resume sensor output.\n\
|
||||
rgb fade [on/off] : turn Colorfade on or off.\n\
|
||||
rgb [on/off] : Turn on/off RGB leds at current value.\n\
|
||||
rgb print : Print current RGB value.\n\
|
||||
rgb set [RRR] [GGG] [BBB] : Set RGB value, pattern must be 0.\n\
|
||||
@ -180,7 +184,7 @@ void rgbDispatch(RgbLed* rgbled, char* token, Serial* serial)
|
||||
}
|
||||
else if( strcmp(token, "print") == 0 )
|
||||
{
|
||||
snprintf(buffer, SNPRINTF_BUFFER_SIZE, "Current RGB values:\nR: %u G: %u B: %u\n", rgbled->getR(), rgbled->getG(), rgbled->getB());
|
||||
// snprintf(buffer, SNPRINTF_BUFFER_SIZE, "Current RGB values:\nR: %u G: %u B: %u\n", rgbled->getR(), rgbled->getG(), rgbled->getB());
|
||||
serial->write(buffer, SNPRINTF_BUFFER_SIZE);
|
||||
}
|
||||
else if( strcmp(token, "set") == 0 )
|
||||
@ -293,19 +297,29 @@ void serialDispatch(Serial* serial, SVector<WirelessRelay, MAX_RELAYS>* relays,
|
||||
auxDispatch(auxPwm, strtok(NULL, " \n"), serial);
|
||||
writeState(relays, auxPwm, serial);
|
||||
}
|
||||
else if(strcmp(token, "pause") == 0)
|
||||
{
|
||||
sensorsPaused = true;
|
||||
serial->write_p(PSTR("Sensors paused\n"));
|
||||
}
|
||||
else if(strcmp(token, "resume") == 0)
|
||||
{
|
||||
sensorsPaused = false;
|
||||
serial->write_p(PSTR("Sensors resumed\n"));
|
||||
}
|
||||
else if(strcmp(token, "state") == 0)
|
||||
{
|
||||
writeState(relays, auxPwm, serial);
|
||||
}
|
||||
else if(strcmp(token, "erase") == 0)
|
||||
{
|
||||
for(uint16_t i = 0; i < sizeof(*relays)+RELAY_VECTOR_EEPROM_ADDR; i++) EEPROM_write_char(i, 0);
|
||||
for(uint16_t i = 0; i < 1024; i++) EEPROM_write_char(i, 0);
|
||||
serial->write_p(PSTR("EEPROM erased\n"));
|
||||
load();
|
||||
}
|
||||
else if(strcmp(token, "dump") == 0)
|
||||
{
|
||||
for(uint16_t i = 0; i < sizeof(*relays)+RELAY_VECTOR_EEPROM_ADDR; i++)
|
||||
for(uint16_t i = 0; i < 1024; i++)
|
||||
{
|
||||
if(i != 0) serial->putChar(',');
|
||||
serial->write((uint16_t)EEPROM_read_char(i));
|
||||
@ -327,18 +341,21 @@ void serialDispatch(Serial* serial, SVector<WirelessRelay, MAX_RELAYS>* relays,
|
||||
|
||||
void temperaturePacketRecived(uint32_t data, void* userData)
|
||||
{
|
||||
Serial* serial = reinterpret_cast<Serial*>(userData);
|
||||
if(data >> 24 == 1)
|
||||
if(!sensorsPaused)
|
||||
{
|
||||
serial->write_p(PSTR("SENSOR TYPE: "));
|
||||
serial->write(data >> 24);
|
||||
serial->write_p(PSTR(" ID: "));
|
||||
serial->write((data & 0x00FF0000) >> 16);
|
||||
serial->write_p(PSTR(" TEMPERATURE: "));
|
||||
serial->write((data & 0x0000FF00) >> 8);
|
||||
serial->write_p(PSTR(" HUMIDITY: "));
|
||||
serial->write(data & 0x000000FF);
|
||||
serial->putChar('\n');
|
||||
Serial* serial = reinterpret_cast<Serial*>(userData);
|
||||
if(data >> 24 == 1)
|
||||
{
|
||||
serial->write_p(PSTR("SENSOR TYPE: "));
|
||||
serial->write(data >> 24);
|
||||
serial->write_p(PSTR(" ID: "));
|
||||
serial->write((data & 0x00FF0000) >> 16);
|
||||
serial->write_p(PSTR(" TEMPERATURE: "));
|
||||
serial->write((data & 0x0000FF00) >> 8);
|
||||
serial->write_p(PSTR(" HUMIDITY: "));
|
||||
serial->write(data & 0x000000FF);
|
||||
serial->putChar('\n');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -353,7 +370,6 @@ int main()
|
||||
|
||||
bool doorOne = readPin(&PINB, PB3);
|
||||
bool doorTow = readPin(&PINB, PB4);
|
||||
uint16_t openCount = 0;
|
||||
|
||||
sei();
|
||||
|
||||
@ -381,49 +397,38 @@ int main()
|
||||
serialDispatch(&serial, &relays, &rgbled, &pwmTc1);
|
||||
rgbled.logic();
|
||||
|
||||
if(doorOne != readPin(&PINB, PB3))
|
||||
if(doorOne != readPin(&PINB, PB3) && !sensorsPaused)
|
||||
{
|
||||
_delay_ms(10);
|
||||
if(doorOne != readPin(&PINB, PB3))
|
||||
{
|
||||
doorOne = readPin(&PINB, PB3);
|
||||
serial->write_p(PSTR("SENSOR TYPE: "));
|
||||
serial->putChar('0');
|
||||
serial->write_p(PSTR(" ID: "));
|
||||
serial->putChar('0');
|
||||
serial->write_p(PSTR(" STATE: "));
|
||||
serial->write(doorOne);
|
||||
serial->putChar('\n');
|
||||
serial.write_p(PSTR("SENSOR TYPE: "));
|
||||
serial.putChar('0');
|
||||
serial.write_p(PSTR(" ID: "));
|
||||
serial.putChar('0');
|
||||
serial.write_p(PSTR(" STATE: "));
|
||||
serial.write(doorOne);
|
||||
serial.putChar('\n');
|
||||
}
|
||||
}
|
||||
|
||||
if(doorTow != readPin(&PINB, PB4))
|
||||
|
||||
if(doorTow != readPin(&PINB, PB4) && !sensorsPaused)
|
||||
{
|
||||
_delay_ms(10);
|
||||
if(doorTow != readPin(&PINB, PB4))
|
||||
{
|
||||
doorTow = readPin(&PINB, PB3);
|
||||
serial->write_p(PSTR("SENSOR TYPE: "));
|
||||
serial->putChar('0');
|
||||
serial->write_p(PSTR(" ID: "));
|
||||
serial->putChar('1');
|
||||
serial->write_p(PSTR(" STATE: "));
|
||||
serial->write(doorTow);
|
||||
serial->putChar('\n');
|
||||
serial.write_p(PSTR("SENSOR TYPE: "));
|
||||
serial.putChar('0');
|
||||
serial.write_p(PSTR(" ID: "));
|
||||
serial.putChar('1');
|
||||
serial.write_p(PSTR(" STATE: "));
|
||||
serial.write(doorTow);
|
||||
serial.putChar('\n');
|
||||
}
|
||||
}
|
||||
if(doorTow) openCount++;
|
||||
if(openCount > 60000)
|
||||
{
|
||||
serial.write_p(PSTR("Door Open Warning\n"));
|
||||
openCount = 0;
|
||||
}
|
||||
|
||||
if(flag)
|
||||
{
|
||||
flag = false;
|
||||
serial.write("flag\n");
|
||||
}
|
||||
|
||||
_delay_ms(2);
|
||||
}
|
||||
|
Reference in New Issue
Block a user