Examples - Electronic Bricks - Electronic Brick Digital Temperature
Digital-In, Using the Digital Temperature Electronic Brick.
This program gives you a basic understanding how to use the Digital Temperature Electronic Brick with the 1-Wire protocol.
For more on 1-Wire protocol go here>>> http://www.arduino.cc/playground/Learning/OneWire
And if you still need more, go here>>> http://www.arunet.co.uk/tkboyd/e1didx.htm
Hardware Setup:
Connect your DS18B20 Digital Temperature Brick to pin 10 on the Seeeduino shield.
// DS18B20 v1.0 digital temperature brick // available at www.flamingoeda.com // Code by Dino Rossi 08.04.10 // For the EmbeddedLab CAAD ETHZ // Adapted from http://www.arduino.cc/playground/Learning/OneWire #include <OneWire.h> // DS18S20 Temperature chip i/o OneWire ds(10); // on pin 10 void setup(void) { // initialize inputs/outputs // start serial port Serial.begin(9600); } void loop(void) { byte i; byte present = 0; byte data[12]; byte addr[8]; if ( !ds.search(addr)) { //Serial.print("No more addresses.\n"); ds.reset_search(); return; } Serial.println(); Serial.print("HEX data"); Serial.println(); Serial.print("R="); for( i = 0; i < 8; i++) { Serial.print(addr[i], HEX); Serial.print(" "); } if ( OneWire::crc8( addr, 7) != addr[7]) { Serial.print("CRC is not valid!\n"); return; } if ( addr[0] != 0x28) { Serial.print("Device is not a DS18S20 family device.\n"); return; } ds.reset(); ds.select(addr); ds.write(0x44,1); // start conversion, with parasite power on at the end delay(1000); // maybe 750ms is enough, maybe not // we might do a ds.depower() here, but the reset will take care of it. present = ds.reset(); ds.select(addr); ds.write(0xBE); // Read Scratchpad Serial.print("P="); Serial.print(present,HEX); Serial.print(" "); for ( i = 0; i < 9; i++) { // we need 9 bytes data[i] = ds.read(); Serial.print(data[i], HEX); Serial.print(" "); } Serial.print(" CRC="); Serial.print( OneWire::crc8( data, 8), HEX); Serial.println(); int rawtemp = (data[1] << 8) + data[0]; double tempc, tempf; tempc = (double)rawtemp / 16.0; tempf = (tempc * 1.8) + 32.0; Serial.println(); Serial.print(tempc); Serial.print(" degrees C"); Serial.println(); Serial.print(tempf); Serial.print(" degrees F"); Serial.println(); }
Attach:digiTemp_wiring.jpg Δ |