added sensor pausing commands

This commit is contained in:
IMback
2018-10-29 18:33:51 +01:00
parent 5dac2e5ff9
commit c495218c97

View File

@ -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);
}