//#include <LiquidCrystal.h>
#include <muTimer.h>
#include <RTClib.h>
#include <LiquidCrystal_I2C.h>
//#include <Adafruit_MAX31865.h>
//Adafruit_MAX31865 thermo = Adafruit_MAX31865(A0, A1, A2, A3);
// use hardware SPI, just pass in the CS pin
//Adafruit_MAX31865 thermo = Adafruit_MAX31865(10);
// The value of the Rref resistor. Use 430.0 for PT100 and 4300.0 for PT1000
#define RREF 430.0
// The 'nominal' 0-degrees-C resistance of the sensor
// 100.0 for PT100, 1000.0 for PT1000
#define RNOMINAL 100.0
muTimer myTimer1 = muTimer();
RTC_DS1307 rtc;
int hourupg;
int minupg;
int yearupg;
int monthupg;
int dayupg;
int Tset=0;
int menu = 1;
int Menu=1;
// inputs
int MenuBut=1;
int UpBut =2;
int DownBut=42;
int SetBut=41;
int LampBut=40;
int DoorBut=39;
int AlarmBut=8;
int relay=4 ;
int Lamp=5;
int Vent=6;
int Buzzer=12;
int LampRead=0;
int DoorRead=0;
int AlarmRead=0;
int debounce = 500;
// temp
float temperature = A1 ;
int temp; //temperature set
float T; // temperature measured by PT100
#define INTERVAL_MESSAGE1 5000
unsigned long time_1 = 0;
#define INTERVAL_MESSAGE2 3000
unsigned long time_2 = 0;
unsigned long previousMillis = 0UL;
unsigned long interval = 7000UL;
unsigned long previous=0UL;
bool buz=false;
unsigned long off_time;
extern volatile unsigned long timer0_millis;
boolean ledState=true;
LiquidCrystal_I2C lcd(0x27, 20, 4); // Default address of most PCF8574 modules, change according
//LiquidCrystal lcd(13, 12, A2, A3, A4, A5);
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
lcd.init(); // If you are using more I2C devices using the Wire library use lcd.begin(false)
lcd.backlight();
//thermo.begin(MAX31865_2WIRE);
// INPUTS
pinMode(MenuBut, INPUT_PULLUP);
pinMode(UpBut, INPUT_PULLUP);
pinMode(DownBut, INPUT_PULLUP);
pinMode(SetBut, INPUT_PULLUP);
pinMode(LampBut, INPUT_PULLUP);
pinMode(AlarmBut, INPUT_PULLUP);
pinMode(DoorBut, INPUT_PULLUP);
pinMode(Lamp,OUTPUT);
pinMode(relay,OUTPUT);
pinMode(Buzzer, OUTPUT);
pinMode(Vent,OUTPUT);
digitalWrite(Lamp,LOW);
digitalWrite(Vent,LOW);
digitalWrite(relay,LOW);
//digitalWrite(Buzzer,LOW);
Wire.begin();
rtc.begin();
//OUTPUTS
lcd.setCursor(2,1);
lcd.print("By ETS BENMOULAI");
delay(1200);
lcd.clear();
lcd.setCursor(0,1);
lcd.print("Push the menu button");
lcd.setCursor(1,2);
lcd.print("to adjust settings");
delay(1300);
lcd.clear();
//DisplayDateTime ();//delay(1000);
// DisplaySetMinute();delay(100);
}
// functions
void updateMenu() {
switch (Menu) {
case 0:
Menu = 1;
break;
case 1:
lcd.clear();
lcd.setCursor(5,0);
lcd.print(" Settings ");
lcd.setCursor(0,1);
lcd.print("> Date & Time");
lcd.setCursor(1, 2);
lcd.print(" Temperature");
break;
case 2:
lcd.clear();
lcd.setCursor(5,0);
lcd.print(" Settings ");
lcd.setCursor(1,1);
lcd.print(" Date & Time");
lcd.setCursor(0, 2);
lcd.print("> Temperature");
break;
break;
case 3:
Menu=2;
break;
}
}
void DisplayDateTime ()
{
// We show the current date and time
/*uint16_t rtd = thermo.readRTD();
Serial.print("RTD value: "); Serial.println(rtd);
float ratio = rtd;
ratio /= 32768;
Serial.print("Ratio = "); Serial.println(ratio,8);
Serial.print("Resistance = "); Serial.println(RREF*ratio,8);
float T = thermo.temperature( RNOMINAL, RREF);
Serial.print("Temperature = "); Serial.println(T);*/
DateTime now = rtc.now();
/*if(digitalRead(P1)){
menu=1;
delay(debounce);
}*/
lcd.setCursor(0, 1);
lcd.print("Hour: ");
if (now.hour()<=9)
{
lcd.print("0");
}
lcd.print(now.hour(), DEC);
hourupg=now.hour();
lcd.print(":");
if (now.minute()<=9)
{
lcd.print("0");
}
lcd.print(now.minute(), DEC);
minupg=now.minute();
lcd.print(":");
/*if(digitalRead(P1)){
menu=1;
delay(debounce);
}*/
if (now.second()<=9)
{
lcd.print("0");
}
lcd.print(now.second(), DEC);
lcd.setCursor(0, 0);
lcd.print("Date: ");
if (now.day()<=9)
{
lcd.print("0");
}
lcd.print(now.day(), DEC);
dayupg=now.day();
lcd.print("/");
/*if(digitalRead(P1)){
menu=1;
delay(debounce);
}*/
if (now.month()<=9)
{
lcd.print("0");
}
lcd.print(now.month(), DEC);
monthupg=now.month();
lcd.print("/");
lcd.print(now.year(), DEC);
yearupg=now.year();
lcd.setCursor(0,2);
lcd.print("Temperature: ");
if(millis() >= time_1 + INTERVAL_MESSAGE1){
time_1 +=INTERVAL_MESSAGE1;
// lcd.clear();
T = T+1 ;
if (T<=9)
{
lcd.print("0");
}
// lcd.setCursor(13,2);
lcd.print(T, 1);
//Serial.println(T, 1);
}
// lcd.setCursor(13,2);
//lcd.print(T, 1); //delay(1000);
lcd.setCursor(18,2);
lcd.print("C");
/*if(!digitalRead(SetBut)){
menu=1;
delay(debounce);
//while(digitalRead(SetBut));
}*/
}
void DisplaySetHour()
{
// time setting
if(!digitalRead(SetBut)){
menu=1;
delay(debounce);
while(!digitalRead(SetBut));
}
lcd.clear();
DateTime now = rtc.now();
lcd.setCursor(0,0);
lcd.print("Set Hour:");
lcd.setCursor(0,1);
lcd.print(hourupg,DEC);
while(digitalRead(SetBut)){
if(!digitalRead(UpBut)){
hourupg=hourupg+1;
if(hourupg>23)
{
hourupg=0;
}
while(digitalRead(UpBut));
}
if(!digitalRead(DownBut)){
hourupg=hourupg-1;
if(hourupg<0)
{
hourupg=23;
}
while(digitalRead(DownBut));
}
delay(100);
DateTime now = rtc.now();
lcd.setCursor(0,0);
lcd.print("Set Hour:");
lcd.setCursor(0,1);
lcd.print(hourupg,DEC);
lcd.print(" ");
}
menu=2;
delay(debounce);
}
void DisplaySetMinute()
{
// Setting the minutes
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Set Minutes:");
lcd.setCursor(0,1);
lcd.print(minupg,DEC);
while(digitalRead(SetBut)){
if(!digitalRead(UpBut)){
minupg=minupg+1;
if (minupg>59)
{
minupg=0;
}
while(digitalRead(UpBut));
}
if(!digitalRead(DownBut)){
minupg=minupg-1;
if (minupg<0)
{
minupg=59;
}
while(digitalRead(DownBut));
}
delay(100);
lcd.setCursor(0,0);
lcd.print("Set Minutes:");
lcd.setCursor(0,1);
lcd.print(minupg,DEC);
lcd.print(" ");
}
menu=3;
delay(debounce);
}
void DisplaySetYear()
{
// setting the year
//if (digitalRead(P1)==HIGH){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Set Year:");
lcd.setCursor(0,1);
lcd.print(yearupg,DEC);
while(digitalRead(SetBut)){
if (!digitalRead(UpBut)) {
yearupg=yearupg+1;
while(digitalRead(UpBut));
}
if(!digitalRead(DownBut)){
yearupg=yearupg-1;
while(digitalRead(DownBut));
}
delay(100);
lcd.setCursor(0,0);
lcd.print("Set Year:");
lcd.setCursor(0,1);
lcd.print(yearupg,DEC);
lcd.print(" ");
}
menu=4;
delay(debounce);
}
void DisplaySetMonth()
{
// Setting the month
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Set Month:");
lcd.setCursor(0,1);
lcd.print(monthupg,DEC);
while(digitalRead(SetBut)){
if (!digitalRead(UpBut))
{
monthupg=monthupg+1;
if (monthupg>12)
{
monthupg=1;
}
while(digitalRead(UpBut));
}
if(!digitalRead(DownBut))
{
monthupg=monthupg-1;
if (monthupg<1)
{
monthupg=12;
}
while(digitalRead(DownBut));
}
delay(100);
lcd.setCursor(0,0);
lcd.print("Set Month:");
lcd.setCursor(0,1);
lcd.print(monthupg,DEC);
lcd.print(" ");
}
menu=5;
delay(debounce);
}
void DisplaySetDay()
{
// Setting the day
lcd.clear();
while(digitalRead(SetBut)){
if(!digitalRead(UpBut))
{
dayupg=dayupg+1;
if (dayupg>31)
{
dayupg=1;
}
while(digitalRead(UpBut));
}
if(!digitalRead(DownBut))
{
dayupg=dayupg-1;
if (dayupg<1)
{
dayupg=31;
}
while(digitalRead(DownBut));
}
delay(100);
lcd.setCursor(0,0);
lcd.print("Set Day:");
lcd.setCursor(0,1);
lcd.print(dayupg,DEC);
lcd.print(" ");
}
menu=6;
delay(debounce);
}
void StoreAgg()
{
// Variable saving
lcd.clear();
lcd.setCursor(0,0);
lcd.print("SAVING IN");
lcd.setCursor(0,1);
lcd.print("PROGRESS");
rtc.adjust(DateTime(yearupg,monthupg,dayupg,hourupg,minupg,0));
delay(100);
}
void Temperature(){
if(!digitalRead(SetBut)){
Tset=0;
delay(debounce);
while(!digitalRead(SetBut));
}
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Set temperature:");
lcd.setCursor(0,1);
lcd.print(temp,DEC);
lcd.print(" ");
//delay(100);
while (digitalRead(SetBut)){
if(!digitalRead(UpBut)) {
temp= temp + 1;
if( temp > 20)
{
temp = 0;
}
while(digitalRead(UpBut));
}
if (!digitalRead(DownBut)){
temp = temp - 1;
if (temp<0)
{
temp=20;
}
while(digitalRead(DownBut));
} delay(100);
// lcd.clear();
// delay(100);
lcd.setCursor(0,0);
lcd.print("Set temperature:");
lcd.setCursor(0,1);
lcd.print(temp,DEC);
lcd.print(" C ");
}
Tset=1;
delay(debounce);
}
void TimeDateSet(){
// in which subroutine should we go?
/*if (menu==0)
{
DisplayDateTime(); // void DisplayDateTime
}*/
if (menu==1)
{
DisplaySetHour();
}
if (menu==2)
{
DisplaySetMinute();
}
if (menu==3)
{
DisplaySetYear();
}
if (menu==4)
{
DisplaySetMonth();
}
if (menu==5)
{
DisplaySetDay();
}
if (menu==6)
{
StoreAgg();
delay(100);
//DisplayDateTime ();
menu=1;
}
delay(50);
}
void TempSet(){
if (Tset==0)
{
Temperature();
}
if (Tset==1){
// DisplayDateTime();
delay(100);
Tset=0;
// delay(50);
/*lcd.clear();
lcd.setCursor(0,0);
lcd.print("nothing");*/
}
}
void Execute(){
switch (Menu) {
case 1:
TimeDateSet();
break;
case 2:
//Temperature();
TempSet();
break;
/*if (digitalRead(SetBut)){
Menu++;
while(digitalRead(SetBut));
} */
}
}
void loop() {
// put your main code here, to run repeatedly:
// conditions
//int temp1 = temp + 2 ;
int temp2= temp - 2;
int temp3= temp + 2.5 ;
unsigned long t0 = millis();
if (!digitalRead(MenuBut)){
updateMenu(); delay(500);
while(digitalRead(UpBut) && digitalRead(DownBut) && digitalRead(SetBut) && digitalRead(MenuBut) );
}
if (!digitalRead(UpBut)) {
lcd.clear();
Menu--;
updateMenu();
delay(500);
while (digitalRead(UpBut) && digitalRead(DownBut) && digitalRead(SetBut) && digitalRead(MenuBut));
return;
}
if (!digitalRead(DownBut)) {
lcd.clear();
Menu++;
updateMenu();
delay(500);
while (digitalRead(UpBut) && digitalRead(DownBut) && digitalRead(SetBut) && digitalRead(MenuBut));
return;
}
/*
if (!digitalRead(SetBut)) {
Execute();
AlarmRead != AlarmRead;
delay(100);
while (!digitalRead(MenuBut) && !digitalRead(UpBut) && !digitalRead(DownBut) && !digitalRead(SetBut) );
} else if(digitalRead(MenuBut) && digitalRead(UpBut) && digitalRead(DownBut) && digitalRead(SetBut)){
DisplayDateTime ();
while(!digitalRead(MenuBut) && !digitalRead(UpBut) && !digitalRead(DownBut) && !digitalRead(SetBut) && digitalRead(AlarmBut) );
}
*/
if (!digitalRead(DoorBut)){
digitalWrite(Vent, HIGH); // when we close the door
digitalWrite(Lamp,LOW);
if (digitalRead(DoorBut)){
digitalWrite(Vent, LOW); //when we open the door
digitalWrite(Lamp,HIGH);
}
}
if (!digitalRead(LampBut)){
digitalWrite(Lamp, HIGH);
if(digitalRead(LampBut)){
digitalWrite(Lamp, LOW);
}
}
if ( temp+2 == T){
digitalWrite(relay,HIGH);
digitalWrite(Buzzer, LOW);
}
else if (T == temp2)
{
digitalWrite(relay,LOW);
digitalWrite(Buzzer, LOW);
}
/* if (temp + 2.5 < T ) {
digitalWrite(Buzzer, HIGH);
//ledState = true;
}*/
/*if (temp + 2.5 < T && (ledState) && (millis()>=off_time)) /* is it on and is it later or equal to off_time */
/*{
digitalWrite(Buzzer,HIGH);
ledState = true;
}
AlarmRead = digitalRead(AlarmBut);
if (ledState /*&& T> temp3*///) /* is it off? */
/*{
AlarmRead = digitalRead(AlarmBut);
if(AlarmRead==HIGH && !ledState)
{
digitalWrite(Buzzer, LOW);
ledState = false;
off_time = millis();
// while(!digitalRead(AlarmBut));
}
} /* else{
if (temp + 2.5 < T && (ledState) && (millis()>=off_time) ) {
digitalWrite(Buzzer, HIGH);
//ledState = true;
//AlarmRead =! AlarmRead;
AlarmRead = digitalRead(AlarmBut);
}
}*/
///////////////////////////////////
//
/*AlarmRead = digitalRead(AlarmBut);delay(100);
if ((!ledState) && (millis()-off_time)>=3000)
/* is it on and is it later or equal to off_time */
/*{
digitalWrite(Buzzer, LOW);
ledState = false;delay(10);
} if ( temp + 2.5 < T && ledState && (millis()-off_time)>=3000) {
digitalWrite(Buzzer, HIGH); ledState = true;
//Serial.println(" temp up and alarm");
while(!digitalRead(SetBut));
}
//AlarmRead = digitalRead(AlarmBut);delay(50);
if (temp + 2.5 < T && ledState && AlarmRead == HIGH ) /* is it off? */
/*{
digitalWrite(Buzzer, LOW);
ledState = false;
off_time = millis() ;
}*/
/*
if ( temp + 2.5 < T ) {
//digitalWrite(Buzzer, HIGH);
tone(Buzzer, 1000);
//Serial.println(" temp up and alarm");
//while(AlarmRead == HIGH);
}
if (AlarmRead==HIGH && (millis()-t0 <=3000)){
// unsigned long t0 = millis();
noTone(Buzzer);
// while (millis()-t0 <=3000); // on attend 3 secondes avant de recommencer
}*/
//
//if (((millis()-previous)>=5000UL)){
/*if(temp + 2.5 < T && myTimer1.delayOnTrigger(1, 15000) )
{
tone(Buzzer,1000);
}
AlarmRead = !digitalRead(AlarmBut);
if (AlarmRead && !myTimer1.delayIsRunning()){
myTimer1.delayReset();
noTone(Buzzer);
}
*/
//previous=millis();
}
Loading
esp32-s3-devkitc-1
esp32-s3-devkitc-1