reformat
This commit is contained in:
95
main.cpp
95
main.cpp
@ -29,6 +29,8 @@
|
||||
#define welcomeString "HELOJANA"
|
||||
static constexpr bool bdayMsg = false;
|
||||
|
||||
static constexpr int timeOffsetSeconds = 6;
|
||||
|
||||
void buttonHandler(uint8_t index, uint8_t type, void* data);
|
||||
SVector<Sensor, MAX_SENSORS> sensors;
|
||||
ShiftReg<16> shiftReg(&PORTB, PB3, PB2, PB1);
|
||||
@ -55,20 +57,28 @@ volatile bool ringging = false;
|
||||
|
||||
char buffer[SNPRINTF_BUFFER_SIZE];
|
||||
|
||||
volatile bool sensorsPaused = true;
|
||||
volatile bool sensorsPaused = false;
|
||||
|
||||
volatile bool relaySetting = false;
|
||||
|
||||
volatile uint8_t timer = 0;
|
||||
volatile uint8_t displayDevider = 1;
|
||||
|
||||
ISR(TIMER1_COMPA_vect)
|
||||
{
|
||||
W433DataReciver::staticInterrupt();
|
||||
if(displayDevider > 1)
|
||||
{
|
||||
TIMSK2 = 0;
|
||||
W433DataReciver::staticInterrupt();
|
||||
writePin(&PORTB, PB5, !readPin(&PORTB, PB5));
|
||||
TIMSK2 = 1;
|
||||
}
|
||||
}
|
||||
|
||||
ISR(TIMER2_OVF_vect)
|
||||
{
|
||||
display.tick();
|
||||
if(timer % displayDevider == 0)
|
||||
display.tick();
|
||||
buttons.tick();
|
||||
if(ringging && ((timer % 4 == 0 && timer < 128) || (timer > 128 && timer % 16 == 0)))
|
||||
writePin(&PORTD, PD4, true);
|
||||
@ -90,7 +100,7 @@ void buttonHandler(uint8_t index, uint8_t type, void* data)
|
||||
{
|
||||
relaySetting = !relaySetting;
|
||||
}
|
||||
else if(index == 1 && type == Buttons::RELEASED )
|
||||
else if(index == 1 && type == Buttons::RELEASED)
|
||||
{
|
||||
if(!ringging)
|
||||
{
|
||||
@ -122,9 +132,12 @@ void printSensor(const Sensor& sensor, Serial* serial)
|
||||
serial->write_p(PSTR(" ID: "));
|
||||
serial->write(sensor.id);
|
||||
|
||||
if(sensor.type == 1) serial->write_p(PSTR(" TEMPERATURE: "));
|
||||
else if(sensor.type == 2) serial->write_p(PSTR(" HUMIDITY: "));
|
||||
else serial->write_p(PSTR(" FIELD: "));
|
||||
if(sensor.type == 1)
|
||||
serial->write_p(PSTR(" TEMPERATURE: "));
|
||||
else if(sensor.type == 2)
|
||||
serial->write_p(PSTR(" HUMIDITY: "));
|
||||
else
|
||||
serial->write_p(PSTR(" FIELD: "));
|
||||
serial->write(sensor.field);
|
||||
serial->putChar('\n');
|
||||
}
|
||||
@ -148,9 +161,11 @@ void packetHandler(uint32_t packet, void* data)
|
||||
found = true;
|
||||
}
|
||||
}
|
||||
if(!found) sensors.push_back(sensor);
|
||||
if(!found)
|
||||
sensors.push_back(sensor);
|
||||
|
||||
if(!sensorsPaused) printSensor(sensor, serial);
|
||||
if(!sensorsPaused)
|
||||
printSensor(sensor, serial);
|
||||
}
|
||||
|
||||
void reciverError(uint8_t code, void* userData)
|
||||
@ -166,16 +181,16 @@ void reciverError(uint8_t code, void* userData)
|
||||
|
||||
inline static void printHelp(Serial* serial)
|
||||
{
|
||||
serial->write_p(PSTR("Available Commands: \n\
|
||||
help : Show this prompt.\n\
|
||||
date : Show current date and time.\n\
|
||||
set [yyyy] [mm] [dd] [hh] [mm] [ss] : Show current date and time.\n\
|
||||
pause : pause sensor output.\n\
|
||||
resume : resume sensor output.\n\
|
||||
dump : Dump epprom.\n\
|
||||
free : Show free ram.\n\
|
||||
beep : Test buzzer.\n\
|
||||
list : List sensors.\n"));
|
||||
serial->write_p(PSTR("Available Commands: \n"
|
||||
"help : Show this prompt.\n"
|
||||
"date : Show current date and time.\n"
|
||||
"set [yyyy] [mm] [dd] [hh] [mm] [ss] : Show current date and time.\n"
|
||||
"pause : pause sensor output.\n"
|
||||
"resume : resume sensor output.\n"
|
||||
"dump : Dump epprom.\n"
|
||||
"free : Show free ram.\n"
|
||||
"beep : Test buzzer.\n"
|
||||
"list : List sensors.\n"));
|
||||
}
|
||||
|
||||
|
||||
@ -232,8 +247,11 @@ void serialDispatch(Serial* serial, SVector<Sensor, MAX_SENSORS>* sensors)
|
||||
}
|
||||
else if(strcmp(token, "list") == 0)
|
||||
{
|
||||
serial->write(sensors->count());
|
||||
serial->putChar(' ');
|
||||
serial->write_p(PSTR("Sensors:\n"));
|
||||
for(uint8_t i = 0; i < sensors->count(); ++i) printSensor(sensors->at(i), serial);
|
||||
for(uint8_t i = 0; i < sensors->count(); ++i)
|
||||
printSensor(sensors->at(i), serial);
|
||||
serial->write('\n');
|
||||
}
|
||||
else if(strcmp(token, "erase") == 0)
|
||||
@ -268,7 +286,10 @@ void serialDispatch(Serial* serial, SVector<Sensor, MAX_SENSORS>* sensors)
|
||||
{
|
||||
printHelp(serial);
|
||||
}
|
||||
else serial->write_p(PSTR("Not a valid command\n"));
|
||||
else
|
||||
{
|
||||
serial->write_p(PSTR("Not a valid command\n"));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -338,11 +359,12 @@ void setAlarm(DS1302::Timeval* alarm, uint8_t leadingSegment = 0)
|
||||
|
||||
int main()
|
||||
{
|
||||
DDRB = (1 << PB1) | ( 1 << PB2) | ( 1 << PB3) | ( 1 << PB4) | ( 1 << PB5);
|
||||
DDRB |= (1 << PB1) | ( 1 << PB2) | ( 1 << PB3);
|
||||
DDRB |= ( 1 << PB4) | ( 1 << PB5);
|
||||
DDRD = (1<<PD4) | (1<<PD2);
|
||||
PORTD |= (1<<PD6) | (1<<PD7);
|
||||
|
||||
TCCR2B = 1<<CS22;
|
||||
TCCR2B = 1<<CS22 | 1<<CS20;
|
||||
TIMSK2 = 1;
|
||||
|
||||
TCCR1B = 1<<CS10;
|
||||
@ -366,12 +388,12 @@ int main()
|
||||
#endif
|
||||
|
||||
display.setString(welcomeString);
|
||||
_delay_ms(1000);
|
||||
_delay_ms(500);
|
||||
|
||||
#ifdef HAS_DHT
|
||||
Dht11 sensor(&PORTD, &PIND, &DDRD, PD2);
|
||||
sensor.read();
|
||||
_delay_ms(1000);
|
||||
_delay_ms(500);
|
||||
sensor.read();
|
||||
#endif
|
||||
|
||||
@ -434,14 +456,14 @@ int main()
|
||||
displayItems(time, 0, 0);
|
||||
#endif
|
||||
|
||||
if(time.hour == alarmA.hour && time.min == alarmA.min && time.sec == 0)
|
||||
if((alm & almA) && time.hour == alarmA.hour && time.min == alarmA.min && time.sec == 0)
|
||||
{
|
||||
ringging = true;
|
||||
}
|
||||
|
||||
if(time.hour == alarmB.hour && time.min == alarmB.min && time.sec == 0)
|
||||
if((alm & almB) && time.hour == alarmB.hour && time.min == alarmB.min && time.sec == 0)
|
||||
{
|
||||
#ifdef HAS_TRANSMITTER
|
||||
#ifdef HAS_TRANSMITTER
|
||||
relay.setValue(true);
|
||||
#else
|
||||
ringging = true;
|
||||
@ -449,6 +471,7 @@ int main()
|
||||
}
|
||||
|
||||
serialDispatch(&serial, &sensors);
|
||||
|
||||
#ifdef HAS_RECIVER
|
||||
if(deleteDate != time.day)
|
||||
{
|
||||
@ -456,9 +479,23 @@ int main()
|
||||
sensors.clear();
|
||||
deleteDate = time.day;
|
||||
display.setString("CLEAR ");
|
||||
_delay_ms(1000);
|
||||
_delay_ms(500);
|
||||
}
|
||||
#endif
|
||||
|
||||
if(time.min > 45)
|
||||
displayDevider = 16;
|
||||
else
|
||||
displayDevider = 1;
|
||||
|
||||
if(time.hour == 0 && time.min == 0 && time.sec == timeOffsetSeconds+10)
|
||||
{
|
||||
DS1302::Timeval timeSet = time;
|
||||
timeSet.sec = 10;
|
||||
clock.setTime(timeSet);
|
||||
display.setString("CAL ");
|
||||
_delay_ms(500);
|
||||
}
|
||||
++i;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user