# Thermostat-Code problem

• Hi, so im trying to make a a project with the arduino, where i have this:
-Potenciometer
-temperature sensor
-Relay

So the goal is to read the temperature of something that is heating and turn that off at a certain value that is regulated with the potenciometer.This Is simple , but i want to do something like turn off at 100ºC and only turn that on again at 95ºC. How can you help me? This is the code:

// Relé ligado ao pino 7

int porta_rele1 = 7;
int porta_rele2 = 8;

float celsius;
const int porta_sensor1 = A0; // sonda 1 ligada ao pino AO
const int porta_sensor2 = A2; // sonda 2 ligada ao pino A1
const int porta_pot1 = A1; // potenciometro 1 ligada ao pino AO
const int porta_pot2 = A3; // potenciometro 2 ligada ao pino AO

void setup()
{
//Define pinos para o rele como saida
pinMode(porta_rele1, OUTPUT);
pinMode(porta_rele2, OUTPUT);
//Define pinos dos sensores como entrada
pinMode(porta_pot1, INPUT);
pinMode(porta_pot2, INPUT);
pinMode(porta_sensor1, INPUT);
pinMode(porta_sensor2, INPUT);
digitalWrite(porta_rele1, LOW);
digitalWrite(porta_rele2, LOW);

analogReference(INTERNAL);
Serial.begin(9600);

Serial.begin(9600);
pinMode(porta_pot1, INPUT);
pinMode(porta_sensor1, INPUT);
pinMode(porta_pot2, OUTPUT);
pinMode(porta_sensor2, OUTPUT);
}

void loop()
{
int value1 = analogRead(porta_sensor1); //valor lido na sonda 1
long celsius1 = value1/9.31;
int value2 = analogRead(porta_sensor1); //valor lido na sonda 2
long celsius2 = value2/9.31;
Serial.print(celsius1);
Serial.print(celsius2);

long celsiusA = valueA/9.31; // 10 mV por graus C.
Serial.print(celsiusA);
long celsiusB = valueB/9.31; // 10 mV por graus C.
Serial.print(celsiusB);

if(celsius1 <= celsiusA)
{

digitalWrite(porta_sensor1, HIGH); // aquecedor no pino 9

}
else
{

digitalWrite(porta_sensor1, LOW); // aquecedor no pino 9

}
delay(1000);
}

• Big welcome to the MySensors community @Bruno-Cunha !

I don't understand what valueA and valueB in your sketch is, but I would just add

``````#define HYSTERESIS 5 // 5 Degrees hysteresis
bool heating = false;
``````

at start of the sketch
and change

``````if(celsius1 <= celsiusA)
{
digitalWrite(porta_sensor1, HIGH); // aquecedor no pino 9
}
else
{
digitalWrite(porta_sensor1, LOW); // aquecedor no pino 9
}
``````

to

``````if(heating)
if (celsius1 > celsiusA)
{
digitalWrite(porta_sensor1, LOW);
heating = false;
}
}
else
{
if (celsius1 <= celsiusA - HYSTERESIS)
{
digitalWrite(porta_sensor1, HIGH);
heating = true;
}
}
``````

Edit: Sorry. I messed up. The original code was wrong but I think the updated post should be ok.

• celsius1 is the value read by the sensor anda cesliusA is the value regulated by the potenciometer. One question, what is the purpose of the "#define HYSTERESIS 5"?

• @Bruno-Cunha it sets the hysteresis to 5 degrees

• I figured out a simpler way. There is no need for the heating variable.

``````  if (celsius1 > celsiusA)
{
digitalWrite(porta_sensor1, LOW);
}
if (celsius1 <= celsiusA - HYSTERESIS)
{
digitalWrite(porta_sensor1, HIGH);
}
``````

• Yes it worked, i tried something similar before but i did "celsiusA -5" i didnt know i need a variable.I think its solved, thank you very much :)))

• @Bruno-Cunha it is not a variable, and using - 5 would be the same, but using 5 makes it harder to understand and maintain the code. See https://refactoring.com/catalog/replaceMagicNumberWithSymbolicConstant.html for more info on why I prefer using define.