#include <SoftwareSerial.h>
#include <LiquidCrystal.h>
int buttonState1 = 0;
int buttonState2 = 0;
int lastButtonState1 = 0;
int lastButtonState2 = 0;
float temperature = 21;
int MaxTemperature = 35;
int MinTemperature = 6;
int sensePin = A0;
int RelayPin = 10;
int Hyst = 7;
int sensorInput;
float PreviousTemp;
float Hystersensis = 0.50;
double temp;
int buttonState = 0;
int lastButtonState = 0;
int buttonPushCounter = 3;
char * LOGO = " Arduino Thermostate ";
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
pinMode(8, INPUT);
pinMode(9, INPUT);
pinMode(RelayPin, OUTPUT);
pinMode(Hyst, INPUT);
#define PinTempSensor 0
pinMode(PinTempSensor, INPUT_PULLUP);
Serial.begin(9600);
lcd.begin(16, 2);
for (int letter = 0; letter <= strlen(LOGO) - 16; letter++)
{
showLetters(0, letter);
}
//delay(2000);
lcd.clear();
lcd.setCursor(12, 1);
lcd.print(temperature);
lcd.setCursor(14, 1);
lcd.print(" C");
}
void showLetters(int printStart, int startLetter)
{
lcd.setCursor(printStart, 0);
for (int letter = startLetter; letter <= startLetter + 15; letter++) // Print only 16 chars in Line #2 starting 'startLetter'
{
lcd.print(LOGO[letter]);
}
lcd.print(" ");
delay(100);
}
void loop() {
buttonState1 = digitalRead(8);
buttonState2 = digitalRead(9);
if (lastButtonState1 < 1)
{
if (temperature > MinTemperature)
{
if (buttonState1 > 0)
{
temperature = temperature -0.5;
if (temperature < 10)
{
lcd.clear();
lcd.setCursor(14, 1);
lcd.print(" C");
lcd.setCursor(10, 1);
} else
{
lcd.clear();
lcd.setCursor(14, 1);
lcd.print(" C");
lcd.setCursor(9, 1);
}
lcd.print(temperature);
Serial.println(temperature);
lastButtonState1 = 1;
}
}
}
if (lastButtonState1> 0)
{
if (buttonState1 < 1)
{
lastButtonState1 = 0;
}
}
if (lastButtonState2 < 1)
{
if (temperature < MaxTemperature)
{
if (buttonState2 > 0)
{
temperature = temperature +0.5;
if (temperature < 10)
{
lcd.clear();
lcd.setCursor(14, 1);
lcd.print(" C");
lcd.setCursor(10, 1);
} else
{
lcd.clear();
lcd.setCursor(14, 1);
lcd.print(" C");
lcd.setCursor(9, 1);
}
lcd.print(temperature);
Serial.println(temperature);
lastButtonState2 = 1;
}
}
}
if (lastButtonState2> 0)
{
if (buttonState2 < 1)
{
lastButtonState2 = 0;
}
}
sensorInput = analogRead(A0);
temp = (double)sensorInput / 1024;
temp = temp * 5;
temp = temp - 0.5;
temp = temp * 100;
if (temp >= 0 && temp < 10)
{
lcd.setCursor(10,0);
} else
{
if (temp > 9 ) lcd.setCursor(9,0);
}
if (temp > 100) lcd.setCursor(8,0);
if (temp < 0 && temp > -10)
{
lcd.setCursor(9,0);
}
if (temp < -10)
{
lcd.setCursor(8,0);
}
lcd.print(temp);
{
lcd.setCursor(14, 0);
lcd.print(" C");
}
if (temp == PreviousTemp)
{
} else
{
lcd.clear();
PreviousTemp = temp;
if (temperature < 10)
{
lcd.clear();
lcd.setCursor(14, 1);
lcd.print(" C");
lcd.setCursor(10, 1);
} else
{
lcd.clear();
lcd.setCursor(14, 1);
lcd.print(" C");
lcd.setCursor(9, 1);
}
lcd.print(temperature);
lastButtonState2 = 1;
}
if (temp < temperature - Hystersensis)
{
digitalWrite(RelayPin,HIGH);
} else
{
digitalWrite(RelayPin,LOW);
}
buttonState = digitalRead(Hyst);
if (buttonState != lastButtonState) {
if (buttonState == HIGH) {
buttonPushCounter += 1;
if (buttonPushCounter > 9) buttonPushCounter = 1;
Serial.println("on");
Serial.print("number of button pushes: ");
if (buttonPushCounter == 1) Hystersensis = 0.00;
if (buttonPushCounter == 2) Hystersensis = 0.25;
if (buttonPushCounter == 3) Hystersensis = 0.50;
if (buttonPushCounter == 4) Hystersensis = 0.75;
if (buttonPushCounter == 5) Hystersensis = 1.00;
if (buttonPushCounter == 6) Hystersensis = 1.25;
if (buttonPushCounter == 7) Hystersensis = 1.50;
if (buttonPushCounter == 8) Hystersensis = 1.75;
if (buttonPushCounter == 9) Hystersensis = 2.00;
lcd.setCursor(1, 1);
lcd.print(Hystersensis);
Serial.println(buttonPushCounter);
} else {
Serial.println("off");
}
delay(5);
}
lastButtonState = buttonState;
if (buttonPushCounter % 4 == 0) {
digitalWrite(13, HIGH);
} else {
digitalWrite(13, LOW);
}
lcd.setCursor(1, 1);
lcd.print(Hystersensis);
//delay(100);
}