basvas

Temperature 2 sensor DS18B20 + LCD

Jan 14th, 2021
539
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /***** 1
  2. */
  3. // подключаем библиотеку «Scheduler» для выполнения несколько задач одновременно
  4. #include <Scheduler.h>
  5.  
  6. // библиотека для работы с протоколом 1-Wire
  7. #include <OneWire.h>
  8. // библиотека для работы с датчиком DS18B20
  9. #include <DallasTemperature.h>
  10. #include <LiquidCrystal.h>
  11.  byte simvol[8]   = {B11100,B10100,B11100,B00000,B00000,B00000,B00000,B00000,}; // Символ градуса
  12. // сигнальный провод датчика
  13. #define ONE_WIRE_BUS 52
  14.  LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
  15. // создаём объект для работы с библиотекой OneWire
  16. OneWire oneWire(ONE_WIRE_BUS);
  17. // создадим объект для работы с библиотекой DallasTemperature
  18. DallasTemperature sensors(&oneWire);
  19. // создаём указатель массив для хранения адресов датчиков
  20. DeviceAddress *sensorsUnique;
  21. // количество датчиков на шине
  22. int countSensors;
  23.  
  24. // функция вывода адреса датчика
  25. void printAddress(DeviceAddress deviceAddress){
  26.   for (uint8_t i = 0; i < 8; i++){
  27.     if (deviceAddress[i] < 16) Serial.print("0");
  28.     Serial.print(deviceAddress[i], HEX);
  29.   }
  30. }
  31.  
  32. void setup(){
  33.     /***** 2
  34.     */
  35.     // добавляем в планировщик функции loop2;
  36.     // loop() всегда запускается по умолчанию:
  37.     Scheduler.startLoop(loop2);
  38.  
  39.    
  40.    
  41.     lcd.begin(16, 2);
  42.   // инициализируем работу Serial-порта
  43.   Serial.begin(9600);
  44.   // ожидаем открытия Serial-порта
  45.   while(!Serial);
  46.   // начинаем работу с датчиком
  47.   sensors.begin();
  48.   // выполняем поиск устройств на шине
  49.   countSensors = sensors.getDeviceCount();
  50.   Serial.print("Found sensors: ");
  51.   Serial.println(countSensors);
  52.   // выделяем память в динамическом массиве под количество обнаруженных сенсоров
  53.   sensorsUnique = new DeviceAddress[countSensors];
  54.  
  55.   // определяем в каком режиме питания подключены сенсоры
  56.   if (sensors.isParasitePowerMode()) {
  57.     Serial.println("Mode power is Parasite");
  58.   } else {
  59.     Serial.println("Mode power is Normal");
  60.   }
  61.  
  62.   // делаем запрос на получение адресов датчиков
  63.   for (int i = 0; i < countSensors; i++) {
  64.     sensors.getAddress(sensorsUnique[i], i);
  65.   }
  66.   // выводим полученные адреса
  67.   for (int i = 0; i < countSensors; i++) {
  68.     Serial.print("Device ");
  69.     Serial.print(i);
  70.     Serial.print(" Address: ");
  71.     printAddress(sensorsUnique[i]);
  72.     Serial.println();
  73.   }
  74.   Serial.println();
  75.   // устанавливаем разрешение всех датчиков в 12 бит
  76.   for (int i = 0; i < countSensors; i++) {
  77.     sensors.setResolution(sensorsUnique[i], 12);
  78.   }
  79. }
  80.  
  81.     /***** 3
  82.     */
  83.     // loop() всегда запускается по умолчанию:
  84.     // для первого датчика  countSensors = 1;
  85.    
  86. void loop(){
  87.    
  88.     /***** 4
  89.     */
  90.     // loop() всегда запускается по умолчанию:
  91.     // для первого датчика  countSensors = 0;
  92.     countSensors = 0;
  93.    
  94.   // переменная для хранения температуры
  95.   float temperature[10];
  96.   // отправляем запрос на измерение температуры всех сенсоров
  97.   sensors.requestTemperatures();
  98.   // считываем данные из регистра каждого датчика по очереди
  99.   for (int i = 0; i < countSensors; i++) {
  100.     temperature[i] = sensors.getTempCByIndex(i);
  101.   }
  102.   // выводим температуру в Serial-порт по каждому датчику
  103.   for (int i = 0; i < countSensors; i++) {
  104.     Serial.print("Device ");
  105.     Serial.print(i);
  106.     Serial.print(" Temp C: ");
  107.     Serial.print(temperature[i]);
  108.     Serial.println();
  109.   }
  110.  
  111.    
  112.    
  113.  for (int i = 0; i < countSensors; i++) {
  114.    
  115.     /***** 5
  116.     */
  117.     // первый датчик будет HOT:
  118.     // для первого датчика  countSensors = 0;
  119.    
  120.     countSensors = 0;
  121.     lcd.createChar(1, simvol);                  // Создаем символ под номером 1
  122.     lcd.setCursor(0,0);
  123.     lcd.print("HOT");
  124.     lcd.setCursor(6,0);                         // Устанавливаем курсор на 1 строку, ячейка 7
  125.     lcd.print(temperature[0]);      // Выводим показания температуры
  126.  
  127.     // ждём одну секунду
  128.   //delay(1000);
  129.   }
  130.  
  131.   void loop2(){
  132.    
  133.     /***** 6
  134.     */
  135.     // loop() всегда запускается по умолчанию:
  136.     // для первого датчика  countSensors = 1; тогда i = 1
  137.     countSensors = 1;
  138.    
  139.   // переменная для хранения температуры
  140.   float temperature[10];
  141.   // отправляем запрос на измерение температуры всех сенсоров
  142.   sensors.requestTemperatures();
  143.   // считываем данные из регистра каждого датчика по очереди
  144.   for (int i = 1; i < countSensors; i++) {
  145.     temperature[i] = sensors.getTempCByIndex(i);
  146.   }
  147.   // выводим температуру в Serial-порт по каждому датчику
  148.   for (int i = 1; i < countSensors; i++) {
  149.     Serial.print("Device ");
  150.     Serial.print(i);
  151.     Serial.print(" Temp C: ");
  152.     Serial.print(temperature[i]);
  153.     Serial.println();
  154.   }
  155.  
  156.        
  157.  for (int i = 1; i < countSensors; i++) {
  158.    
  159.     /***** 7
  160.     */
  161.     // второй датчик будет COOL:
  162.     // для второго датчика  countSensors = 1;
  163.    
  164.    lcd.setCursor(0,1);
  165.    lcd.print("COOL");
  166.   lcd.setCursor(6,1);
  167.   lcd.print(temperature[1]);
  168.   lcd.setCursor(14,0);                        // Устанавливаем курсор на 1 строку, ячейка 12  
  169.   lcd.print("\1");                            // Выводим символ градуса
  170.   lcd.setCursor(15,0);                        // Устанавливаем курсор на 1 строку, ячейка 13
  171.   lcd.print("C");                             // Выводим текст
  172.   lcd.setCursor(14,1);                        // Устанавливаем курсор на 1 строку, ячейка 12  
  173.   lcd.print("\1");                            // Выводим символ градуса
  174.   lcd.setCursor(15,1);                        // Устанавливаем курсор на 1 строку, ячейка 13
  175.   lcd.print("C");                             // Выводим текст
  176.  
  177.     // ждём одну секунду
  178.   //delay(1000);
  179.   }
  180.  
  181.     /***** 8
  182.     */
  183.     // возможно с экраном что-то не получится с первого раза
  184.     // для отладки желательно адресно обращаться (а не в циклах) к каждому датчику
  185.     // temperature[0] = sensors.getTempCByIndex(0); для первого датчика
  186.     // temperature[1] = sensors.getTempCByIndex(1); для второго датчика
  187. }
RAW Paste Data