Implemented setting of alarm and time and printing alarm

This commit is contained in:
BlackMark 2017-04-27 01:04:33 +02:00
parent e639db5e5b
commit b658ebac97

View File

@ -5,6 +5,8 @@
*/
#include <stdio.h>
#include <stdlib.h>
#include <avr/interrupt.h>
#include "usart/usart.h"
#include "clock.h"
@ -18,7 +20,6 @@ void setup()
twi_init_master();
rtc_init();
rtc_set_time_s( 12, 0, 50 );
if( rtc_is_ds3231() )
{
@ -28,8 +29,60 @@ void setup()
{
cSerial << "ERROR - No RTC detected!" << "\r\n";
}
}
rtc_set_alarm_s( 12, 1, 0 );
void setTime()
{
USART0 &cSerial = USART0::inst();
tm* tmTime = rtc_get_time();
constexpr auto BUFFER_SIZE = 32;
char szBuffer[BUFFER_SIZE];
cSerial << "Set time:" << "\r\n" << "Hour: ";
cSerial.receiveLine( szBuffer, BUFFER_SIZE, "\r" );
cSerial << szBuffer << "\r\n";
tmTime->hour = atoi( szBuffer );
cSerial << "Minute: ";
cSerial.receiveLine( szBuffer, BUFFER_SIZE, "\r" );
cSerial << szBuffer << "\r\n";
tmTime->min = atoi( szBuffer );
cSerial << "Second: ";
cSerial.receiveLine( szBuffer, BUFFER_SIZE, "\r" );
cSerial << szBuffer << "\r\n";
tmTime->sec = atoi( szBuffer );
rtc_set_time( tmTime );
}
void setAlarm()
{
USART0 &cSerial = USART0::inst();
tm* tmAlarm = rtc_get_alarm();
constexpr auto BUFFER_SIZE = 32;
char szBuffer[BUFFER_SIZE];
cSerial << "Set alarm:" << "\r\n" << "Hour: ";
cSerial.receiveLine( szBuffer, BUFFER_SIZE, "\r" );
cSerial << szBuffer << "\r\n";
tmAlarm->hour = atoi( szBuffer );
cSerial << "Minute: ";
cSerial.receiveLine( szBuffer, BUFFER_SIZE, "\r" );
cSerial << szBuffer << "\r\n";
tmAlarm->min = atoi( szBuffer );
cSerial << "Second: ";
cSerial.receiveLine( szBuffer, BUFFER_SIZE, "\r" );
cSerial << szBuffer << "\r\n";
tmAlarm->sec = atoi( szBuffer );
rtc_set_alarm( tmAlarm );
}
int main()
@ -51,18 +104,14 @@ int main()
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 )
if( tmTime->hour != ui8Hour || tmTime->min != ui8Minute || tmTime->sec != ui8Second )
{
ui8Hour = tmTime->hour;
ui8Minute = tmTime->min;
@ -77,20 +126,34 @@ int main()
}
}
uint8_t ui8Bootloader;
uint8_t ui8Cmd;
if( cSerial.receiveByte( ui8Bootloader ) )
if( cSerial.receiveByte( ui8Cmd ) )
{
if( ui8Bootloader == 'b' )
if( ui8Cmd == 'b' )
{
cSerial << "Bootloader . . . " << "\r\n";
_delay_ms( 1000 );
reset();
}
else if( ui8Cmd == 's' )
{
setTime();
}
else if( ui8Cmd == 'a' )
{
setAlarm();
}
else if( ui8Cmd == 'p' )
{
rtc_get_alarm_s( &ui8Hour, &ui8Minute, &ui8Second );
sprintf( szBuffer, "Alarm set to: %02d:%02d:%02d", ui8Hour, ui8Minute, ui8Second );
cSerial << szBuffer << "\r\n";
}
else
{
cSerial << "Invalid char: '";
cSerial.transmitByte( ui8Bootloader );
cSerial.transmitByte( ui8Cmd );
cSerial << "'" << "\r\n";
}
}