#include <OneWire.h>
#include <DallasTemperature.h>
// вказати до якого порту ми підключили контакт по передачі даннихвнашому випадку до 2
#define ONE_WIRE_BUS 5
#define TEMPERATURE_PRECISION 9
//налаштування для oneWire для спілкування з будь-якимипристроями-Wire
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
// масиви для зберігання адрес пристроїв
DeviceAddress insideThermometer, outsideThermometer;
void setup(void)
{
// почати послідовного порту
Serial.begin(9600);
Serial.println("Dallas Temperature IC Control Library Demo");
// Запуск бібліотеки
sensors.begin();
// знайти пристрої на шині
Serial.print("Locating devices...");
Serial.print("Found ");
Serial.print(sensors.getDeviceCount(), DEC);
Serial.println(" devices.");
// вказуємо вимоги до паразитного живлення
Serial.print("Parasite power is: ");
if (sensors.isParasitePowerMode()) Serial.println("ON");
else Serial.println("OFF");
// алгоритм пошуку виглядає так . Повертає 1, якщо нова адреса булазнайдена
// нуль може означати, що шина замкнута, немає пристроїв,
// або вже витягнуто всі з них
// перевірка CRC, щоб переконатися, що ми не отримаємо сміття
// привласнює першу адресу, вказану в insideThermometer
// якщо Serial.println ( "Не вдалося знайти адресу дляinsideThermometer") (oneWire.search (insideThermometer)!);
// привласнює секундної адресу, вказану в outsideThermometer
// якщо Serial.println ( "Не вдалося знайти адресу дляoutsideThermometer") (oneWire.search (outsideThermometer)!);
if (!sensors.getAddress(insideThermometer, 0)) Serial.println("Unable tofind address for Device 0");
if (!sensors.getAddress(outsideThermometer, 1)) Serial.println("Unable tofind address for Device 1");
// показати адреси які ми знайшли на шині
Serial.print("Device 0 Address: ");
printAddress(insideThermometer);
Serial.println();
Serial.print("Device 1 Address: ");
printAddress(outsideThermometer);
Serial.println();
// встановити дозвіл на 9 біт
sensors.setResolution(insideThermometer, TEMPERATURE_PRECISION);
sensors.setResolution(outsideThermometer, TEMPERATURE_PRECISION);
Serial.print("Device 0 Resolution: ");
Serial.print(sensors.getResolution(insideThermometer), DEC);
Serial.println();
Serial.print("Device 1 Resolution: ");
Serial.print(sensors.getResolution(outsideThermometer), DEC);
Serial.println();
}
// Функція для друку адресу пристрою
void printAddress(DeviceAddress deviceAddress)
{
for (uint8_t i = 0; i < 8; i++)
{
if (deviceAddress[i] < 16) Serial.print("0");
Serial.print(deviceAddress[i], HEX);
}
}
// Функція для друку температури для пристрою
void printTemperature(DeviceAddress deviceAddress)
{
float tempC = sensors.getTempC(deviceAddress);
Serial.print("Temp C: ");
Serial.print(tempC);
Serial.print(" Temp F: ");
Serial.print(DallasTemperature::toFahrenheit(tempC));
}
// Функція для друку дозволу пристрою
void printResolution(DeviceAddress deviceAddress)
{
Serial.print("Resolution: ");
Serial.print(sensors.getResolution(deviceAddress));
Serial.println();
}
// головна функція для друку інформації про пристрій
void printData(DeviceAddress deviceAddress)
{
Serial.print("Device Address: ");
printAddress(deviceAddress);
Serial.print(" ");
printTemperature(deviceAddress);
Serial.println();
}
void loop(void)
{
// sensors.requestTemperatures виклик для видачі глобальної температури
// запит на всі пристрої на шині
Serial.print("Requesting temperatures...");
sensors.requestTemperatures();
Serial.println("DONE");
// друк інформації про пристрій
printData(insideThermometer);
printData(outsideThermometer);
delay(700);
}
Loading
ds18b20
ds18b20