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 Δ