Untitled
unknown
plain_text
5 months ago
1.9 kB
4
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