#include <LiquidCrystal.h>
#include <DallasTemperature.h>
#include <OneWire.h>
// Inicjalizacja pinów LCD
const int rs = 7; // Pin 7 on Arduino to pin 4 (RS) on LCD
const int en = 6; // Pin 6 on Arduino to pin 6 (E) on LCD
const int d4 = 12; // Pin 12 on Arduino to pin 11 (D4) on LCD
const int d5 = 10; // Pin 10 on Arduino to pin 12 (D5) on LCD
const int d6 = 9; // Pin 9 on Arduino to pin 13 (D6) on LCD
const int d7 = 8; // Pin 8 on Arduino to pin 14 (D7) on LCD
// Inicjalizacja LCD
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
// Pin dla magistrali OneWire
const int oneWireBus = 13;
// Inicjalizacja instancji OneWire
OneWire oneWire(oneWireBus);
// Inicjalizacja instancji DallasTemperature
DallasTemperature sensors(&oneWire);
void setup() {
pinMode(5,OUTPUT);
pinMode(4,OUTPUT);
pinMode(3,OUTPUT);
// Rozpocznij komunikację z wyświetlaczem LCD
lcd.begin(16, 2);
// Rozpocznij komunikację z czujnikiem DS18B20
sensors.begin();
// Wyświetl powitanie na LCD
lcd.print("Temperatura (C):");
}
void loop() {
// Żądanie wykonania pomiaru temperatury
sensors.requestTemperatures();
// Odczyt temperatury w stopniach Celsjusza
float temperaturaC = sensors.getTempCByIndex(0);
// Ustawienie kursora na początek drugiej linii
lcd.print(" "); // Wypełniamy linię spacjami
lcd.setCursor(0, 1);
if (temperaturaC <= -30) {
// Mniej lub równo -30 stopni - kolor niebieski
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
} else if (temperaturaC > -30 && temperaturaC < 0) {
// Między -30 a 0 stopniami - kolor zielony
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
digitalWrite(5, HIGH);
} else if (temperaturaC >= 0 && temperaturaC < 30) {
// Między 0 a 30 stopniami - kolor żółty (zielony i czerwony)
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
} else if (temperaturaC >= 30 && temperaturaC < 70) {
// Między 30 a 70 stopniami - kolor pomarańczowy (czerwony i mniej zielonego)
digitalWrite(3, HIGH);
analogWrite(4, LOW); // Ustawiamy zielony na połowę jasności
digitalWrite(5, LOW);
} else if (temperaturaC >= 70 && temperaturaC < 100) {
// Między 70 a 100 stopniami - kolor czerwony
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, LOW);
} else if (temperaturaC >= 100) {
// Więcej niż 100 stopni - kolor biały (wszystkie diody włączone)
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
}
// Sprawdzenie, czy odczyt się powiódł
if(temperaturaC != DEVICE_DISCONNECTED_C) {
lcd.print(temperaturaC);
} else {
lcd.print("Blad/ odczyt -55");
delay(1000);
}
// Opóźnienie przed następnym odczytem
delay(100); // Odczyt co sekundę
}