ds3231/ds3231/main.cpp

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;
}