#include <LiquidCrystal.h>
LiquidCrystal lcd(11, 12, 5, 4, 3, 2);
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 9 // Провод передачи данных подключен к порту 9 на Arduino
#define precision 12 // определение точности
int sen_number = 0; // Счетчик датчиков Далласа
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire); // Передача по OneWire температуры
//DeviceAddress T1, T2, T3, T4, T5, T6, T7, T8; // массив датчиков
DeviceAddress deviceAddresses[8]; // массив для хранения адресов
int deviceCount = 0;
/*void setup(void)
{
lcd.begin(16,2);
Serial.begin(9600);
Serial.println("Библиотека контроля температуры"); // запуск библиотеки
sensors.begin();
Serial.print("Найдено: "); // ищем устройства на шине
Serial.print(sensors.getDeviceCount(), DEC); //команда, которая печатает количество устройств на шине
Serial.println(" Устройство");
Serial.print("Parasite power is: "); // подсоединенных утройств ПАРАЗИТНОЕ ПОДКЛЮЧЕНИЕ
if (sensors.isParasitePowerMode()) Serial.println("ON"); //функция из библиотеки DallasTemperature, которая определяет, включён ли режим паразитного питания датчиков температуры DS18B20.
else Serial.println("OFF");
// Выполните поиск устройств на шине и назначьте их номер
if (!sensors.getAddress(T1, 0)) Serial.println("Не найден датчик 1");
if (!sensors.getAddress(T2, 1)) Serial.println("Не найден датчик 2");
if (!sensors.getAddress(T3, 2)) Serial.println("Не найден датчик 3");
if (!sensors.getAddress(T4, 3)) Serial.println("Не найден датчик 4");
if (!sensors.getAddress(T5, 4)) Serial.println("Не найден датчик 5");
if (!sensors.getAddress(T6, 5)) Serial.println("Не найден датчик 6");
if (!sensors.getAddress(T7, 6)) Serial.println("Не найден датчик 7");
if (!sensors.getAddress(T8, 7)) Serial.println("Не найден датчик 8");
// показать адреса, которые нашли на шине
for (int k =0; k < sensors.getDeviceCount();
k++)
{
Serial.print("Датчик ");
Serial.print(k+1);
Serial.print(" Адресс: ");
if (k == 0) { printAddress(T1); Serial.println();
} else if (k == 1) { printAddress(T2); Serial.println();
} else if (k == 2) { printAddress(T3); Serial.println();
} else if (k == 3) { printAddress(T4); Serial.println();
} else if (k == 4) { printAddress(T5); Serial.println();
} else if (k == 5) { printAddress(T6); Serial.println();
} else if (k == 6) { printAddress(T7); Serial.println();
} else if (k == 7) { printAddress(T8); Serial.println();
}
}
// установим разрешение на 12 бит для каждого устройства
sensors.setResolution(T1, precision);
sensors.setResolution(T2, precision);
sensors.setResolution(T3, precision);
sensors.setResolution(T4, precision);
sensors.setResolution(T5, precision);
sensors.setResolution(T6, precision);
sensors.setResolution(T7, precision);
sensors.setResolution(T8, precision);
for (int k =0; k < sensors.getDeviceCount(); k++) {
Serial.print("Датчик ");
Serial.print(k+1);
Serial.print(" Вывод: ");
if (k == 0) { Serial.print(sensors.getResolution(T1), DEC); Serial.println();
} else if (k == 1) { Serial.print(sensors.getResolution(T2), DEC); Serial.println();
} else if (k == 2) { Serial.print(sensors.getResolution(T3), DEC); Serial.println();
} else if (k == 3) { Serial.print(sensors.getResolution(T4), DEC); Serial.println();
} else if (k == 4) { Serial.print(sensors.getResolution(T5), DEC); Serial.println();
} else if (k == 5) { Serial.print(sensors.getResolution(T6), DEC); Serial.println();
} else if (k == 6) { Serial.print(sensors.getResolution(T7), DEC); Serial.println();
} else if (k == 7) { Serial.print(sensors.getResolution(T8), 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 : ");
Serial.print(tempC);
Serial.print(" Celcius degres ");
// Serial.print(" Temp F: "); ////ФАРИНГЕЙТ!!!!!
// Serial.print(DallasTemperature::toFahrenheit(tempC));
}
// функция вывода разрешения устройства
void printResolution(DeviceAddress deviceAddress)
{
}
void printData(DeviceAddress deviceAddress)
{
Serial.print("Адресс устройства: ");
printAddress(deviceAddress);
Serial.print(" ");
printTemperature(deviceAddress);
Serial.println();
}
void loop(void)
{
// вызываем функцию sensors.requestTemperatures(), чтобы отправить запрос о температуре всем устройствам на шине
Serial.print("Ждем данные..");
sensors.requestTemperatures();
Serial.println("ЗАГРУЖАЕМ");
// выводим информацию об устройстве
for (int k =0; k < sensors.getDeviceCount(); k++) {
Serial.print("Датчик ");
Serial.print(k+1);
Serial.print(" ");
if (k == 0) { printData(T1);
} else if (k == 1) { printData(T2);
} else if (k == 2) { printData(T3);
} else if (k == 3) { printData(T4);
} else if (k == 4) { printData(T5);
} else if (k == 5) { printData(T6);
} else if (k == 6) { printData(T7);
} else if (k == 7) { printData(T8);
}
}
if (sen_number == sensors.getDeviceCount()) {
sen_number = 0; // сбросс счетчика
// lcd.clear(); // очиста экрана
}
lcd.setCursor(0,0);
lcd.print("Sensor Number ");
lcd.print(sen_number+1);
lcd.setCursor(0,1);
lcd.print(" Temp: ");
if (sen_number = 0) { lcd.print(sensors.getTempC(T1)); lcd.write((char)223); lcd.print("C ");
} else if (sen_number = 1) { lcd.print(sensors.getTempC(T2)); lcd.write((char)223); lcd.print("C ");
} else if (sen_number = 2) { lcd.print(sensors.getTempC(T3)); lcd.write((char)223); lcd.print("C ");
} else if (sen_number = 3) { lcd.print(sensors.getTempC(T4)); lcd.write((char)223); lcd.print("C ");
} else if (sen_number = 4) { lcd.print(sensors.getTempC(T5)); lcd.write((char)223); lcd.print("C ");
} else if (sen_number = 5) { lcd.print(sensors.getTempC(T6)); lcd.write((char)223); lcd.print("C ");
} else if (sen_number = 6) { lcd.print(sensors.getTempC(T7)); lcd.write((char)223); lcd.print("C ");
} else if (sen_number = 7) { lcd.print(sensors.getTempC(T8)); lcd.write((char)223); lcd.print("C ");
}
Serial.print("Номер Датчика =");
Serial.println(sen_number);
delay(1000);
sen_number++ ;
}*/
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 setup() {
lcd.begin(16,2);
Serial.begin(9600);
Serial.println("Библиотека контроля температуры");
Serial.begin(9600);
sensors.begin();
// Узнать сколько устройств подключено
deviceCount = sensors.getDeviceCount();
Serial.print("Найдено устройств: ");
Serial.println(deviceCount);
// Проходим по всем устройствам и запоминаем их адреса
for (int i = 0; i < deviceCount; i++) {
if (sensors.getAddress(deviceAddresses[i], i)) {
Serial.print("Датчик ");
Serial.print(i + 1);
Serial.print(" Адрес: ");
printAddress(deviceAddresses[i]);
Serial.println();
} else {
Serial.print("Не удалось найти устройство по индексу ");
Serial.println(i);
}
}
}
void loop() {
sensors.requestTemperatures();
for (int i = 0; i < deviceCount; i++) {
float tempC = sensors.getTempC(deviceAddresses[i]);
Serial.print("Датчик ");
Serial.print(i + 1);
Serial.print(" Температура: ");
Serial.print(tempC);
Serial.println(" C");
}
lcd.setCursor(0,0);
lcd.print("Sensor Number ");
lcd.print(sen_number+1);
lcd.setCursor(0,1);
lcd.print(" Temp: ");
Serial.print("Номер Датчика =");
Serial.println(sen_number);
sen_number++ ;
delay(2000); // Обновление каждые 2 секунды
}