Created
January 5, 2013 20:40
-
-
Save anonymous/4463544 to your computer and use it in GitHub Desktop.
ds18B20
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 DS18S20_Pin = 9; //DS18S20 Signal pin on digital 9 | |
//Temperature chip i/o | |
OneWire ds(DS18S20_Pin); // on digital pin 9 | |
void setup(void) { | |
Serial.begin(9600); | |
} | |
void loop(void) { | |
float temperature = getTemp(); | |
Serial.println(temperature); | |
delay(100); //just here to slow down the output so it is easier to read | |
} | |
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; | |
delay (1000); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment