addressing individual ds18b20s in a multiple device sketch

Hi everyone,
This is my first post here, I am very new to Arduino so please forgive me if I have left out any important info that will help you help me.

I have been working on a project using two ds18b20 temperature sensors. Without going into detail (unless you want to know :slight_smile: ) I am using the sensors to turn on servos. I have mashed together various bits of code I have found and feel like I’m making real progress which has been very exciting.

I have been using the Miles Burton - Dallas temperature control library. In particular the alarm handler and multiple sketches. Two ds18b20 sensors in parasitic mode.

So far I have figured out I can turn on servos using the alarm feature but what I would like to do is to be able to compare the results of the two sensors. for example: if sensor A is equal to sensor B...

I can manipulate the code to effect both the sensors but can’t figure out how to address each sensor individually. Can you point me in the right direction?

Cheers
Jim

Start with posting your code ...

The code I started with was the alarmhandler.pde (Miles Burton ) I have pasted it below. I used the straight Burton code without my additions as they don't relate to this (I'm sure my additions will feature in another post asking for help soon :wink: )

thanks

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

// Data wire is plugged into port 2 on the Arduino
#define ONE_WIRE_BUS 2

// 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);

// arrays to hold device addresses
DeviceAddress insideThermometer, outsideThermometer;

// function that will be called when an alarm condition exists during DallasTemperatures::processAlarms();
void newAlarmHandler(uint8_t* deviceAddress)
{
Serial.println("Alarm Handler Start");
printAlarmInfo(deviceAddress);
printTemp(deviceAddress);
Serial.println();
Serial.println("Alarm Handler Finish");
}

void printCurrentTemp(DeviceAddress deviceAddress)
{
printAddress(deviceAddress);
printTemp(deviceAddress);
Serial.println();
}

void printAddress(DeviceAddress deviceAddress)
{
Serial.print("Address: ");
for (uint8_t i = 0; i < 8; i++)
{
if (deviceAddress < 16) Serial.print("0");
_ Serial.print(deviceAddress*, HEX);_
_
}_
_ Serial.print(" ");_
_
}_
void printTemp(DeviceAddress deviceAddress)
_
{_
_
float tempC = sensors.getTempC(deviceAddress);_
if (tempC != DEVICE_DISCONNECTED)
_
{_
_ Serial.print("Current Temp C: ");
Serial.print(tempC);_

_
}_
_ else Serial.print("DEVICE DISCONNECTED");
Serial.print(" ");_

_
}_
void printAlarmInfo(DeviceAddress deviceAddress)
_
{_
_
char temp;_
_
printAddress(deviceAddress);_
_
temp = sensors.getHighAlarmTemp(deviceAddress);_
_ Serial.print("High Alarm: ");
Serial.print(temp, DEC);
Serial.print("C");
Serial.print(" Low Alarm: ");_

_
temp = sensors.getLowAlarmTemp(deviceAddress);_
_ Serial.print(temp, DEC);
Serial.print("C");
Serial.print(" ");_

_
}_
void setup(void)
_
{_
_
// start serial port*_
_ Serial.begin(9600);
Serial.println("Dallas Temperature IC Control Library Demo");_

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

* // locate devices on the bus*
_ Serial.print("Found ");
Serial.print(sensors.getDeviceCount(), DEC);
Serial.println(" devices.");
* // search for devices on the bus and assign based on an index*
if (!sensors.getAddress(insideThermometer, 0)) Serial.println("Unable to find address for Device 0");
if (!sensors.getAddress(outsideThermometer, 1)) Serial.println("Unable to find address for Device 1");
Serial.print("Device insideThermometer ");
* printAlarmInfo(insideThermometer);*
Serial.println();_

_ Serial.print("Device outsideThermometer ");
* printAlarmInfo(outsideThermometer);*
Serial.println();_

* // set alarm ranges*
_ Serial.println("Setting alarm temps...");_
* sensors.setHighAlarmTemp(insideThermometer, 26);*
* sensors.setLowAlarmTemp(insideThermometer, 22);*
* sensors.setHighAlarmTemp(outsideThermometer, 25);*
* sensors.setLowAlarmTemp(outsideThermometer, 21);*

_ Serial.print("New insideThermometer ");
* printAlarmInfo(insideThermometer);*
Serial.println();_

_ Serial.print("New outsideThermometer ");
* printAlarmInfo(outsideThermometer);*
Serial.println();_

* // attach alarm handler*
* sensors.setAlarmHandler(&newAlarmHandler);*
}
void loop(void)
*{ *
* // ask the devices to measure the temperature*
* sensors.requestTemperatures();*

* // if an alarm condition exists as a result of the most recent*
* // requestTemperatures() request, it exists until the next time*
* // requestTemperatures() is called AND there isn't an alarm condition*
* // on the device*
* if (sensors.hasAlarm())*
* {*
_ Serial.println("Oh noes! There is at least one alarm on the bus.");_
* }*
* // call alarm handler function defined by sensors.setAlarmHandler*
* // for each device reporting an alarm*
* sensors.processAlarms();*
* if (!sensors.hasAlarm())*
* {*
* // just print out the current temperature*
* printCurrentTemp(insideThermometer);*
* printCurrentTemp(outsideThermometer);*
* }*

* delay(1000);*
}
[/quote]

in the lib there are functions to get the temperature.

void loop()
{
  sensors.requestTemperatures();

  float T1 = sensors.getTempC(insideThermometer);
  float T2 = sensors.getTempC(outsideThermometer);

  if (abs(T1 -T2) < 0.5)    // best practice: comparing floats is done with an inequallity
  {
    // do something
    moveServo1(T1);
    moveServo2(T2);
  }
}

hope this helps...

Thank you Robtillaart,

that gets things back on track :slight_smile:

Welcome,

If the sketch works you may post it for people who find this thread usefull (please use the #button for code)

Rob