Help Understanding this code

Hi Forum

I’m trying to understand this code. for an DS18B20 Sensor. I have marked the lines i dont understand with *****

I have also cheked the included headerfiles and CPP files for the file there are included

Can anyone please explain to mee in plain language what is happning. it works fine but i dont understand it. it is the Tester eksample from Dallastemperatur Library

Kind Regards Bo Paaske

#include <OneWire.h>
#include <DallasTemperature.h>

// Data wire is plugged into port 2 on the Arduino
#define ONE_WIRE_BUS 2
#define TEMPERATURE_PRECISION 9 // Lower resolution

// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature.

DallasTemperature sensors(&oneWire)

int numberOfDevices; // Number of temperature devices found

DeviceAddress tempDeviceAddress; // We’ll use this variable to store a found device address

void setup(void)
// start serial port
Serial.println(“Dallas Temperature IC Control Library Demo”);

// Start up the library
***** sensors.begin();******

// Grab a count of devices on the wire
numberOfDevices = sensors.getDeviceCount();

// locate devices on the bus
Serial.print(“Locating devices…”);

Serial.print(“Found “);
Serial.print(numberOfDevices, DEC);
Serial.println(” devices.”);

// report parasite power requirements
Serial.print("Parasite power is: ");
if (sensors.isParasitePowerMode()) Serial.println(“ON”);
else Serial.println(“OFF”);

// Loop through each device, print out address
for(int i=0;i<numberOfDevices; i++)
// Search the wire for address
*if(sensors.getAddress(tempDeviceAddress, i))
Serial.print("Found device “);
Serial.print(i, DEC);
Serial.print(” with address: ");

Serial.print("Setting resolution to ");

// set the resolution to TEMPERATURE_PRECISION bit (Each Dallas/Maxim device is capable of several different resolutions)
sensors.setResolution(tempDeviceAddress, TEMPERATURE_PRECISION);

Serial.print("Resolution actually set to: ");
Serial.print(sensors.getResolution(tempDeviceAddress), DEC);
Serial.print(“Found ghost device at “);
Serial.print(i, DEC);
Serial.print(” but could not detect address. Check power and cabling”);


// function to print the temperature for a device
void printTemperature(DeviceAddress deviceAddress)
// method 1 - slower
//Serial.print("Temp C: “);
//Serial.print(” Temp F: ");
//Serial.print(sensors.getTempF(deviceAddress)); // Makes a second call to getTempC and then converts to Fahrenheit

// method 2 - faster
float tempC = sensors.getTempC(deviceAddress);
Serial.print("Temp C: “);
Serial.print(” Temp F: ");
Serial.println(DallasTemperature::toFahrenheit(tempC)); // Converts tempC to Fahrenheit

void loop(void)
// call sensors.requestTemperatures() to issue a global temperature
// request to all devices on the bus
Serial.print(“Requesting temperatures…”);
sensors.requestTemperatures(); // Send the command to get temperatures

// Loop through each device, print out temperature data
for(int i=0;i<numberOfDevices; i++)
// Search the wire for address
if(sensors.getAddress(tempDeviceAddress, i))
// Output the device ID
Serial.print("Temperature for device: ");

// It responds almost immediately. Let’s print out the data
printTemperature(tempDeviceAddress); // Use a simple function to print out the data
//else ghost device! Check your power requirements and cabling


// function to print a device address
void printAddress(DeviceAddress deviceAddress)
for (uint8_t i = 0; i < 8; i++)
if (deviceAddress < 16) Serial.print(“0”);
_ Serial.print(deviceAddress*, HEX);_

*****DallasTemperature sensors(&oneWire)*****

Create an instance (an object) of type "DallasTemperature" called "sensors", and allow it to use the oneWire object.

 ***** sensors.begin();******

Do whatever initialisation is necessary to allow the "sensors" object to function. and so on.

If you read the source of the DallasTemperature library, it'll give you a whole lot more detail.

if you read the sticky thread at the top of this (and just about every other) section of the forum, it'll explain how to use code tags, so your code doesn't degenerate into italics.

Can anyone please explain to mee in plain language what is happning.

DallasTemperature sensors(&oneWire)

This creates an instance of the DallasTemperature class with the (dumb) name sensors (dumb because there there is only one sensor). The constructor needs to know which bus is connecting the sensors, hence the address of the oneWire object being passed in.


This calls the begin() method of the sensors object.

if(sensors.getAddress(tempDeviceAddress, i))

This calls the getAddress() method of the sensors object, with the location where the address should be stored, and the number of the device to get the address of. It's a silly arrangement of arguments. Usually, the inputs are listed first, and then the outputs, if there are any.

The function returns true (found an address) or false (nope, no address for that device number).

Thanks for the replays

an merry Xmas

if you are planning to use the ds18b20 in a larger sketch you can run the original code and record the address of the sensor then make a new sketch that only reads the sensor at that address.