Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /***** 1
- */
- // подключаем библиотеку «Scheduler» для выполнения несколько задач одновременно
- #include <Scheduler.h>
- // библиотека для работы с протоколом 1-Wire
- #include <OneWire.h>
- // библиотека для работы с датчиком DS18B20
- #include <DallasTemperature.h>
- #include <LiquidCrystal.h>
- byte simvol[8] = {B11100,B10100,B11100,B00000,B00000,B00000,B00000,B00000,}; // Символ градуса
- // сигнальный провод датчика
- #define ONE_WIRE_BUS 52
- LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
- // создаём объект для работы с библиотекой OneWire
- OneWire oneWire(ONE_WIRE_BUS);
- // создадим объект для работы с библиотекой DallasTemperature
- DallasTemperature sensors(&oneWire);
- // создаём указатель массив для хранения адресов датчиков
- DeviceAddress *sensorsUnique;
- // количество датчиков на шине
- int countSensors;
- // функция вывода адреса датчика
- 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(){
- /***** 2
- */
- // добавляем в планировщик функции loop2;
- // loop() всегда запускается по умолчанию:
- Scheduler.startLoop(loop2);
- lcd.begin(16, 2);
- // инициализируем работу Serial-порта
- Serial.begin(9600);
- // ожидаем открытия Serial-порта
- while(!Serial);
- // начинаем работу с датчиком
- sensors.begin();
- // выполняем поиск устройств на шине
- countSensors = sensors.getDeviceCount();
- Serial.print("Found sensors: ");
- Serial.println(countSensors);
- // выделяем память в динамическом массиве под количество обнаруженных сенсоров
- sensorsUnique = new DeviceAddress[countSensors];
- // определяем в каком режиме питания подключены сенсоры
- if (sensors.isParasitePowerMode()) {
- Serial.println("Mode power is Parasite");
- } else {
- Serial.println("Mode power is Normal");
- }
- // делаем запрос на получение адресов датчиков
- for (int i = 0; i < countSensors; i++) {
- sensors.getAddress(sensorsUnique[i], i);
- }
- // выводим полученные адреса
- for (int i = 0; i < countSensors; i++) {
- Serial.print("Device ");
- Serial.print(i);
- Serial.print(" Address: ");
- printAddress(sensorsUnique[i]);
- Serial.println();
- }
- Serial.println();
- // устанавливаем разрешение всех датчиков в 12 бит
- for (int i = 0; i < countSensors; i++) {
- sensors.setResolution(sensorsUnique[i], 12);
- }
- }
- /***** 3
- */
- // loop() всегда запускается по умолчанию:
- // для первого датчика countSensors = 1;
- void loop(){
- /***** 4
- */
- // loop() всегда запускается по умолчанию:
- // для первого датчика countSensors = 0;
- countSensors = 0;
- // переменная для хранения температуры
- float temperature[10];
- // отправляем запрос на измерение температуры всех сенсоров
- sensors.requestTemperatures();
- // считываем данные из регистра каждого датчика по очереди
- for (int i = 0; i < countSensors; i++) {
- temperature[i] = sensors.getTempCByIndex(i);
- }
- // выводим температуру в Serial-порт по каждому датчику
- for (int i = 0; i < countSensors; i++) {
- Serial.print("Device ");
- Serial.print(i);
- Serial.print(" Temp C: ");
- Serial.print(temperature[i]);
- Serial.println();
- }
- for (int i = 0; i < countSensors; i++) {
- /***** 5
- */
- // первый датчик будет HOT:
- // для первого датчика countSensors = 0;
- countSensors = 0;
- lcd.createChar(1, simvol); // Создаем символ под номером 1
- lcd.setCursor(0,0);
- lcd.print("HOT");
- lcd.setCursor(6,0); // Устанавливаем курсор на 1 строку, ячейка 7
- lcd.print(temperature[0]); // Выводим показания температуры
- // ждём одну секунду
- //delay(1000);
- }
- void loop2(){
- /***** 6
- */
- // loop() всегда запускается по умолчанию:
- // для первого датчика countSensors = 1; тогда i = 1
- countSensors = 1;
- // переменная для хранения температуры
- float temperature[10];
- // отправляем запрос на измерение температуры всех сенсоров
- sensors.requestTemperatures();
- // считываем данные из регистра каждого датчика по очереди
- for (int i = 1; i < countSensors; i++) {
- temperature[i] = sensors.getTempCByIndex(i);
- }
- // выводим температуру в Serial-порт по каждому датчику
- for (int i = 1; i < countSensors; i++) {
- Serial.print("Device ");
- Serial.print(i);
- Serial.print(" Temp C: ");
- Serial.print(temperature[i]);
- Serial.println();
- }
- for (int i = 1; i < countSensors; i++) {
- /***** 7
- */
- // второй датчик будет COOL:
- // для второго датчика countSensors = 1;
- lcd.setCursor(0,1);
- lcd.print("COOL");
- lcd.setCursor(6,1);
- lcd.print(temperature[1]);
- lcd.setCursor(14,0); // Устанавливаем курсор на 1 строку, ячейка 12
- lcd.print("\1"); // Выводим символ градуса
- lcd.setCursor(15,0); // Устанавливаем курсор на 1 строку, ячейка 13
- lcd.print("C"); // Выводим текст
- lcd.setCursor(14,1); // Устанавливаем курсор на 1 строку, ячейка 12
- lcd.print("\1"); // Выводим символ градуса
- lcd.setCursor(15,1); // Устанавливаем курсор на 1 строку, ячейка 13
- lcd.print("C"); // Выводим текст
- // ждём одну секунду
- //delay(1000);
- }
- /***** 8
- */
- // возможно с экраном что-то не получится с первого раза
- // для отладки желательно адресно обращаться (а не в циклах) к каждому датчику
- // temperature[0] = sensors.getTempCByIndex(0); для первого датчика
- // temperature[1] = sensors.getTempCByIndex(1); для второго датчика
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement