diff --git a/main.cpp b/main.cpp index 9331a83..8c57f15 100644 --- a/main.cpp +++ b/main.cpp @@ -22,13 +22,14 @@ char buffer[SNPRINTF_BUFFER_SIZE]; SVector 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* 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* relays, void temperaturePacketRecived(uint32_t data, void* userData) { - Serial* serial = reinterpret_cast(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(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); }