Skip to content

Instantly share code, notes, and snippets.

@anarcie
Created June 29, 2017 23:29
Show Gist options
  • Save anarcie/288a5db82f78d930890fe6c0c470ab0d to your computer and use it in GitHub Desktop.
Save anarcie/288a5db82f78d930890fe6c0c470ab0d to your computer and use it in GitHub Desktop.
ThermoStat
// include the library code:
#include <LiquidCrystal.h>
#include <RCSwitch.h>
#define aref_voltage 3.3
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
int tempPin = 0;
int tempReading;
RCSwitch mySwitch = RCSwitch();
int Target = 0;
float Sink = 0;
float Flot = 0;
boolean sinker = 0;
float M_Target = 0;
void setup() {
lcd.begin(16, 2);
analogReference(EXTERNAL);
lcd.print("### Booting ###");
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
delay(1000);
lcd.setCursor(0, 1);
lcd.print("Initializing");
mySwitch.enableReceive(0);
Serial.begin(9600);
delay(1000);
}
float read_temp()
{
tempReading = analogRead(tempPin);
float temperatureC;
float voltage = tempReading * aref_voltage;
voltage /= 1024.0;
temperatureC = (voltage - 0.5) * 100 ;
return temperatureC;
}
void loop() {
String Code = "";
if (mySwitch.available()) {
Code = output(mySwitch.getReceivedValue(), mySwitch.getReceivedBitlength(), mySwitch.getReceivedDelay(), mySwitch.getReceivedRawdata(),mySwitch.getReceivedProtocol());
mySwitch.resetAvailable();
if (String(Code.charAt(2)) == "1" && String(Code.charAt(1)) == "1" && String(Code.charAt(0)) == "1")
{
float temp_1 = read_temp();
delay(500);
float temp_2 = read_temp();
delay(500);
float temp_3 = read_temp();
delay(500);
float temp_4 = read_temp();
delay(500);
float temp_5 = read_temp();
float temperatureC = round((temp_1 + temp_2 + temp_3 + temp_4 + temp_5) / 5);
float rawC = (temp_1 + temp_2 + temp_3 + temp_4 + temp_5) / 5;
String Status = "";
String S_Target = String(Code.charAt(6)) + String(Code.charAt(7)) + String(Code.charAt(8)) + String(Code.charAt(9)) + String(Code.charAt(10));
if (S_Target == "1110") Target = 14;
if (S_Target == "1111") Target = 15;
if (S_Target == "10000") Target = 16;
if (S_Target == "10001") Target = 17;
if (S_Target == "10010") Target = 18;
if (S_Target == "10011") Target = 19;
if (S_Target == "10100") Target = 20;
if (S_Target == "10101") Target = 21;
if (S_Target == "10110") Target = 22;
if (S_Target == "10111") Target = 23;
if (S_Target == "11000") Target = 24;
if (S_Target == "11001") Target = 25;
if (S_Target == "11010") Target = 26;
if (S_Target == "11011") Target = 27;
if (S_Target == "11100") Target = 28;
if (S_Target == "11101") Target = 29;
if (S_Target == "11111") Target = 30;
M_Target = Target;
Sink = Target - 1;
Flot = Target + 1;
Serial.print("Sink: ");
Serial.println(Sink);
Serial.print("Flot: ");
Serial.println(Flot);
Serial.print("Raw/Run Logic Temp: ");
Serial.println(rawC);
Serial.print("TempC/Rounded Temp: ");
Serial.println(temperatureC);
Serial.print("Target: ");
Serial.println(Target);
if (String(Code.charAt(3)) == "1")
{
//Too Hot
if (String(Code.charAt(4)) == "0")
{
if(Target <= int(rawC)) {digitalWrite(3,0);digitalWrite(4,0); sinker = true; }
if(sinker == true && rawC <= Sink) {sinker = false;}
if(Target >= int(rawC) && sinker == false) {digitalWrite(3,1);digitalWrite(4,0);Status += "HEATING ";Serial.println("SysCode: H1");}
if(sinker == true) {Status += "HOLDING ";Serial.println("SysCode: HH");}
}
Serial.print("SINKER FLAG: ");
Serial.println(sinker);
Serial.println("-----------------------------------");
//Too Cold
if (String(Code.charAt(4)) == "1")
{
if(Target >= int(rawC)) {digitalWrite(3,0);digitalWrite(4,0); sinker = true; }
if(sinker == true && rawC >= Flot) {sinker = false;}
if(Target <= int(rawC) && sinker == false) {digitalWrite(4,1);digitalWrite(3,0);Status += "COOLING ";Serial.println("SysCode: C1");}
if(sinker == true) {Status += "HOLDING ";Serial.println("SysCode: CH");}
}
if (String(Code.charAt(5)) == "1") {
digitalWrite(5,1);
Status += "WITH FAN ";
}
if (String(Code.charAt(5)) == "0") {
digitalWrite(5,0);
Status += " ";
}
lcd.setCursor(0, 0);
lcd.print(Status + Target);
}
else {
lcd.setCursor(0, 0);
lcd.print("System Offline ");
digitalWrite(3,0);
digitalWrite(4,0);
digitalWrite(5,0);
}
lcd.setCursor(0, 1);
lcd.print(rawC);
lcd.print(" C / " + String(Target) + " C ");
delay(5000);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment