#include <OneWire.h> //Dołączenie biblioteki OneWire
#include <DallasTemperature.h> //Dołączenie biblioteki DallasTemperature
#include "RTClib.h" // Biblioteka do obsługi zegara czasu rzeczywistego RTC
#include <LiquidCrystal_I2C.h> // Dołączenie biblioteki dla modułu I2C
// Inicjalizacja obiektu lcd dla wyświetlacza z modułem I2C
// Adres I2C (0x27), 20 kolumn, 4 wiersze
LiquidCrystal_I2C lcd(0x27, 20, 4);
RTC_DS1307 rtc; // Tworzymy obiekt rtc zegara czasu rzeczywistego
// Deklaracja i inicjalizacja zmiennej globalnej - użycia pinu nr 7 dla czujnika temperatury
const int nr_pinu = 12;
// Tworzenie obiektu dla protokołu OneWire
OneWire oneWire(nr_pinu);
// Tworzenie obiektu dla czujnika temperatury
DallasTemperature sensor(&oneWire);
byte alarm_minuty = 0; // Zmienna przechowująca minuty alarmu
byte alarm_godziny = 0; // Zmienna przechowująca godziny alarmu
byte nastaw_minuty=0; // Zmienna przechowująca zmieniane minuty
byte nastaw_godziny=0; // Zmienna przechowująca zmieniane godziny
byte tryb=0; // Zmienna do zliczania naciśnięć przycisku
bool alarm=0; // Zmienna przechowywująca stan załączenia alarmu
void setup()
{
rtc.begin(); // Inicjalizacja zegara RTC
lcd.init(); // Inicjalizacja wyświetlacza
lcd.backlight(); // Włączenie podświetlenia wyświetlacza
sensor.begin(); // Inicjalizacja czujnika temperatury
// Ustawienie pinów 4, 5 jako wejścia z wewnętrznym pull-up
pinMode(4, INPUT_PULLUP);
pinMode(5, INPUT_PULLUP);
// Ustawienie pinu 6 jako wejście z wewnętrznym rezystorem podciągającym
pinMode(6, INPUT_PULLUP);
// Ustawienie pinu 8, 9, 10 i 11 jako wyjście
pinMode(8, OUTPUT);pinMode(9, OUTPUT);pinMode(10, OUTPUT);pinMode(11, OUTPUT);
}
void loop()
{ DateTime now = rtc.now(); // Pobranie aktualnej daty i godziny z zegara RTC
//Sprawdzenie, czy przycisk podłączony do pinu 6 jest naciśnięty
if(digitalRead(6) == LOW)
{
if(alarm==0) // Zmiana trybu tylko, gdy alarm nie jest załączony
{
// w przypadku gdy zmieni się tryb z 0 skopiuj do wartości nastaw aktualne godziny i minuty
if(tryb==0){nastaw_godziny=now.hour();nastaw_minuty=now.minute();}
if(tryb==1) // w przypadku gdy zmieni się tryb z 1 nastaw zegar
{
rtc.adjust(DateTime(now.year(), now.month(), now.day(),
nastaw_godziny, nastaw_minuty, now.second())); // Zapis czasu do RTC
}
tryb++; // Inkrementacja zmiennej "tryb"
if(tryb > 2) { tryb = 0; } // Reset wartpści "tryb" po przekroczeniu 2
}
delay(300); // Opóźnienie dla eliminacji drgań styków przycisku
alarm=0; // Reset stanu alarmu po wciśnięciu przycisku wyboru rtybu
}
if(tryb==0){
// zapala diodę "Zegar", pozostałe gasi
digitalWrite(8, LOW);digitalWrite(9, LOW);digitalWrite(10, HIGH);
// Wywołanie funkcji "wyswietl" z aktualną godziną i minutą i dwukropkiem
wyswietl(now.hour(),now.minute(),now.second()%2);
}
if(tryb==1){
// zapala diodę "Zmiana czasu", pozostałe gasi
digitalWrite(8, LOW);digitalWrite(9, HIGH);digitalWrite(10, LOW);
wyswietl(nastaw_godziny, nastaw_minuty, 1); //Wyświetlenie ustawionego czasu nastawy
//Sprawdzenie, czy przycisk podłączony do pinu 4 jest naciśnięty
if(digitalRead(4) == LOW)
{
nastaw_minuty++; // Inkrementacja minut nastawy
if(nastaw_minuty > 59) { nastaw_minuty = 0; } // Reset minut po osiągnięciu 60
delay(300); // Opóźnienie dla eliminacji drgań styków przycisku
}
//Sprawdzenie, czy przycisk podłączony do pinu 4 jest naciśnięty
if(digitalRead(5) == LOW)
{
nastaw_godziny++; // Inkrementacja godzin nastawy
if(nastaw_godziny > 23) { nastaw_godziny = 0; } // Reset godzin po osiągnięciu 24
delay(300); // Opóźnienie dla eliminacji drgań styków przycisku
}
}
if(tryb==2){
// zapala diodę "Zmiana alarmu", pozostałe gasi
digitalWrite(8, HIGH);digitalWrite(9, LOW);digitalWrite(10, LOW);
wyswietl(alarm_godziny, alarm_minuty, 1); // Wyświetlenie ustawionego czasu alarmu
//Sprawdzenie, czy przycisk podłączony do pinu 4 jest naciśnięty
if(digitalRead(4) == LOW)
{
alarm_minuty++; // Inkrementacja minut alarmu
if(alarm_minuty > 59) { alarm_minuty = 0; } // Reset minut po osiągnięciu 60
delay(300); // Opóźnienie dla eliminacji drgań styków przycisku
}
//Sprawdzenie, czy przycisk podłączony do pinu 4 jest naciśnięty
if(digitalRead(5) == LOW)
{
alarm_godziny++; // Inkrementacja godzin alarmu
if(alarm_godziny > 23) { alarm_godziny = 0; } // Reset godzin po osiągnięciu 24
delay(300); // Opóźnienie dla eliminacji drgań styków przycisku
}
}
// Warunek załączenia alarmu, jeśli czas alarmu zgadza się z aktualnym czasem i jest w trybie 0
if(alarm_godziny==now.hour()&&alarm_minuty==now.minute()&&now.second()==0&&tryb==0)alarm=1;
digitalWrite(11, alarm); // Sterowanie stanem pinu 11 w zależności od stanu alarmu
}
void wyswietl(byte godziny, byte minuty, bool dwukropek)
{
// Wyświetlenie godziny na wyświetlaczu LCD
lcd.setCursor(7,1);
lcd.print(godziny / 10); // Wyświetlenie pierwszej cyfry godzin
lcd.print(godziny % 10); // Wyświetlenie drugiej cyfry godzin
if(dwukropek){lcd.print(":");}
else{lcd.print(" ");}
lcd.print(minuty / 10); // Wyświetlenie pierwszej cyfry minut
lcd.print(minuty % 10); // Wyświetlenie drugiej cyfry minut
}
Loading
ds18b20
ds18b20