Created
June 29, 2017 23:29
-
-
Save anarcie/288a5db82f78d930890fe6c0c470ab0d to your computer and use it in GitHub Desktop.
ThermoStat
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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