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; SVector<WirelessRelay, MAX_RELAYS> relays;
bool flag = false;
ISR(PCINT1_vect) ISR(PCINT1_vect)
{ {
W433DataReciver::staticInterrupt(); W433DataReciver::staticInterrupt();
} }
bool sensorsPaused = false;
inline static void printHelp(Serial* serial) inline static void printHelp(Serial* serial)
{ {
@ -41,6 +42,9 @@ inline static void printHelp(Serial* serial)
state : Get machine readable state.\n\ state : Get machine readable state.\n\
erase : Erase epprom.\n\ erase : Erase epprom.\n\
dump : Dump 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 [on/off] : Turn on/off RGB leds at current value.\n\
rgb print : Print current RGB value.\n\ rgb print : Print current RGB value.\n\
rgb set [RRR] [GGG] [BBB] : Set RGB value, pattern must be 0.\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 ) 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); serial->write(buffer, SNPRINTF_BUFFER_SIZE);
} }
else if( strcmp(token, "set") == 0 ) 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); auxDispatch(auxPwm, strtok(NULL, " \n"), serial);
writeState(relays, auxPwm, 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) else if(strcmp(token, "state") == 0)
{ {
writeState(relays, auxPwm, serial); writeState(relays, auxPwm, serial);
} }
else if(strcmp(token, "erase") == 0) 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")); serial->write_p(PSTR("EEPROM erased\n"));
load(); load();
} }
else if(strcmp(token, "dump") == 0) 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(','); if(i != 0) serial->putChar(',');
serial->write((uint16_t)EEPROM_read_char(i)); serial->write((uint16_t)EEPROM_read_char(i));
@ -327,6 +341,8 @@ void serialDispatch(Serial* serial, SVector<WirelessRelay, MAX_RELAYS>* relays,
void temperaturePacketRecived(uint32_t data, void* userData) void temperaturePacketRecived(uint32_t data, void* userData)
{ {
if(!sensorsPaused)
{
Serial* serial = reinterpret_cast<Serial*>(userData); Serial* serial = reinterpret_cast<Serial*>(userData);
if(data >> 24 == 1) if(data >> 24 == 1)
{ {
@ -340,6 +356,7 @@ void temperaturePacketRecived(uint32_t data, void* userData)
serial->write(data & 0x000000FF); serial->write(data & 0x000000FF);
serial->putChar('\n'); serial->putChar('\n');
} }
}
} }
@ -353,7 +370,6 @@ int main()
bool doorOne = readPin(&PINB, PB3); bool doorOne = readPin(&PINB, PB3);
bool doorTow = readPin(&PINB, PB4); bool doorTow = readPin(&PINB, PB4);
uint16_t openCount = 0;
sei(); sei();
@ -381,49 +397,38 @@ int main()
serialDispatch(&serial, &relays, &rgbled, &pwmTc1); serialDispatch(&serial, &relays, &rgbled, &pwmTc1);
rgbled.logic(); rgbled.logic();
if(doorOne != readPin(&PINB, PB3)) if(doorOne != readPin(&PINB, PB3) && !sensorsPaused)
{ {
_delay_ms(10); _delay_ms(10);
if(doorOne != readPin(&PINB, PB3)) if(doorOne != readPin(&PINB, PB3))
{ {
doorOne = readPin(&PINB, PB3); doorOne = readPin(&PINB, PB3);
serial->write_p(PSTR("SENSOR TYPE: ")); serial.write_p(PSTR("SENSOR TYPE: "));
serial->putChar('0'); serial.putChar('0');
serial->write_p(PSTR(" ID: ")); serial.write_p(PSTR(" ID: "));
serial->putChar('0'); serial.putChar('0');
serial->write_p(PSTR(" STATE: ")); serial.write_p(PSTR(" STATE: "));
serial->write(doorOne); serial.write(doorOne);
serial->putChar('\n'); serial.putChar('\n');
} }
} }
if(doorTow != readPin(&PINB, PB4))
if(doorTow != readPin(&PINB, PB4) && !sensorsPaused)
{ {
_delay_ms(10); _delay_ms(10);
if(doorTow != readPin(&PINB, PB4)) if(doorTow != readPin(&PINB, PB4))
{ {
doorTow = readPin(&PINB, PB3); doorTow = readPin(&PINB, PB3);
serial->write_p(PSTR("SENSOR TYPE: ")); serial.write_p(PSTR("SENSOR TYPE: "));
serial->putChar('0'); serial.putChar('0');
serial->write_p(PSTR(" ID: ")); serial.write_p(PSTR(" ID: "));
serial->putChar('1'); serial.putChar('1');
serial->write_p(PSTR(" STATE: ")); serial.write_p(PSTR(" STATE: "));
serial->write(doorTow); serial.write(doorTow);
serial->putChar('\n'); 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); _delay_ms(2);
} }