mirror of
https://github.com/adafruit/RTClib.git
synced 2026-07-28 04:05:31 +00:00
Formatting
This commit is contained in:
@@ -7,7 +7,7 @@
|
||||
*/
|
||||
|
||||
#include <RTClib.h>
|
||||
#include <Wire.h>
|
||||
// #include <Wire.h>
|
||||
|
||||
RTC_DS3231 rtc;
|
||||
|
||||
@@ -15,87 +15,87 @@ RTC_DS3231 rtc;
|
||||
#define CLOCK_INTERRUPT_PIN 2
|
||||
|
||||
void setup() {
|
||||
Serial.begin(9600);
|
||||
Serial.begin(9600);
|
||||
|
||||
// initializing the rtc
|
||||
if(!rtc.begin()) {
|
||||
Serial.println("Couldn't find RTC!");
|
||||
Serial.flush();
|
||||
abort();
|
||||
}
|
||||
|
||||
if(rtc.lostPower()) {
|
||||
// this will adjust to the date and time at compilation
|
||||
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
|
||||
}
|
||||
|
||||
//we don't need the 32K Pin, so disable it
|
||||
rtc.disable32K();
|
||||
|
||||
// Making it so, that the alarm will trigger an interrupt
|
||||
pinMode(CLOCK_INTERRUPT_PIN, INPUT_PULLUP);
|
||||
attachInterrupt(digitalPinToInterrupt(CLOCK_INTERRUPT_PIN), onAlarm, FALLING);
|
||||
|
||||
// set alarm 1, 2 flag to false (so alarm 1, 2 didn't happen so far)
|
||||
// if not done, this easily leads to problems, as both register aren't reset on reboot/recompile
|
||||
rtc.clearAlarm(1);
|
||||
rtc.clearAlarm(2);
|
||||
|
||||
// stop oscillating signals at SQW Pin
|
||||
// otherwise setAlarm1 will fail
|
||||
rtc.writeSqwPinMode(DS3231_OFF);
|
||||
|
||||
// turn off alarm 2 (in case it isn't off already)
|
||||
// again, this isn't done at reboot, so a previously set alarm could easily go overlooked
|
||||
rtc.disableAlarm(2);
|
||||
|
||||
// schedule an alarm 10 seconds in the future
|
||||
if(!rtc.setAlarm1(
|
||||
rtc.now() + TimeSpan(10),
|
||||
DS3231_A1_Second // this mode triggers the alarm when the seconds match. See Doxygen for other options
|
||||
)) {
|
||||
Serial.println("Error, alarm wasn't set!");
|
||||
}else {
|
||||
Serial.println("Alarm will happen in 10 seconds!");
|
||||
}
|
||||
// initializing the rtc
|
||||
if(!rtc.begin()) {
|
||||
Serial.println("Couldn't find RTC!");
|
||||
Serial.flush();
|
||||
abort();
|
||||
}
|
||||
|
||||
if(rtc.lostPower()) {
|
||||
// this will adjust to the date and time at compilation
|
||||
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
|
||||
}
|
||||
|
||||
//we don't need the 32K Pin, so disable it
|
||||
rtc.disable32K();
|
||||
|
||||
// Making it so, that the alarm will trigger an interrupt
|
||||
pinMode(CLOCK_INTERRUPT_PIN, INPUT_PULLUP);
|
||||
attachInterrupt(digitalPinToInterrupt(CLOCK_INTERRUPT_PIN), onAlarm, FALLING);
|
||||
|
||||
// set alarm 1, 2 flag to false (so alarm 1, 2 didn't happen so far)
|
||||
// if not done, this easily leads to problems, as both register aren't reset on reboot/recompile
|
||||
rtc.clearAlarm(1);
|
||||
rtc.clearAlarm(2);
|
||||
|
||||
// stop oscillating signals at SQW Pin
|
||||
// otherwise setAlarm1 will fail
|
||||
rtc.writeSqwPinMode(DS3231_OFF);
|
||||
|
||||
// turn off alarm 2 (in case it isn't off already)
|
||||
// again, this isn't done at reboot, so a previously set alarm could easily go overlooked
|
||||
rtc.disableAlarm(2);
|
||||
|
||||
// schedule an alarm 10 seconds in the future
|
||||
if(!rtc.setAlarm1(
|
||||
rtc.now() + TimeSpan(10),
|
||||
DS3231_A1_Second // this mode triggers the alarm when the seconds match. See Doxygen for other options
|
||||
)) {
|
||||
Serial.println("Error, alarm wasn't set!");
|
||||
}else {
|
||||
Serial.println("Alarm will happen in 10 seconds!");
|
||||
}
|
||||
}
|
||||
|
||||
void loop() {
|
||||
// print current time
|
||||
char date[10] = "hh:mm:ss";
|
||||
rtc.now().toString(date);
|
||||
Serial.print(date);
|
||||
// the value at SQW-Pin (because of pullup 1 means no alarm)
|
||||
Serial.print(" SQW: ");
|
||||
Serial.print(digitalRead(CLOCK_INTERRUPT_PIN));
|
||||
// whether a alarm happened happened
|
||||
Serial.print(" Alarm1: ");
|
||||
Serial.print(rtc.alarmFired(1));
|
||||
// Serial.print(" Alarm2: ");
|
||||
// Serial.println(rtc.alarmFired(2));
|
||||
// control register values (see https://datasheets.maximintegrated.com/en/ds/DS3231.pdf page 13)
|
||||
// Serial.print(" Control: 0b");
|
||||
// Serial.println(read_i2c_register(DS3231_ADDRESS, DS3231_CONTROL), BIN);
|
||||
|
||||
// resetting SQW and alarm 1 flag
|
||||
// using setAlarm1, the next alarm could now be configurated
|
||||
if(rtc.alarmFired(1)) {
|
||||
rtc.clearAlarm(1);
|
||||
Serial.println("Alarm cleared");
|
||||
}
|
||||
|
||||
delay(2000);
|
||||
// print current time
|
||||
char date[10] = "hh:mm:ss";
|
||||
rtc.now().toString(date);
|
||||
Serial.print(date);
|
||||
// the value at SQW-Pin (because of pullup 1 means no alarm)
|
||||
Serial.print(" SQW: ");
|
||||
Serial.print(digitalRead(CLOCK_INTERRUPT_PIN));
|
||||
// whether a alarm happened happened
|
||||
Serial.print(" Alarm1: ");
|
||||
Serial.print(rtc.alarmFired(1));
|
||||
// Serial.print(" Alarm2: ");
|
||||
// Serial.println(rtc.alarmFired(2));
|
||||
// control register values (see https://datasheets.maximintegrated.com/en/ds/DS3231.pdf page 13)
|
||||
// Serial.print(" Control: 0b");
|
||||
// Serial.println(read_i2c_register(DS3231_ADDRESS, DS3231_CONTROL), BIN);
|
||||
|
||||
// resetting SQW and alarm 1 flag
|
||||
// using setAlarm1, the next alarm could now be configurated
|
||||
if(rtc.alarmFired(1)) {
|
||||
rtc.clearAlarm(1);
|
||||
Serial.println("Alarm cleared");
|
||||
}
|
||||
|
||||
delay(2000);
|
||||
}
|
||||
|
||||
void onAlarm() {
|
||||
Serial.println("Alarm occured!");
|
||||
Serial.println("Alarm occured!");
|
||||
}
|
||||
|
||||
/*static uint8_t read_i2c_register(uint8_t addr, uint8_t reg) {
|
||||
Wire.beginTransmission(addr);
|
||||
Wire.write((byte)reg);
|
||||
Wire.endTransmission();
|
||||
Wire.beginTransmission(addr);
|
||||
Wire.write((byte)reg);
|
||||
Wire.endTransmission();
|
||||
|
||||
Wire.requestFrom(addr, (byte)1);
|
||||
return Wire.read();
|
||||
Wire.requestFrom(addr, (byte)1);
|
||||
return Wire.read();
|
||||
}*/
|
||||
|
||||
Reference in New Issue
Block a user