Hello everyone, I have decided to develop to maturity tesina a thermostat to 3 independent zones, with instant display of temperature on a 2x16 LCD, while every hour 24 hours running average of the three temperature sensors, and sends Serial to PC that stores the data in a data logger in the form of text.
Unfortunately, it is a problem, like any thermostat, must turn on / off or a stove or a conditioner, to simulate the operation I thought led to 6, 2 for each zone, which indicate whether the activation of heating / cooling I was only a 3 door, however, and son forced me to use a mux (HCF4051BE) in this way I got up to 8 outputs with 3 inputs selection.
I reported the operation led to the program, but it seems this piece of software does not go down to the remainder.
The fact is that the program does not work as expected ... someone can help me?
Thanks for your attention
Luca
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 2, 7, 8, 9, 10);
//LiquidCrystal(rs, rw, enable, d4, d5, d6, d7)
int potPin = 4;
int potPin2 = 5;
int potPin3 = 3;
float temperature=0;
float temperature2=0;
float temperature3=0;
float t1min,t2min,t3min,t1max,t2max,t3max;
int val;
int val2;
int val3;
float valtrim;
int puls = 3;
int puls2 = 5;
int trimmer =2;
int state=0;
int state2=0;
int state3=0;
int state4=0;
int menumode = 0;
int i,cost;
int A = 13;
int B = 6;
int C = 4;
void setup() {
pinMode(potPin,INPUT);
pinMode(potPin2,INPUT);
pinMode(potPin3,INPUT);
pinMode(puls,INPUT);
pinMode(puls2,INPUT);
pinMode(A, OUTPUT);
pinMode(B, OUTPUT);
pinMode(C, OUTPUT);
Serial.begin(9600);
}
void loop() {
val = analogRead(potPin);
temperature = ((5.0 * val * 100.0)/1023.0);
val2 = analogRead(potPin2);
temperature2 = ((5.0 * val2 * 100.0)/1023.0);
val3 = analogRead(potPin3);
temperature3 = ((5.0 * val3 * 100.0)/1023.0);
menu();
delay(1500);
state = digitalRead(puls);
delay(100);
if (state == HIGH) {
if (menumode == 0){
menumode = 1;
} else {
if (menumode == 1){
menumode = 2;
}else{
if (menumode == 2){
menumode = 0;
} } } }
if (state == LOW) {
if (menumode == 0){
menumode = 0;
} else {
if (menumode == 1){
menumode = 1;
}else{
if (menumode == 2){
menumode = 2;
} } } }
menu();
state2 = digitalRead(puls2);
delay(100);
if (state2 == HIGH) {
if (menumode == 0){
menumode = 3;
while(state3==0 || state4==0){
menu();
if(analogRead(trimmer)<512){
cost=0;
menu();
if(digitalRead(puls)==HIGH && digitalRead(puls2)==0){
while(digitalRead(puls2)==0){
t1min=analogRead(trimmer)/10;
menu();
delay(100);
}
menu();
}}
if(analogRead(trimmer)>=512){
cost=1;
menu();
if(digitalRead(puls)==HIGH){
while(digitalRead(puls2)==0){
t1max=analogRead(trimmer)/10;
menu();
delay(100);
}
menu();
}}
state3 = digitalRead(puls);
state4 = digitalRead(puls2);
delay(1500);
} menumode=0;state3=0;state4=0;
}
else {
if (menumode == 1){
menumode = 4;
while(state3==0 || state4==0){
menu();
if(analogRead(trimmer)<512){
cost=0;
menu();
if(digitalRead(puls)==HIGH && digitalRead(puls2)==0){
while(digitalRead(puls2)==0){
t2min=analogRead(trimmer)/10;
menu();
delay(100);
}
menu();
}}
if(analogRead(trimmer)>=512){
cost=1;
menu();
if(digitalRead(puls)==HIGH){
while(digitalRead(puls2)==0){
t2max=analogRead(trimmer)/10;
menu();
delay(100);
}
menu();
}}
state3 = digitalRead(puls);
state4 = digitalRead(puls2);
delay(1500);
} menumode=0;state3=0;state4=0;
}
else{
if (menumode == 2){
menumode = 5;
while(state3==0 || state4==0){
menu();
if(analogRead(trimmer)<512){
cost=0;
menu();
if(digitalRead(puls)==HIGH && digitalRead(puls2)==0){
while(digitalRead(puls2)==0){
t3min=analogRead(trimmer)/10;
menu();
delay(100);
}
menu();
}}
if(analogRead(trimmer)>=512){
cost=1;
menu();
if(digitalRead(puls)==HIGH){
while(digitalRead(puls2)==0){
t3max=analogRead(trimmer)/10;
menu();
delay(100);
}
menu();
}}
state3 = digitalRead(puls);
state4 = digitalRead(puls2);
delay(1500);
} menumode=0;state3=0;state4=0;
}
} } }
delay(50);
}
int led(){
if (temperature <= t1min) {
digitalWrite(A, HIGH);
digitalWrite(B, HIGH);
digitalWrite(C, LOW);
}
if (temperature >= t1max) {
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
}
if (temperature2 <= t2min) {
digitalWrite(A, HIGH);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
}
if (temperature2 >= t2max) {
digitalWrite(A, LOW);
digitalWrite(B, HIGH);
digitalWrite(C, LOW);
}
if (temperature3 <= t3min) {
digitalWrite(A, LOW);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
}
if (temperature3 >= t3max) {
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, HIGH);
}
}
int menu(){
if (menumode == 0) {
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" Temperatura 1");
lcd.setCursor(0,1);
lcd.print(temperature);
lcd.print(" C");
}
if (menumode == 1) {
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" Temperatura 2");
lcd.setCursor(0,1);
lcd.print(temperature2);
lcd.print(" C");
}
if (menumode == 2) {
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" Temperatura 3");
lcd.setCursor(0,1);
lcd.print(temperature3);
lcd.print(" C");
}
if (menumode == 3) {
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Temp MIN:");
lcd.print(t1min);
lcd.print("C");
if(cost==0){
lcd.print("<-");
}
lcd.setCursor(0,1);
lcd.print("Temp MAX:");
lcd.print(t1max);
lcd.print("C");
if(cost==1){
lcd.print("<-");
}
}
if (menumode == 4) {
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Temp MIN:");
lcd.print(t2min);
lcd.print("C");
if(cost==0){
lcd.print("<-");
}
lcd.setCursor(0,1);
lcd.print("Temp MAX:");
lcd.print(t2max);
lcd.print("C");
if(cost==1){
lcd.print("<-");
}
}
if (menumode == 5) {
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Temp MIN:");
lcd.print(t3min);
lcd.print("C");
if(cost==0){
lcd.print("<-");
}
lcd.setCursor(0,1);
lcd.print("Temp MAX:");
lcd.print(t3max);
lcd.print("C");
if(cost==1){
lcd.print("<-");
}
}}