/*testing one sensor, freezer*/
int backLight = 13;
#include <DallasTemperature.h> //library for DS18B20 sensors & it includes LCD
//#include <LiquidCrystal_I2C.h> //library for LCD
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 10, 9, 8, 7);
OneWire oneWire3(22);
DallasTemperature sensors3(&oneWire3);
const int compressorRelay = 23;
const int defrostRelay = 40;
unsigned long previousMillisStartdefrosting;
unsigned long previousMillisDefrosting;
unsigned long previousMilliscounter;
bool Startdefrosting = false;
bool Defrosting = false;
bool enablereading = false;
int counter =0; //one counter with two actions
float countertime=0;
float totaltime;
//float totalcounter;
extern volatile unsigned long timer0_millis;
int totalColumns = 16;
int totalRows = 2;
//LiquidCrystal_I2C lcd(0x27, totalColumns, totalRows);
String scrollingMessage = "Three temperature sensors 10/10/2023;room, fridge, freezer & total operating time controller";
void scrollMessage(int row, String message, int delayTime, int totalColumns) {
for (int i=0; i < totalColumns; i++) {
message = " " + message;
}
message = message + " ";
for (int position = 0; position < message.length(); position++) {
lcd.setCursor(0, row);
lcd.print(message.substring(position, position + totalColumns));
delay(delayTime);
}
}
void setup(void)
{
pinMode(backLight, HIGH);
Serial.begin(9600);
//lcd.init();
//lcd.backlight();
lcd.begin(16, 2);
Serial.println("Measuring 3 sensors' temperatures");
pinMode( compressorRelay, OUTPUT);
//sensors1.begin();
//sensors2.begin();
sensors3.begin();
}
void loop(void)
{
//digitalWrite(13,High);
digitalWrite(13, HIGH);
digitalWrite( compressorRelay
, LOW);
digitalWrite (defrostRelay, LOW);
delay(5000); // a delay to absorb any power fluctuations on startup
label:
unsigned long currentMillis = millis();
totaltime = (countertime * 300000) +millis();
//millis reset to avoid overflow (to be 20 days in milliseconds)
if(millis() >= 300000)
{noInterrupts ();
countertime ++;
timer0_millis=0;
previousMilliscounter=0;
previousMillisDefrosting=0;
previousMillisStartdefrosting=0;
currentMillis=0;
previousMillisDefrosting=0;
interrupts();}
//sensors1.requestTemperatures();
//sensors2.requestTemperatures();
sensors3.requestTemperatures();
//float room = sensors1.getTempCByIndex(0);
// float fridge = sensors2.getTempCByIndex(0);
float freezer= sensors3.getTempCByIndex(0);
//sensor reading display delay
if((freezer>=0) && digitalRead(defrostRelay) == LOW)
{digitalWrite( compressorRelay
, HIGH);}
if((freezer<-26 && freezer<0) && digitalRead(defrostRelay) == LOW )
{digitalWrite( compressorRelay
, HIGH);}
if((freezer<-26 ))
{digitalWrite( compressorRelay
, LOW);}
if( currentMillis - previousMillisDefrosting >= 2000){
enablereading = !enablereading;
previousMillisDefrosting = currentMillis;
}
if(enablereading){
Serial.print("room=");
//Serial.print(room);
Serial.print(", ");
Serial.print("fridge=");
//Serial.print(fridge);
Serial.print(", ");
Serial.print("freezer=");
Serial.print(freezer);
Serial.print(", ");
Serial.print("m=");
Serial.print(millis());
Serial.print(", ");
Serial.print("cm=");
Serial.print(currentMillis);
Serial.print(", ");
Serial.print("pmsd=");
Serial.print(previousMillisStartdefrosting);
Serial.print(", ");
Serial.print("pmd=");
Serial.print(previousMillisDefrosting);
Serial.print(", ");
Serial.print("sd=");
Serial.print(Startdefrosting);
Serial.print(", ");
Serial.print("total time=");
Serial.print(totaltime/60000);
Serial.print("min");
Serial.println();
lcd.setCursor(0, 0);
scrollMessage(1, scrollingMessage, 250, totalColumns);
//delay(3000);
lcd.setCursor(0,0); //column,raw
lcd.print("Time= minutes");
lcd.setCursor(14,1);
lcd.print((char)223);
lcd.setCursor(0,1);
lcd.print("Temperature= C");
lcd.setCursor(14,1); //column,row
lcd.print((char)223);
delay(3000);
lcd.setCursor(0,0);
lcd.print("Room = C");
lcd.setCursor(14,0); //column,row
lcd.print((char)223);
lcd.setCursor(8,0);
//lcd.print(room);
lcd.setCursor(0,1);
lcd.print("Fridge = C");
lcd.setCursor(14,1);
lcd.print((char)223);
lcd.setCursor(8,1);
//lcd.print(fridge);
delay(5000);
lcd.setCursor(0,0);
lcd.print("Fridge = C");
lcd.setCursor(14,0);
lcd.print((char)223);
lcd.setCursor(8,0);
//lcd.print(fridge);
lcd.setCursor(0,1);
lcd.print("Freezer= C");
lcd.setCursor(14,1);
lcd.print((char)223);
lcd.setCursor(8,1);
lcd.print(freezer);
delay(5000);
lcd.setCursor(0,0);
lcd.print("Freezer= C");
lcd.setCursor(14,0);
lcd.print((char)223);
lcd.setCursor(8,0);
lcd.print(freezer);
lcd.setCursor(0,1); //column/row
lcd.print("Time = min");
lcd.setCursor(8,1); //column/row
lcd.print(totaltime/60000);
delay(5000);
lcd.setCursor(0,0); //column/row
lcd.print("Time = min");
lcd.setCursor(8,0); //column/row
lcd.print(totaltime/60000);
// delay(5000);
lcd.setCursor(0,1);
lcd.print("Room = C");
lcd.setCursor(14,1); //column,row
lcd.print((char)223);
lcd.setCursor(8,1);
//lcd.print(room);
delay(2000);
}
if(!enablereading) {
lcd.setCursor(0,0);
lcd.print("Room = C");
lcd.setCursor(14,0);
lcd.print((char)223);
lcd.setCursor(8,0);
//lcd.print(room);
//delay(2000);
lcd.setCursor(0,1);
lcd.print("Fridge = C");
lcd.setCursor(14,1);
lcd.print((char)223);
lcd.setCursor(8,1);
//lcd.print(fridge);
delay(2000);
lcd.setCursor(0,0);
lcd.print("Fridge = C");
lcd.setCursor(14,0);
lcd.print((char)223);
lcd.setCursor(8,0);
//lcd.print(fridge);
lcd.setCursor(0,1); //column/row
lcd.setCursor(0,1);
lcd.print("Freezer= C");
lcd.setCursor(14,1);
lcd.print((char)223);
lcd.setCursor(8,1);
lcd.print(freezer);
delay(2000);
lcd.setCursor(0,0); //column/row
lcd.setCursor(0,0);
lcd.print("Freezer= C");
lcd.setCursor(14,0);
lcd.print((char)223);
lcd.setCursor(8,0);
lcd.print(freezer);
//delay(2000);
lcd.setCursor(0,1); //column/row
lcd.print("Time = min");
lcd.setCursor(8,1); //column/row
lcd.print(totaltime/60000);
delay(3000);
lcd.setCursor(0,0); //column/row
lcd.print("Time = min");
lcd.setCursor(8,0); //column/row
lcd.print(totaltime/60000);
lcd.setCursor(0,1);
lcd.print("Room = C");
lcd.setCursor(14,1); //column,row
lcd.print((char)223);
lcd.setCursor(8,1);
// lcd.print(room);
delay(3000);
}
/*energize defrostRelay led once every 24 hours each for ??? minutes
without affecting lcd display scrolling text or
compressorRelay
led functionality
below line represents the 24 hour timer during which an action will start & stop once
& one counter to count two actions on/off*/
if(currentMillis - previousMilliscounter >= 26000){
counter = 2;
previousMilliscounter= currentMillis;}
// defrostRelay led ON period
if ( currentMillis - previousMillisStartdefrosting >= 2000 && (counter == 2 || counter == 1) )
{
counter --;
digitalWrite( compressorRelay
, LOW);
previousMillisStartdefrosting = currentMillis;
Startdefrosting = !Startdefrosting;
}
if( !Startdefrosting)
{
digitalWrite( defrostRelay, LOW); }
if((freezer>=0))
{
digitalWrite(defrostRelay,LOW);
digitalWrite( compressorRelay
, HIGH);
}
if((freezer<-26 && freezer<0) && digitalRead(defrostRelay) == LOW )
{digitalWrite( compressorRelay
, HIGH);}
if((freezer<-26 ))
{digitalWrite( compressorRelay
, LOW);}
if( Startdefrosting)
{
digitalWrite( compressorRelay
,LOW);
digitalWrite( defrostRelay,HIGH);
}
goto label;
}
freezer
fridge
room
cooling
defrosting