Created
March 6, 2019 15:15
-
-
Save jenschr/a334624988101762a88f340fc0884ea0 to your computer and use it in GitHub Desktop.
OneWire example from http://bildr.org/2011/07/ds18b20-arduino/
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 = 2; //DS18S20 Signal pin on digital 2 | |
//Temperature chip i/o | |
OneWire ds(DS18S20_Pin); // on digital pin 2 | |
void setup(void) { | |
Serial.begin(9600); | |
} | |
void loop(void) { | |
float temperature = getTemp(); //will take about 750ms to run | |
Serial.println(temperature); | |
} | |
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 | |
delay(750); // Wait for temperature conversion to complete | |
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