100 lines
1.6 KiB
C++
100 lines
1.6 KiB
C++
/*
|
|
* Copyright (c) by BlackMark 2017
|
|
* Date 26/04/2017
|
|
* Version 1.0
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
|
|
#include "usart/usart.h"
|
|
#include "clock.h"
|
|
#include "bootloader.h"
|
|
#include "twi.h"
|
|
#include "rtc.h"
|
|
|
|
void setup()
|
|
{
|
|
USART0 &cSerial = USART0::inst();
|
|
|
|
twi_init_master();
|
|
rtc_init();
|
|
rtc_set_time_s( 12, 0, 50 );
|
|
|
|
if( rtc_is_ds3231() )
|
|
{
|
|
cSerial << "DS3231 detected!" << "\r\n";
|
|
}
|
|
else
|
|
{
|
|
cSerial << "ERROR - No RTC detected!" << "\r\n";
|
|
}
|
|
|
|
rtc_set_alarm_s( 12, 1, 0 );
|
|
}
|
|
|
|
int main()
|
|
{
|
|
uint8_t ui8MCUSR = handleReset();
|
|
|
|
if( ui8MCUSR & ( 1 << WDRF ) )
|
|
{
|
|
callBootloader();
|
|
}
|
|
|
|
USART0 &cSerial = USART0::inst();
|
|
|
|
cSerial.init( 9600 );
|
|
sei();
|
|
|
|
setup();
|
|
|
|
uint8_t ui8Hour;
|
|
uint8_t ui8Minute;
|
|
uint8_t ui8Second;
|
|
|
|
rtc_get_alarm_s( &ui8Hour, &ui8Minute, &ui8Second );
|
|
|
|
char szBuffer[32];
|
|
sprintf( szBuffer, "Alarm set to: %02d:%02d:%02d\r\n", ui8Hour, ui8Minute, ui8Second );
|
|
cSerial << szBuffer << "\r\n";
|
|
|
|
while( true )
|
|
{
|
|
tm* tmTime = rtc_get_time();
|
|
|
|
if( tmTime->sec != ui8Second )
|
|
{
|
|
ui8Hour = tmTime->hour;
|
|
ui8Minute = tmTime->min;
|
|
ui8Second = tmTime->sec;
|
|
|
|
sprintf( szBuffer, "%02d:%02d:%02d\r\n", ui8Hour, ui8Minute, ui8Second );
|
|
cSerial << "Time: " << szBuffer;
|
|
|
|
if( rtc_check_alarm() )
|
|
{
|
|
cSerial << "ALARM!" << "\r\n";
|
|
}
|
|
}
|
|
|
|
uint8_t ui8Bootloader;
|
|
|
|
if( cSerial.receiveByte( ui8Bootloader ) )
|
|
{
|
|
if( ui8Bootloader == 'b' )
|
|
{
|
|
cSerial << "Bootloader . . . " << "\r\n";
|
|
_delay_ms( 1000 );
|
|
reset();
|
|
}
|
|
else
|
|
{
|
|
cSerial << "Invalid char: '";
|
|
cSerial.transmitByte( ui8Bootloader );
|
|
cSerial << "'" << "\r\n";
|
|
}
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
} |