-#include <OneWire.h>
-#include <DallasTemperature.h>
-
-// Data wire is plugged into port 2 on the Arduino
-#define ONE_WIRE_BUS 3
-#define TEMPERATURE_PRECISION 9
-
-// 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[i] < 16) Serial.print("0");
- Serial.print(deviceAddress[i], 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);
-}
-\r