-
-
Save vuongngo/5c2cf6102cd4fad9626621fa71f92c95 to your computer and use it in GitHub Desktop.
Arduino Temperature Light
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 Temp_Pin = 2; | |
int outputPins[] = {10, 11, 12}; | |
OneWire ds(Temp_Pin); | |
void setup() { | |
Serial.begin(9600); | |
for (int i = 0; i < 3; i++) { | |
pinMode(outputPins[i], OUTPUT); | |
} | |
} | |
void loop() { | |
float temperature = getTemp(); | |
Serial.println(temperature); | |
if (temperature < 20) { | |
lightOn(0); | |
} else if (temperature >= 20 && temperature < 25) { | |
lightOn(1); | |
} else { | |
lightOn(2); | |
} | |
delay(100); | |
} | |
float getTemp(){ | |
//returns the temperature from one DS18S20 in DEG Celsius | |
byte data[12]; | |
byte addr[8]; | |
// Search for next device | |
if ( !ds.search(addr)) { | |
//no more sensors on chain, reset search | |
ds.reset_search(); | |
return -1000; | |
} | |
Serial.print("R="); | |
for( i = 0; i < 8; i++) { | |
Serial.print(addr[i], HEX); | |
Serial.print(" "); | |
} | |
// Data integrity verification | |
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; | |
} | |
void lightOn(int index) { | |
for (int i = 0; i < 3; i++) { | |
if (i == index) { | |
digitalWrite(outputPins[i], HIGH); | |
} else { | |
digitalWrite(outputPins[i], LOW); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment