Compare commits

...

5 Commits

Author SHA1 Message Date
2147637385 Update submodule 2020-05-17 20:11:51 +02:00
966af1d5cf Add ability to read alarm times 2020-05-17 20:07:13 +02:00
a83671bda5 Add alarms to example 2020-05-17 19:56:11 +02:00
7e8a6b0dad Add power control for RTC 2020-05-17 15:40:29 +02:00
a897b7d9be Move comparison operator into library 2020-05-17 15:40:15 +02:00
3 changed files with 37 additions and 23 deletions

View File

@@ -218,6 +218,9 @@
<Compile Include="clock.hpp">
<SubType>compile</SubType>
</Compile>
<Compile Include="ds3231\alarms.hpp">
<SubType>compile</SubType>
</Compile>
<Compile Include="ds3231\ds3231.hpp">
<SubType>compile</SubType>
</Compile>

View File

@@ -64,28 +64,6 @@ static inline void printLocalTime(const rtc::DateTime &dateTime)
serial << dateTime << (dst ? F(" +2") : F(" +1")) << F("\r\n");
}
static inline bool operator==(const rtc::DateTime &lhs, const rtc::DateTime &rhs)
{
if (lhs.second != rhs.second)
return false;
if (lhs.minute != rhs.minute)
return false;
if (lhs.hour != rhs.hour)
return false;
if (lhs.day != rhs.day)
return false;
if (lhs.month != rhs.month)
return false;
if (lhs.year != rhs.year)
return false;
return true;
}
static inline bool operator!=(const rtc::DateTime &lhs, const rtc::DateTime &rhs)
{
return !(lhs == rhs);
}
static inline size_t receiveLine(char *buffer, const size_t maxLength)
{
uart_t serial;
@@ -148,10 +126,27 @@ int main()
{
uart_t serial;
rtc::DS3231<i2c::Hardware<100'000>, false> ds3231;
io::Pin<io::P::C3> rtcPwr;
rtcPwr = false;
rtcPwr.dir(io::Dir::OUT);
rtcPwr = true;
_delay_ms(1000);
ds3231.init();
serial.init();
ds3231.clearAlarm1();
ds3231.clearAlarm2();
rtc::DateTime alarmTime;
alarmTime.second = 17;
alarmTime.minute = 54;
ds3231.setAlarm1(alarmTime, rtc::Alarm1Rate::WHEN_S_MATCH);
ds3231.setAlarm2(alarmTime, rtc::Alarm2Rate::WHEN_M_MATCH);
auto oldDate = ds3231.getDateTime();
while (true) {
@@ -162,12 +157,28 @@ int main()
printLocalTime(date);
}
if (ds3231.checkAlarm1()) {
serial << F("Alarm1!\r\n");
ds3231.clearAlarm1();
}
if (ds3231.checkAlarm2()) {
serial << F("Alarm2!\r\n");
ds3231.clearAlarm2();
}
uint8_t receivedByte;
if (serial.rxByte(receivedByte)) {
if (receivedByte == 's') {
const auto newDate = receiveTime();
ds3231.setDateTime(newDate);
} else if (receivedByte == '1') {
const auto alarm = ds3231.getAlarm1();
serial << F("Alarm1: ") << alarm << F("\r\n");
} else if (receivedByte == '2') {
const auto alarm = ds3231.getAlarm2();
serial << F("Alarm2: ") << alarm << F("\r\n");
} else
serial << F("Invalid input: ") << static_cast<char>(receivedByte) << F("\r\n");
}