-
-
Save dgcgh/4265846 to your computer and use it in GitHub Desktop.
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 <OneWire.h> | |
int led = 13; | |
int fb = 0; | |
int ds_pin = 2; | |
int relay_pin = 7; | |
int buffer = 0; | |
// maximum and minimum temperatures | |
// turn the relay off when the maximum is exceeded for more than | |
// sensor_delay * 4 miliseconds | |
// turn the relay on when the minimum is reached for more than | |
// sensor_delay * 4 miliseconds | |
float temp_max = 26.0; | |
float temp_min = 23.0; | |
int sensor_delay = 500; | |
int relay_delay = sensor_delay * 4; | |
OneWire ds(ds_pin); | |
// the setup routine runs once when you press reset: | |
void setup() { | |
// initialize the digital pin as an output. | |
Serial.begin(9600); | |
pinMode(led, OUTPUT); | |
pinMode(relay_pin, OUTPUT); | |
} | |
// the loop routine runs over and over again forever: | |
void loop() { | |
delay(sensor_delay); | |
digitalWrite(led, HIGH); | |
float temp = getTemp(); | |
printTemp(temp); | |
if(temp > temp_max && buffer > relay_delay){ | |
digitalWrite(relay_pin, LOW); | |
buffer = 0; | |
Serial.println("Relay_Off"); | |
}else if(temp < temp_min && buffer > relay_delay){ | |
digitalWrite(relay_pin, HIGH); | |
buffer = 0; | |
Serial.println("Relay_On"); | |
} | |
delay(sensor_delay); | |
digitalWrite(led,LOW); | |
buffer += sensor_delay; | |
} | |
void printTemp(float temp){ | |
int decimal = (int)((temp - (int)temp)*100); | |
String dec; | |
if(decimal < 10){ | |
dec = "0" + String(decimal); | |
}else{ | |
dec = String(decimal); | |
} | |
Serial.println("Temperature: " + String((int)temp) + "." + dec); | |
} | |
float getTemp(){ | |
//returns the temperature from one DS18S20 in DEG Celsius | |
byte data[12]; | |
byte addr[8]; | |
if ( !ds.search(addr)) { | |
//no more sensors on chain, reset search | |
ds.reset_search(); | |
return -1000; | |
} | |
if ( OneWire::crc8( addr, 7) != addr[7]) { | |
Serial.println("CRC is not valid!"); | |
return -1000; | |
} | |
if ( addr[0] != 0x10 && addr[0] != 0x28) { | |
Serial.print("Device is not recognized"); | |
return -1000; | |
} | |
ds.reset(); | |
ds.select(addr); | |
ds.write(0x44,1); // start conversion, with parasite power on at the end | |
byte present = ds.reset(); | |
ds.select(addr); | |
ds.write(0xBE); // Read Scratchpad | |
for (int i = 0; i < 9; i++) { // we need 9 bytes | |
data[i] = ds.read(); | |
} | |
ds.reset_search(); | |
byte MSB = data[1]; | |
byte LSB = data[0]; | |
float tempRead = ((MSB << 8) | LSB); //using two's compliment | |
float TemperatureSum = tempRead / 16; | |
return TemperatureSum; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
to be clear, meant to commit this as myself but was not logged in at the time. I am the original author.