#include <LiquidCrystal.h>
#include "pitches.h"
// Ustawienie pinów LCD
LiquidCrystal lcd(12, 11, 10, 9, 8, 7);
const float BETA = 3950; // should match the Beta Coefficient of the thermistor
// Definicje pinów
const int pinCzerwonaDioda = 5;
const int pinNiebieskaDioda = 4;
const int pinBuzzer = 6;
const int pinPrzelacznik = 1;
const int pinCzujnikTemperatury = A1;
const int pinPotencjometr = A2;
const int pinPrzycisk = A0;
bool systemWlaczone = true; // Flaga określająca, czy system jest włączony
bool przyciskWcisniety = false; // Flaga określająca, czy przycisk został już wciśnięty
bool alarmDisabled = false; // Flaga określająca, czy alarm jest wyłączony
unsigned long pressStartTime = 0; // Czas rozpoczęcia naciśnięcia przycisku
void setup() {
// Inicjalizacja wyświetlacza LCD
lcd.begin(16, 2);
// Ustawienie pinów jako wyjścia
pinMode(pinCzerwonaDioda, OUTPUT);
pinMode(pinNiebieskaDioda, OUTPUT);
pinMode(pinBuzzer, OUTPUT);
// Ustawienie pinu przełącznika jako wejście
pinMode(pinPrzelacznik, INPUT);
pinMode(pinPrzycisk, INPUT_PULLUP); // Dodano pull-up resistor do pinu A0
}
void loop() {
if (digitalRead(pinPrzelacznik) == HIGH) {
int zadanaTemp = map(analogRead(pinPotencjometr), 0, 1023, 10, 40);
int aktualnaTemp = 1 / (log(1 / (1023. / analogRead(pinCzujnikTemperatury) - 1)) / BETA + 1.0 / 298.15) - 273.15;
// Wyświetlanie temperatur na LCD
lcd.clear();
lcd.print("Zadana: ");
lcd.print(zadanaTemp);
lcd.print(" C");
lcd.setCursor(0, 1);
lcd.print("Aktualna: ");
lcd.print(aktualnaTemp);
lcd.print(" C");
// Logika klimatyzacji
if (aktualnaTemp > zadanaTemp) {
digitalWrite(pinNiebieskaDioda, HIGH);
digitalWrite(pinCzerwonaDioda, LOW);
} else if (aktualnaTemp < zadanaTemp) {
digitalWrite(pinCzerwonaDioda, HIGH);
digitalWrite(pinNiebieskaDioda, LOW);
} else {
digitalWrite(pinCzerwonaDioda, LOW);
digitalWrite(pinNiebieskaDioda, LOW);
}
// Alarm
if (aktualnaTemp > 45 || aktualnaTemp < 5) {
if (digitalRead(pinPrzycisk) == LOW) {
if (!przyciskWcisniety) {
// Sprawdzamy czas trwania naciśnięcia przycisku
if (millis() - pressStartTime < 500) { // Krótkie naciśnięcie
noTone(pinBuzzer);
alarmDisabled = !alarmDisabled; // Odwrócenie stanu
}
przyciskWcisniety = true;
}
} else {
przyciskWcisniety = false;
pressStartTime = millis(); // Zapisujemy czas rozpoczęcia naciśnięcia przycisku
}
if (!alarmDisabled) {
tone(pinBuzzer, NOTE_DS5);
delay(300);
tone(pinBuzzer, NOTE_D5);
delay(300);
tone(pinBuzzer, NOTE_CS5);
delay(300);
}
} else {
noTone(pinBuzzer);
przyciskWcisniety = false;
alarmDisabled = false;
}
} else {
// Wyłączenie wszystkich urządzeń gdy przełącznik jest w pozycji OFF
digitalWrite(pinCzerwonaDioda, LOW);
digitalWrite(pinNiebieskaDioda, LOW);
noTone(pinBuzzer);
lcd.clear();
lcd.print("System wylaczony");
}
// Obsługa przycisku do wyłączania alarmu
if (digitalRead(pinPrzycisk) == LOW) {
if (!alarmDisabled) {
noTone(pinBuzzer);
alarmDisabled = true;
}
delay(50); // Debouncing
} else {
alarmDisabled = false;
}
delay(100); // Opóźnienie dla stabilności odczytu
}