Program to read the temperature from multiple DS18B20 sensors on the same pin. The original library/code came from Petras Saduikis (see http://mbed.org/users/snatch59/programs/OneWireCRC/gpdz56), but I've modified it to remember the address of multiple sensors all connected to the same data pin. My sample program displays the temperature of each device in turn. If you want to see more of what's going on behind the scenes turn on the debug by setting DebugTrace pc(OFF, TO_SERIAL); to ON (instead of OFF) in the couple of places it's used - it will log the device addresses as they are found etc. The addresses are set in the devices at the factory - I don't think they can be changed, the search always seems to find them in the same order, but this won't be anything to do with the way you've plugged them in. I've had a play with up to 7 sensors (the code has a limit of 10 hardwired in it, but this would be easy to change)

Dependencies:   mbed

Committer:
tonymudd
Date:
Sun Jul 17 15:56:49 2011 +0000
Revision:
0:fb8b6da96a8b

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tonymudd 0:fb8b6da96a8b 1 /*
tonymudd 0:fb8b6da96a8b 2 * OneWireCRC/OneWireThermometer demo.
tonymudd 0:fb8b6da96a8b 3 *
tonymudd 0:fb8b6da96a8b 4 * Copyright (C) <2009> Petras Saduikis <petras@petras.co.uk>
tonymudd 0:fb8b6da96a8b 5 *
tonymudd 0:fb8b6da96a8b 6 * This file is part of OneWireCRC/OneWireThermometer.
tonymudd 0:fb8b6da96a8b 7 *
tonymudd 0:fb8b6da96a8b 8 * OneWireCRC/OneWireThermometer is free software: you can redistribute it and/or modify
tonymudd 0:fb8b6da96a8b 9 * it under the terms of the GNU General Public License as published by
tonymudd 0:fb8b6da96a8b 10 * the Free Software Foundation, either version 3 of the License, or
tonymudd 0:fb8b6da96a8b 11 * (at your option) any later version.
tonymudd 0:fb8b6da96a8b 12 *
tonymudd 0:fb8b6da96a8b 13 * OneWireCRC/OneWireThermometer is distributed in the hope that it will be useful,
tonymudd 0:fb8b6da96a8b 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
tonymudd 0:fb8b6da96a8b 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
tonymudd 0:fb8b6da96a8b 16 * GNU General Public License for more details.
tonymudd 0:fb8b6da96a8b 17 *
tonymudd 0:fb8b6da96a8b 18 * You should have received a copy of the GNU General Public License
tonymudd 0:fb8b6da96a8b 19 * along with OneWireCRC/OneWireThermometer0. If not, see <http://www.gnu.org/licenses/>.
tonymudd 0:fb8b6da96a8b 20 */
tonymudd 0:fb8b6da96a8b 21
tonymudd 0:fb8b6da96a8b 22 ////////////////////////////////////////////////////////////////////
tonymudd 0:fb8b6da96a8b 23 // Test code to read temperature from a Maxim DS18B20 or DS18S20
tonymudd 0:fb8b6da96a8b 24 // 1-wire device
tonymudd 0:fb8b6da96a8b 25 ////////////////////////////////////////////////////////////////////
tonymudd 0:fb8b6da96a8b 26
tonymudd 0:fb8b6da96a8b 27 #include <mbed.h>
tonymudd 0:fb8b6da96a8b 28 #include "DS18B20.h"
tonymudd 0:fb8b6da96a8b 29 #include "OneWireDefs.h"
tonymudd 0:fb8b6da96a8b 30
tonymudd 0:fb8b6da96a8b 31 #define THERMOMETER DS18B20
tonymudd 0:fb8b6da96a8b 32
tonymudd 0:fb8b6da96a8b 33 float temp;
tonymudd 0:fb8b6da96a8b 34 // device( mbed pin )
tonymudd 0:fb8b6da96a8b 35 THERMOMETER device(p21);
tonymudd 0:fb8b6da96a8b 36
tonymudd 0:fb8b6da96a8b 37 void readTemp(int deviceNum)
tonymudd 0:fb8b6da96a8b 38 {
tonymudd 0:fb8b6da96a8b 39 temp = device.readTemperature(deviceNum);
tonymudd 0:fb8b6da96a8b 40 printf("Device %d is %f\n\r",deviceNum, temp);
tonymudd 0:fb8b6da96a8b 41 wait(0.5);
tonymudd 0:fb8b6da96a8b 42 }
tonymudd 0:fb8b6da96a8b 43
tonymudd 0:fb8b6da96a8b 44 int main()
tonymudd 0:fb8b6da96a8b 45 {
tonymudd 0:fb8b6da96a8b 46
tonymudd 0:fb8b6da96a8b 47 while (!device.initialize()); // keep calling until it works
tonymudd 0:fb8b6da96a8b 48 // Say how many were found.
tonymudd 0:fb8b6da96a8b 49 int deviceCount = device.getDeviceCount();
tonymudd 0:fb8b6da96a8b 50 printf("Found %d sensors\n\r",deviceCount);
tonymudd 0:fb8b6da96a8b 51
tonymudd 0:fb8b6da96a8b 52 device.setResolution(twelveBit);
tonymudd 0:fb8b6da96a8b 53 while (true)
tonymudd 0:fb8b6da96a8b 54 {
tonymudd 0:fb8b6da96a8b 55 for (int i = 0;i < deviceCount; i++)
tonymudd 0:fb8b6da96a8b 56 readTemp(i);
tonymudd 0:fb8b6da96a8b 57 }
tonymudd 0:fb8b6da96a8b 58
tonymudd 0:fb8b6da96a8b 59 //return EXIT_SUCCESS; // Commented out to prevent the warning that this code is unreachable, due to the while(forever) above.
tonymudd 0:fb8b6da96a8b 60 }
tonymudd 0:fb8b6da96a8b 61