#include <OneWire.h>
#include <DallasTemperature.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// تعريف المدخلات والمخارج
#define ONE_WIRE_BUS 2
#define BUTTON_MENU 7
#define BUTTON_INC 4
#define BUTTON_DEC 5
#define BUTTON_OK 6
LiquidCrystal_I2C lcd(0x27, 16, 2); // Adresse I2C de l'écran LCD et dimensions
// تعريف المتغيرات العامة
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress sensorAddr;
float setTemp ;
float currentTemp ;
int menuState = 0;
// تعريف الدوال اللازمة
void readTemperature();
void displayTemperature();
void enterMenu();
void increaseTemp();
void decreaseTemp();
void confirmTemp();
void setup() {
// تهيئة البورتات
pinMode(BUTTON_MENU, INPUT_PULLUP);
pinMode(BUTTON_INC, INPUT_PULLUP);
pinMode(BUTTON_DEC, INPUT_PULLUP);
pinMode(BUTTON_OK, INPUT_PULLUP);
pinMode(13, OUTPUT);
// تهيئة الLCD
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Water Temp: ");
// تهيئة المستشعر
sensors.begin();
sensors.getAddress(sensorAddr, 0);
sensors.setResolution(sensorAddr, 12);
Serial.begin(115200);
}
void loop() {
digitalWrite(11,HIGH);
readTemperature();
displayTemperature();
// قراءة الأزرار وتنفيذ الحدث المناسب
switch(menuState) {
case 0:
if(digitalRead(BUTTON_MENU) == LOW) {
enterMenu();
}
break;
case 1:
if(digitalRead(BUTTON_INC) == LOW) {
increaseTemp();
}
else if(digitalRead(BUTTON_DEC) == LOW) {
decreaseTemp();
}
else if(digitalRead(BUTTON_OK) == LOW) {
confirmTemp();
}
break;
}
if(currentTemp >= setTemp) {
Serial.println("Temperature is too high!");
digitalWrite(13, LOW);
digitalWrite(12,HIGH);
}
else if(currentTemp < setTemp) {
Serial.println("Temperature is too low!");
digitalWrite(13, HIGH);
digitalWrite(12,LOW);
}
// مقارنة درجة الحرارة المقاسة بالحساس مع القيمة المحددة}
delay(100);
}
void readTemperature() {
sensors.requestTemperatures();
currentTemp = sensors.getTempC(sensorAddr);
if(currentTemp == -127.00) {
Serial.println("Error: Could not read temperature");
}
else {
Serial.print("Temperature: ");
Serial.print(currentTemp);
Serial.println(" C");
}
}
void displayTemperature() {
lcd.setCursor(0, 1);
lcd.print(currentTemp);
lcd.print(" C ");
}
void enterMenu() {
menuState = 1;
lcd.setCursor(0, 0);
lcd.print("Set Temp: ");
lcd.setCursor(0, 1);
lcd.print(setTemp);
}
void increaseTemp() {
setTemp += 1;
lcd.setCursor(0, 1);
lcd.print(setTemp);
}
void decreaseTemp() {
setTemp -= 1;
lcd.setCursor(0, 1);
lcd.print(setTemp);
}
void confirmTemp() {
lcd.setCursor(0, 0);
lcd.print("Water Temp: ");
displayTemperature();
lcd.setCursor(10, 1);
lcd.print(" ");
lcd.print(setTemp);
}
Loading
ds18b20
ds18b20