Skip to content

Commit 7a68ff1

Browse files
committed
docs(ds3231): add example for alarms
1 parent 747789a commit 7a68ff1

File tree

2 files changed

+89
-0
lines changed

2 files changed

+89
-0
lines changed

examples/ds3231/alarms/main.go

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
// Connects to an DS3231 I2C Real Time Clock (RTC) and sets both alarms. It then repeatedly checks
2+
// if the alarms are firing and prints out a message if that is the case.
3+
package main
4+
5+
import (
6+
"machine"
7+
"time"
8+
9+
"fmt"
10+
11+
"tinygo.org/x/drivers/ds3231"
12+
)
13+
14+
func main() {
15+
machine.I2C0.Configure(machine.I2CConfig{})
16+
17+
rtc := ds3231.New(machine.I2C0)
18+
rtc.Configure()
19+
20+
valid := rtc.IsTimeValid()
21+
if !valid {
22+
date := time.Date(2019, 12, 05, 20, 34, 12, 0, time.UTC)
23+
rtc.SetTime(date)
24+
}
25+
26+
// Set alarm1 so it triggers when the seconds match 59 => repeats every minute at dd:hh:mm:59
27+
if err := rtc.SetAlarm1(time.Date(0, 0, 0, 0, 0, 59, 0, time.UTC), ds3231.A1_SECOND); err != nil {
28+
fmt.Println("Error while setting Alarm1")
29+
}
30+
if err := rtc.EnableAlarm1(); err != nil {
31+
fmt.Println("Error while enabling Alarm1")
32+
}
33+
34+
// Set alarm2 so it triggers when the minutes match 59 => repeats every hour at dd:hh:59:ss
35+
if err := rtc.SetAlarm2(time.Date(0, 0, 0, 0, 59, 0, 0, time.UTC), ds3231.A2_MINUTE); err != nil {
36+
fmt.Println("Error while setting Alarm2")
37+
}
38+
if err := rtc.EnableAlarm2(); err != nil {
39+
fmt.Println("Error while enabling Alarm2")
40+
}
41+
42+
running := rtc.IsRunning()
43+
if !running {
44+
err := rtc.SetRunning(true)
45+
if err != nil {
46+
fmt.Println("Error configuring RTC")
47+
}
48+
}
49+
50+
for {
51+
dt, err := rtc.ReadTime()
52+
if err != nil {
53+
fmt.Println("Error reading date:", err)
54+
continue
55+
}
56+
57+
if rtc.IsAlarm1Fired() {
58+
fmt.Printf(
59+
"Alarm1 fired at %d/%s/%02d %02d:%02d:%02d \r\n",
60+
dt.Year(),
61+
dt.Month(),
62+
dt.Day(),
63+
dt.Hour(),
64+
dt.Minute(),
65+
dt.Second(),
66+
)
67+
if err := rtc.ClearAlarm1(); err != nil {
68+
fmt.Println("Error while clearing alarm1")
69+
}
70+
}
71+
72+
if rtc.IsAlarm2Fired() {
73+
fmt.Printf(
74+
"Alarm2 fired at %d/%s/%02d %02d:%02d:%02d \r\n",
75+
dt.Year(),
76+
dt.Month(),
77+
dt.Day(),
78+
dt.Hour(),
79+
dt.Minute(),
80+
dt.Second(),
81+
)
82+
if err := rtc.ClearAlarm2(); err != nil {
83+
fmt.Println("Error while clearing alarm2")
84+
}
85+
}
86+
87+
time.Sleep(time.Second * 1)
88+
}
89+
}
File renamed without changes.

0 commit comments

Comments
 (0)