Untitled
unknown
plain_text
a year ago
1.9 kB
5
Indexable
#include <Wire.h>
#include "RTClib.h"
#include <avr/sleep.h> // Biblioteka do obsługi trybu uśpienia
RTC_DS3231 rtc; // Obiekt dla modułu RTC
const int ledPin = 9; // Pin dla diody LED
const int interruptPin = 8; // Pin dla przerwania (INT5)
volatile bool wakeUp = false; // Flaga dla wybudzenia
void setup() {
pinMode(ledPin, OUTPUT); // Ustawienie pinu LED jako wyjście
pinMode(interruptPin, INPUT_PULLUP); // Ustawienie pinu przerwania jako wejście
attachInterrupt(5, wakeUpISR, FALLING); // Wywołanie przerwania przy sygnale opadającym
Wire.begin(); // Inicjalizacja I2C
if (!rtc.begin()) {
while (1); // Zatrzymaj program, jeśli moduł RTC nie działa
}
// Ustawienie alarmu w RTC (co 30 sekund)
rtc.clearAlarm(1);
rtc.writeSqwPinMode(DS3231_OFF); // Wyłączenie sygnału kwadratowego
rtc.setAlarm1(rtc.now() + TimeSpan(30), DS3231_A1_Second); // Alarm za 30 sekund
rtc.alarmInterrupt(1, true); // Włącz przerwania alarmu
}
void loop() {
blinkLED(10); // Zamrugaj diodą 10 razy
enterSleepMode(); // Wejdź w tryb uśpienia
// Po wybudzeniu program wróci tutaj
}
// Funkcja mrugania diodą
void blinkLED(int times) {
for (int i = 0; i < times; i++) {
digitalWrite(ledPin, HIGH);
delay(250); // Dioda świeci przez 250 ms
digitalWrite(ledPin, LOW);
delay(250); // Dioda zgaszona przez 250 ms
}
}
// Funkcja obsługująca tryb uśpienia
void enterSleepMode() {
wakeUp = false; // Resetuj flagę wybudzenia
set_sleep_mode(SLEEP_MODE_PWR_DOWN); // Ustaw tryb uśpienia
sleep_enable(); // Zezwól na uśpienie
// Przerwij obsługę kodu i przejdź w tryb uśpienia
sleep_cpu();
// Program wraca tutaj po wybudzeniu
sleep_disable(); // Wyłącz tryb uśpienia
}
// Funkcja obsługi przerwania
void wakeUpISR() {
wakeUp = true; // Ustaw flagę wybudzenia
}Editor is loading...
Leave a Comment