I don't know why but when a pin set to input mode receives a high signal, then a low signal, it stays high for a seemingly random amount of time.
#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
int thermPin = A5;
int relayPin = 9;
int upButton = 10;
int downButton = 11;
int rawVoltage;
float mv;
float desiredTemp = 20.5;
float currentTemp = 20;
long newSetTime = millis();
long oldSetTime = newSetTime;
long newUpPushTime = millis();
long newDownPushTime = millis();
long oldUpPushTime = millis();
long oldDownPushTime = millis();
int mainDelay = 600;
int flashDelay = 600;
boolean isSetting = true;
void drawCurrentTemp(){
lcd.setCursor(0, 1);
lcd.print(currentTemp);
}
void drawDesiredTemp(){
lcd.setCursor(12, 1);
lcd.print(desiredTemp);
}
void drawMainScreen(){
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("TEMP");
lcd.setCursor(12, 0);
lcd.print("SET");
drawCurrentTemp();
drawDesiredTemp();
}
String setString = "SET";
void flashSet(){
if(newSetTime - oldSetTime > flashDelay) {
if(setString == "SET"){
setString = " ";
}else{
setString = "SET";
}
lcd.setCursor(12, 0);
lcd.print(setString);
oldSetTime = millis();
}
}
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
lcd.begin(16, 2);
lcd.clear();
pinMode(relayPin, OUTPUT);
pinMode(upButton, INPUT);
pinMode(downButton, INPUT);
drawMainScreen();
}
void checkInput(){
if(digitalRead(upButton) == HIGH){
newUpPushTime = millis();
} else {
oldUpPushTime = millis();
}
if(digitalRead(downButton) == HIGH){
newDownPushTime = millis();
} else {
oldDownPushTime = millis();
}
long upButtonTimePushed = newUpPushTime - oldUpPushTime;
long downButtonTimePushed = newDownPushTime - oldDownPushTime;
if(upButtonTimePushed > 1000 && downButtonTimePushed > 1000) {
oldDownPushTime = millis();
oldUpPushTime = millis();
if(!isSetting){
isSetting = true;
} else {
isSetting = false;
drawMainScreen();
}
}
if(isSetting){
if(digitalRead(upButton) == HIGH) {
desiredTemp +=0.5;
} else if(digitalRead(downButton) == HIGH) {
desiredTemp -=0.5;
}
drawDesiredTemp();
}
}
void loop() {
newSetTime = millis();
if(isSetting) {
flashSet();
}
checkInput();
Serial.println(digitalRead(upButton));
}