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;
|
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,18 +341,21 @@ void serialDispatch(Serial* serial, SVector<WirelessRelay, MAX_RELAYS>* relays,
|
|||||||
|
|
||||||
void temperaturePacketRecived(uint32_t data, void* userData)
|
void temperaturePacketRecived(uint32_t data, void* userData)
|
||||||
{
|
{
|
||||||
Serial* serial = reinterpret_cast<Serial*>(userData);
|
if(!sensorsPaused)
|
||||||
if(data >> 24 == 1)
|
|
||||||
{
|
{
|
||||||
serial->write_p(PSTR("SENSOR TYPE: "));
|
Serial* serial = reinterpret_cast<Serial*>(userData);
|
||||||
serial->write(data >> 24);
|
if(data >> 24 == 1)
|
||||||
serial->write_p(PSTR(" ID: "));
|
{
|
||||||
serial->write((data & 0x00FF0000) >> 16);
|
serial->write_p(PSTR("SENSOR TYPE: "));
|
||||||
serial->write_p(PSTR(" TEMPERATURE: "));
|
serial->write(data >> 24);
|
||||||
serial->write((data & 0x0000FF00) >> 8);
|
serial->write_p(PSTR(" ID: "));
|
||||||
serial->write_p(PSTR(" HUMIDITY: "));
|
serial->write((data & 0x00FF0000) >> 16);
|
||||||
serial->write(data & 0x000000FF);
|
serial->write_p(PSTR(" TEMPERATURE: "));
|
||||||
serial->putChar('\n');
|
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 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);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user