Everything works wonderfully except for one portion of the sketch.
In the sketch, I am telling the arduino to set pin 7 HIGH in the case that certain conditions are met and then once those conditions are satisfied to turn it off again. this works fine for when my switch pin is reading 1 (HIGH) but not when its reading 0 (LOW). Please help.. this is driving me MAD.
#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal.h>
int sensorPin = A0; // select the input pin for the 10K potentiometer
int sensorValue = 0; // variable to store the value coming from the sensor
int setTemp = 0; // variable to store temp desired
int SSRCPin = 5; //Turn on A/C unit
int SSRHPin = 6; //Turn on heat (electric or gas)
int hcLED = 4; //indicator for Cooling mode
int SwitchPin = 1; // To switch between Cooling and Heating
int SSRFan = 7; // To turn on and off the air handler fan
char* heat;
float currentTemp = 0;
LiquidCrystal lcd(9, 10, 11, 12, 13, 8);
// Data wire is plugged into pin 12 on the Arduino
#define ONE_WIRE_BUS 2
// Setup a oneWire instance to communicate with any OneWire devices
OneWire oneWire(ONE_WIRE_BUS);
// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);
DeviceAddress insideThermometer = { 0x28, 0xF0, 0xEA, 0x73, 0x03, 0x00, 0x00, 0xCF };
// DeviceAddress outsideThermometer = { 0x28, 0x20, 0x04, 0xA8, 0x02, 0x00, 0x00, 0x4D };
void setup(void)
{
// Start up the library
sensors.begin();
// set the resolution to 9 bit (good enough?)
sensors.setResolution(insideThermometer, 9);
// sensors.setResolution(outsideThermometer, 9);
lcd.begin(16,2); // columns, rows. use 16,2 for a 16x2 LCD, etc.
pinMode(SSRFan, OUTPUT); //set airhandler fan pin as output
digitalWrite(SSRFan, LOW);
pinMode(SSRHPin, OUTPUT);
digitalWrite(SSRHPin, LOW);
pinMode(SSRCPin, OUTPUT);
digitalWrite(SSRCPin, LOW);
pinMode(hcLED, OUTPUT);
digitalWrite(hcLED, LOW);
pinMode(SwitchPin, INPUT);
}
void printTemperature(DeviceAddress deviceAddress)
{
sensors.requestTemperatures(); // was in loop
float tempC = sensors.getTempC(deviceAddress);
if (tempC == -127.00) {
lcd.print("Error");
} else {
// lcd.print(tempC);
// lcd.print("/");
currentTemp = (DallasTemperature::toFahrenheit(tempC));
lcd.print(currentTemp);
}
}
void loop(void)
{
delay(1000);
sensorValue = analogRead(sensorPin);
setTemp = sensorValue / 10.24; //Gives us a set temp range between 0 and 99 degrees
lcd.clear(); // start with a blank screen
lcd.setCursor(0,0);
lcd.print("Current:");
lcd.setCursor(0,1);
lcd.print("Set:");
//lcd.setCursor(0,3);
//lcd.print("Heat: ");
lcd.setCursor(8,0);
printTemperature(insideThermometer);
lcd.setCursor(6,1);
lcd.print(setTemp);
//lcd.setCursor(7,3);
//lcd.print(heat);
int val = digitalRead(SwitchPin) ;
if (val == 1)
{
digitalWrite(hcLED, LOW);
}
if (val == 1 && (currentTemp > setTemp))
{
digitalWrite(SSRFan, HIGH);
digitalWrite(SSRHPin, LOW);
digitalWrite(SSRCPin, HIGH);
}
else if (currentTemp < setTemp)
{
digitalWrite(SSRCPin, LOW);
digitalWrite(SSRFan, LOW);
}
if (val == 0)
{
digitalWrite(hcLED, HIGH);
}
if (val == 0 && (currentTemp < setTemp))
{
digitalWrite(SSRFan, HIGH);
digitalWrite(SSRCPin, LOW);
digitalWrite(SSRHPin, HIGH);
}
else if (currentTemp > setTemp)
{
digitalWrite(SSRHPin, LOW);
digitalWrite(SSRFan, LOW);
}
}