Implemented setting of alarm and time and printing alarm
This commit is contained in:
parent
e639db5e5b
commit
b658ebac97
@ -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";
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user