Подключаем датчик температуры ds18b20 к arduino

Программа 1

Для начала просто выведем температуру с датчика на дисплей.

#include <LiquidCrystal_I2C.h>      // подключаем библиотеку дисплея
LiquidCrystal_I2C lcd(0x27, 16, 2); // адрес, столбцов, строк

#include <microDS18B20.h>
MicroDS18B20<2> sensor;     // указываем пин

void setup() {
  lcd.init();           // инициализация
  lcd.backlight();      // включить подсветку
}

void loop() {
  sensor.requestTemp();   // запросить температуру
  delay(1000);            // ждём ответа
  lcd.home();             // курсор в 0,0
  lcd.print(sensor.getTemp());  // выводим температуру
  lcd.write(223);         // символ градуса
  lcd.print("C  ");       // С и пара пробелов для очистки
}

Способ 1: чтение показаний DS18B20 по индексу

В этом методе библиотека Dallas Temperature при инициализации обнаруживает все датчики, использующие одну шину. Она рассматривает всю шину как массив датчиков и присваивает им индексы. Поэтому мы можем точно выбрать каждый датчик по его индексу и прочитать показания температуры.

Вывод вышеприведенного скетча выглядит так:

Рисунок 5 – Вывод показаний нескольких датчиков DS18B20 индексным методом

Объяснение кода

Скетч начинается с включения библиотек, объявления вывода, к которому подключена шина датчиков, и создания объекта библиотеки .

В настроечной части кода мы сначала вызываем функцию . Она инициализирует шину и обнаруживает все DS18B20, присутствующие на ней. Затем каждому датчику присваивается индекс и устанавливается разрешение в 12 бит.

Затем мы вызываем функцию , чтобы получить количество устройств, найденных на шине.

В циклической части кода мы используем функцию , чтобы отправить команду всем датчикам для преобразования температуры.

Теперь, используя простой цикл , мы можем перебирать массив датчиков и считывать температуру DS18B20 по индексу , просто вызывая .

Работа с библиотекой DallasTemperature

Библиотека для Arduino DallasTemperature Sensors OneWire значительно облегчает и упрощает работу с сенсором DS18B20. Описание библиотеки DallasTemperature.h на русском говорит, что датчик управляется несколькими простыми функциями, которые представлены в следующем скетче. Схема подключения датчика не меняется, а скачать библиотеку DallasTemperature.h для Ардуино можно на нашем сайте здесь.

Скетч для датчика ds18b20 Ардуино

#include <OneWire.h>
#include <DallasTemperature.h>
 
OneWire oneWire(15);  // порт подключения датчика (A1)
DallasTemperature ds(&oneWire);

void setup() {
  Serial.begin(9600);   // инициализация монитора порта
  ds.begin();                 // инициализация датчика ds18b20
}

void loop() {
  ds.requestTemperatures();                       // считываем температуру с датчика
  
  Serial.print(ds.getTempCByIndex(0));   // выводим температуру на монитор
  Serial.println("C");
}

Скетч для нескольких датчиков на одной шине

Подключите несколько термодатчиков DS18B20 к микроконтроллеру согласно схеме, и загрузите скетч для датчика температуры ds18b20 к Arduino UNO.

#include <OneWire.h>
#include <DallasTemperature.h>
 
OneWire oneWire(15);  // порт подключения датчиков (A1)
DallasTemperature ds(&oneWire);

byte num;              // количество подключенных датчиков

void setup() {
  Serial.begin(9600);   // инициализация монитора порта
  ds.begin();                 // инициализация датчика ds18b20

  num = ds.getDeviceCount();   // узнаем количество датчиков 
  Serial.print("Number: ");           // выводим полученное количество
  Serial.println(num);
}

void loop() {
// выполняем цикл столько, сколько найдено датчиков на шине
 for (byte i = 0; i < num; i++){
    Serial.print("Sensor ");
    Serial.print(i);
    Serial.print(": ");
    ds.requestTemperatures();                       // считываем температуру с датчика
    Serial.print(ds.getTempCByIndex(i));
    Serial.println("C");
  } 
Serial.println(""); 
}

Пояснения к коду:

  1. DallasTemperature датчик подключается к порту A1, он же 15 цифровой порт;
  2. Цикл for выполняется столько раз, сколько обнаружено сенсоров на одой шине.

Что «умеет» DS18B20

Выглядит DS18B20 Arduino достаточно просто, — небольшая микросхема с тремя или восемью ножками, из которых одна используется с целью передачи цифровых сигналов, а две для питания. Тем не менее, функций и возможностей и у нее очень много:

  • Есть встроенная 64 битная постоянная память, содержащая среди прочего уникальный код каждого корпуса, используемый при адресации устройства;
  • Для подключения к контроллеру нет необходимости в дополнительных компонентах, достаточно присоединить сенсор напрямую к любому из цифровых входов на Ардуино;
  • Есть возможность подачи так называемого «тревожного сигнала» на логические цепи, если характеристики температуры отличаются от заложенных во внутреннюю память;
  • Допустимо подключение нескольких датчиков на одной линии связи с бесконфликтной их работой;
  • Диапазон определяемых температур от −55 °С до +125 °С;
  • Точность 0.5 °С;
  • Доступно изменение разрешающей способности от 9 до 12 бит;
  • Передача данных осуществляется на одном канале по протоколу 1-Wire, причем для обмена достаточно единичной линии или двух проводников;
  • Время получения показаний 750 мс;
  • Температура измеряется в Цельсии;
  • Для питания устройства достаточно чуть более 3 вольт.

Только с помощью OneWire.h

Впрочем, можно обойтись и без библиотеки DallasTemperature, тогда нужно будет в ручную отправлять команды на датчик. Для этого нужно знать собственно команды. Посмотрим сначала на пример такого кода:

По сути здесь мы просто сами реализовали некоторые нужные нам функции, которые есть также в классе DallasTemperature (используемом в примере выше).

Внутри датчика DS18B20 стоит свой небольшой контроллер, с которым ардуина общается посредством команд. Команды передаются с помощью метода write класса OneWire:

write(byte) — основной метод класса OneWire, который передает байт данных на устройство. Байт представляет собой определенную команду. Для DS18B20 это следующие основные команды:

0x44 — провести измерение температуры и записать данные в оперативную память;

0x4E — записать 3 байта в 3й, 4й и 5й байты оперативной памяти;

0xBE — считать последовательно 9 байт оперативной памяти;

0x48 — скопировать 3й и 4й байты оперативной памяти в EEPROM;

0xB8 — скопировать данные из EEPROM В 3й и 4й байты оперативной памяти;

0xB4 — вернуть тип питания (0 — паразитное, 1 — внешнее);

Информация об измеренной температуре хранится в оперативной памяти датчика, которая состоит из 9 байт:

1 и 2 байты — хранят информацию о температуре.

3 и 4 байты — хранят соответственно верхний и нижний пределы температуры.

5 и 6 байты — зарезервированы.

7 и 8 байты — используются для сверхточного измерения температуры.

9 байт — хранит помехоустойчивый CRC код предыдущих 8 байт.

Вот список основных методов класса OneWire:

search(addressArray) — Выполняет поиск следующего 1-Wire устройства, если устройство найдено, то в 8-байтный массив addressArray записывается его ROM код, иначе возвращает false;

reset_search() — Выполняет новый поиск с первого устройства;

reset() — Выполняет сброс шины, необходимо перед связью с датчиком;

select(addressArray) — Выполняет выбор устройства после сброса, передается ROM Код устройства;

write(byte) — Передает информационный байт на устройство;

write(byte,1) — Передает информационный байт на устройство, работающее в паразитном режиме питания;

read() — Считывает информационный байт с устройства;

crc8(dataArray,length) — Вычисляет CRC код байтов из массива dataArray длиной length.

Порядок взаимодействия с DS18B20 для получения информации о температуре:

— Посылаем импульс сброса и принимаем ответ термометра.

— Посылаем команду Skip ROM .

— Посылаем команду Convert T .

— Формируем задержку минимум 750мс.

— Посылаем импульс сброса и принимаем ответ термометра.

— Посылаем команду Skip ROM .

— Посылаем команду Read Scratchpad .

— Читаем данные из промежуточного ОЗУ (8 байт) и CRC.

— Проверяем CRC, и если данные считаны верно, вычисляем температуру.

При этом происходит следующее:

1) МК генерирует сигнала reset, удерживая шину 1-wire в состоянии лог. 0 в течении 480 мкс.

2) Ждем не менее 15 мкс, но не более 60 мкс. За это время подтягивающий резистор поднимает уровень на шине до лог. 1.

3) Датчик удерживает шину в состоянии лог. 1 в течении не менее 60 микросекунд. Если за это время шина не сменит свое состояние на лог. 0, то значит на шине ошибка либо датчик нерабочий (это помогает выявить неисправный датчик).

Короче, здесь всё достаточно мудрено. Чтобы не париться, используем готовую библиотеку DallasTemperature, либо код, что я привел выше.

Извлечение кристалла DS18B20 из корпуса

В коллаже на Рисунке 2 показаны фотографии крситаллов микросхем DS18B20 всех семейств, с которыми автор столкнулся в 2019 г. Все фотографии имеют одинаковый масштаб, приблизительно 1.4 мм в ширину. Корпус датчика вскрывался с помощью кусачек (пассатижей), матрица извлекалась из пластикового корпуса путем кипячения в канифоли эпоксидной смолы и затем отмывалась ацетоном в ультразвуковой ванне.

Рисунок 2. Кристаллы (матрицы) датчиков DS18B20 по указанным семействам, извлеченные из корпуса.

Семейство A1 – это подлинный датчик DS18B20 производства Maxim Integrated (ревизия кристалла С4). Все остальные семейства – клоны

Обратите внимание на сходство между кристаллами семейств D1 и В1 (в соответствии с их сходством в программной части) и значительные различия между семействами B1 и B2 (в отличие от их сходства в программной части)

В своей статье автор дополнительно приводит множество примеров соответствия приобретенных датчиков DS18B20 указанным семействам.

Wiring Arduino and DS18B20

The wiring, this is the beauty of a 1-wire interface, is super simple.

The GND pin of the DS18B20 goes to GND on the Arduino.
The Vdd pin of the DS18B20 goes to +5V on the Arduino.
The Data pin of the DS18B20 goes to a (digital) pin of your choice on the Arduino, in this example I used Pin 2.

The only thing we need to add is a pull-up resistor of 4.7 KΩ. I have seen ther values, but it seems this is the most commonly used value.

The wiring presented below is the regular way of wiring the DS18B20 with your Arduino.

 Make sure that you very line 10 and line 65 in the Sketch below to match your data pin and power mode!

DS18B20 and Arduino wiring

Below a picture of my test setup … it’s really easy.

Arduino and DS28B20 setup is super simple …

Parasite Power vs Regular Power

The alternative wiring is called “Parasite” mode, where we do NOT connect the +5V to the Vdd pin of the DS18B20.
Instead we connect Vdd of the DS18B20 to GND. The advantage being obvious: you only need 2 wires.

The downside of parasite mode is that you should limit the number of sensors and the wires should not be too long!
In the end, I’m not sure what to think of the Parasite mode, as I’d like to use this when the sensors are far away from the Arduino, but on the other hand this mode is not very suitable for that. Up to you which you prefer.

 Plenty of strange results have been report when using Parasite mode. Therefor I cannot recommend Parasite mode for a reliable setup.

Исходный код программы

Полный код программы представлен в конце статьи, здесь же сначала рассмотрим его наиболее важные фрагменты.

Для выполнения математических операций в программе мы должны подключить заголовочный файл библиотеки “#include <math.h>”, а для работы с ЖК дисплеем – подключить библиотеку “#include <LiquidCrystal.h>». Далее в функции setup() мы должны инициализировать ЖК дисплей.

Arduino

Void setup(){
lcd.begin(16,2);
lcd.clear();
}

1
2
3
4

Voidsetup(){

lcd.begin(16,2);

lcd.clear();

}

Значение температуры мы будем рассчитывать в программе с помощью рассмотренного выше уравнения Стейнхарта-Харта.

Arduino

float a = 1.009249522e-03, b = 2.378405444e-04, c = 2.019202697e-07;
float T,logRt,Tf,Tc;
float Thermistor(int Vo) {
logRt = log(10000.0*((1024.0/Vo-1)));
T = (1.0 / (A + B*logRt + C*logRt*logRt*logRt));// рассчитываем значение температуры в кельвинах по формуле Stein-Hart
Tc = T — 273.15; // переводим температуру из кельвинов в градусы Цельсия
Tf = (Tc * 1.8) + 32.0; // переводим температуру в шкалу Фаренгейта
return T;
}

1
2
3
4
5
6
7
8
9

floata=1.009249522e-03,b=2.378405444e-04,c=2.019202697e-07;

floatT,logRt,Tf,Tc;

floatThermistor(intVo){

logRt=log(10000.0*((1024.0Vo-1)));

T=(1.0(A+B*logRt+C*logRt*logRt*logRt));// рассчитываем значение температуры в кельвинах по формуле Stein-Hart

Tc=T-273.15;// переводим температуру из кельвинов в градусы Цельсия

Tf=(Tc*1.8)+32.0;// переводим температуру в шкалу Фаренгейта

returnT;

}

Также в программе мы считываем значение с аналогового входа платы Arduino.

Arduino

lcd.print((Thermistor(analogRead(0))));

1 lcd.print((Thermistor(analogRead())));

Внешний вид работы нашего проекта показан на следующем рисунке – на ЖК дисплее выводятся значения температуры в кельвинах, градусах Цельсия и по шкале Фаренгейта.

Схему можно запитать по кабелю USB или использовать адаптер на 12 В.

Далее представлен полный текст программы.

Arduino

#include <math.h>
#include «LiquidCrystal.h»
LiquidCrystal lcd(44,46,40,52,50,48);
float A = 1.009249522e-03, B = 2.378405444e-04, C = 2.019202697e-07;
float T,logRt,Tf,Tc;
float Thermistor(int Vo) { // функция для расчета значения температуры
logRt = log(10000.0*((1024.0/Vo-1)));
T = (1.0 / (A + B*logRt + C*logRt*logRt*logRt)); // рассчитываем значение температуры в кельвинах по формуле Стейнхарта-Харта
Tc = T — 273.15; // переводим температуру из кельвинов в градусы
Tf = (Tc * 1.8) + 32.0; // переводим температуру в шкалу Фаренгейта
return T;
}
void setup(){
lcd.begin(16,2);
lcd.clear();
}
void loop()
{
lcd.setCursor(0,0);
lcd.print(«Temp:»);
lcd.print((Thermistor(analogRead(0))));
lcd.print(«k «);

lcd.setCursor(0,1);
lcd.print((Tc));
lcd.print(» C ;»);
lcd.setCursor(9,1);
lcd.print((Tf));
lcd.print(» F»);
delay(800);
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

#include <math.h>
#include «LiquidCrystal.h»

LiquidCrystallcd(44,46,40,52,50,48);

floatA=1.009249522e-03,B=2.378405444e-04,C=2.019202697e-07;

floatT,logRt,Tf,Tc;

floatThermistor(intVo){// функция для расчета значения температуры

logRt=log(10000.0*((1024.0Vo-1)));

T=(1.0(A+B*logRt+C*logRt*logRt*logRt));// рассчитываем значение температуры в кельвинах по формуле Стейнхарта-Харта

Tc=T-273.15;// переводим температуру из кельвинов в градусы

Tf=(Tc*1.8)+32.0;// переводим температуру в шкалу Фаренгейта

returnT;

}

voidsetup(){

lcd.begin(16,2);

lcd.clear();

}

voidloop()

{

lcd.setCursor(,);

lcd.print(«Temp:»);

lcd.print((Thermistor(analogRead())));

lcd.print(«k «);

lcd.setCursor(,1);

lcd.print((Tc));

lcd.print(» C ;»);

lcd.setCursor(9,1);

lcd.print((Tf));

lcd.print(» F»);

delay(800);

}

Принцип работы датчика

Блок управления автомобилем отправляет регулируемое напряжение (9-вольтовое) непосредственно в датчик указателя температуры охлаждающей жидкости. В зависимости от падения вольтажа на контактах сигнализатора, будет падать сопротивление, что сразу же зафиксирует блок управления.

В таком случае, автомобильная компьютерная или механическая система сможет вычислить температуру двигателя, а затем (используя данные других приборов) применить справочные таблицы для выполнения корректировки приводов двигателя, т.е. изменить уровень и поступления топлива или угол опережения зажигания.

Описание датчика DS18B20 для Arduino

DS18B20 – это цифровой температурный датчик, обладающий множеством полезных функций. По сути, DS18B20 – это целый микроконтроллер, который может хранить значение измерений, сигнализировать о выходе температуры за установленные границы (сами границы мы можем устанавливать и менять), менять точность измерений, способ взаимодействия с контроллером и многое другое. Все это в очень небольшом корпусе, который, к тому же, доступен в водонепроницаемом исполнении.

Микросхема имеет три выхода, из которых для данных используется только один, два остальных – это земля и питание. Число проводов можно сократить до двух, если использовать схему с паразитным питанием и соединить Vdd с землей. К одному проводу с данными можно подключить сразу несколько датчиков DS18B20 и в плате Ардуино будет задействован всего один пин.

Особенности цифрового датчика DS18B20

Погрешность измерения не больше 0,5 С (для температур от -10С до +85С), что позволяет точно определить значение температуры. Не требуется дополнительная калибровка.
Температурный диапазон измерений лежит в пределах от -55 С до +125 С.
Датчик питается напряжением от 3,3В до 5В.
Можно программно задать максимальную разрешающую способность до 0,0625С, наибольшее разрешение 12 бит.
Присутствует функция тревожного сигнала.
Каждое устройство обладает своим уникальным серийным кодом.
Не требуются дополнительные внешние элементы.
Можно подключить сразу до 127 датчиков к одной линии связи.
Информация передается по протоколу 1-Wire.
Для присоединения к микроконтроллеру нужны только 3 провода.
Существует так называемый режим паразитного питания – в нем происходит питание напрямую от линии связи. Для подключения в этом случае нужны только 2 провода

Важно, что в этом режиме не гарантируется корректная работа при температурах выше 100С. Режим паразитного питания удобно обычно применяется для приложений с удаленным температурным датчиком.

Память датчика состоит из двух видов: оперативной и энергонезависимой – SRAM и EEPROM. В последнюю записываются регистры конфигурации и регистры TH, TL, которые могут использоваться как регистры общего назначения, если не используются для указания диапазона допустимых значений температуры.

Основной задачей DS18B20 является определение температуры и преобразование полученного результата в цифровой вид. Мы можем самостоятельно задать необходимое разрешение, установив количество бит точности – 9, 10, 11 и 12. В этих случаях разрешающие способности будут соответственно равны 0,5С, 0,25С, 0,125С и 0,0625С.

Во время включения питания датчик находится в состоянии покоя. Для начала измерения контроллер Ардуино выполняет команду «преобразование температуры». Полученный результат сохранится в 2 байтах регистра температуры, после чего датчик вернется в первоначальное состояние покоя. Если схема подключена в режиме внешнего питания, микроконтроллер регулирует состояние конвертации. Во время выполнения команды линия находится в низком состоянии, после окончания программы линия переходит в высокое состояние. Такой метод не допустим при питании от паразитной емкости, так как на шине постоянно должен сохраняться высокий уровень сигнала.

Полученные температурные измерения сохраняются в SRAM датчика. 1 и 2 байты сохраняют полученное значение температуры, 3 и 4 сохраняют пределы измерения, 5 и 6 зарезервированы, 7 и 8 используются для высокоточного определения температуры, последний 9 байт хранит устойчивый к помехам CRC код.

Схема подключения двух и более датчиков температуры DS18B20 к одной плате Ардуино

Хорошая новость заключается в том, что к шине 1-wire можно подключать несколько датчиков, не обязательно одних и тех же. В этом случае шина должна быть подтянута одним резистором.

Датчик температуры в Arduino – один из самых распространенных видов сенсоров. Разработчику проектов с термометрами на Arduino доступно множество разных вариантов, отличающихся по принципу действия, точности, конструктивному исполнению. Цифровой датчик DS18B20 является одним из наиболее популярных температурных датчиков, часто он используется в водонепроницаемом корпусе для измерения температуры воды или других жидкостей. В этой статье вы найдете описание датчика ds18b20 на русском, мы вместе рассмотрим особенности подключения к ардуино, принцип работы датчика, описание библиотек и скетчей.

Что представляет собой DS18B20?

Dallas DS18B20 – это цифровой датчик измерения температуры, оснащенный микроконтроллером, способный запоминать изменения в памяти, оповещать о нарушении температурных рамок(которые можно регулировать), изменять точность замеров, взаимодействовать с основным контроллером Arduino. DS18B20 выполнен в миниатюрном корпусе, в трех различных модификациях, одна из которых позволяет измерять температуры в жидкостях.

Датчик подключается через 3 выхода:

  1. Первый – питание VDD (красный).
  2. Второй – данные DQ (желтый или другой цвет).
  3. Третий – земля GND (черный).

Из-за возможности реализации схемы с фантомным питанием, можно подключить датчик через два провода: DQ и VDD. Но по-хорошему, лучше подобного подключения избегать. Также, к основной плате Arduino можно подключить на один пин выходы DQ с двух сенсоров.

Виды датчика:

  1. 8-Pin SO (150 mils) — DS18B20Z+
  2. 8-Pin µSOP — DS18B20U+
  3. 3-Pin TO-92 — DS18B20+

Третий можно использовать без дополнительных средств защиты для измерения температур в морозильной камере, бойлере, инкубаторе, бассейне и в других областях применения.

На рисунке изображен даллас DS18B20+ в герметичном корпусе

Характеристики:

  1. Диапазон измерения температур -55 °С до +125 °С.
  2. Погрешность максимум 0,5 °C, без дополнительной калибровки при t от -10 °С до +85° С).
  3. Питание 3,3-5 В.
  4. Для соединения с Arduino UNO необходимо 3 контакта.
  5. К одной линии связи доступно подключение вплоть до ста двадцати семи датчиков, потому как датчик содержит собственный 64-битный код в постоянной памяти.
  6. Каждый датчик имеет персонализированный серийный номер.
  7. Протокол 1-Wire используется для передачи информации.
  8. Доступно подключение через два провода напрямую к линии связи по схеме фантомного питания. Но такой режим не рекомендуется использовать при температурах от 100° С, так как нет гарантий правильных замеров в таких условиях.
  9. Два вида памяти — статическая память с произвольным доступом или полупроводниковая оперативная память (SRAM) и энергонезависимая память EEPROM.
  10. В EEPROM записываются два однобайтовых регистра контроля TH, TL, по которым можно верхний и нижний предел диапазона температур.

Применение

DS18B20 замеряет температуру и передает данные в цифровом виде. При этом, можно настроить нужно разрешение, выставив количество бит точности, тем самым подогнав под определенный параметр разрешающую способность:

  • 9 бит – 0,5С;
  • 10 бит — 0,25С;
  • 11 бит — 0,125С;
  • 12 бит — 0,0625С.

Порядок работы датчика:

  1. При подключении источника питания, DS18B20 будет находится в начальном состоянии.
  2. Затем, подается команда «преобразование температуры» на Arduino UNO для замера t.
  3. Результат, полученный от датчика, сохранит свое значение в двух байтах регистра t, а сам элемент схемы вернется с начальное состояние.
  4. При работе схемы через внешнее питание, микроконтроллер регулирует состояние конвертации.
  5. При выполнении команды линия находится в низком состоянии, а закончив – переходит в высокое.

Это работает со стандартной схемой подключения, так как на шину должен постоянно поступать высокий уровень сигнала. Поэтому, при соединении по схеме паразитного питания выше описанный метод не сработает.

В оперативную память сохраняются:

  • 1-2 байты – данные измеряемой температуры;
  • 3-4 байты – пределы изменения t;
  • 5-6 байты – резерв;
  • 7-8 байты – нужны для точных замеров t;
  • 9 байт — циклический избыточный код, устойчивый к помехам;

Программа

Программа передатчика

Сперва рассмотрим программу передающей части:

Для передачи влажности и температуры в одном сообщении я соединяю их вместе. Сначала данные считываются в переменную как целые числа, потом целые числа преобразовываются в массив символов, а затем они соединяются друг с другом. На приемной стороне данные будут разделены на отдельные символы. Делая это, я ограничиваю себя двумя цифрами градусов. Если датчик находится в среде с температурой менее 10°C, я буду получать на дисплее символы мусора. Например, если температура составляет 20°C, а влажность – 45%, то будет передаваться сообщение 2045, и всё хорошо. Если температура равна 9°C, а влажность – 78%, то передастся сообщение 978x, где «x» – случайный символ. Поэтому, если вы будете собирать данный беспроводной термометр, я советую вам изменить программу для передачи правильных данных, когда температура будет меньше 10°C.

Программа приемника

Интересный способ использования библиотеки LiquidCrystal – это создание пользовательских символов. С помощью я создал символ градусов. Таким же способом вы можете создать и свои собственные символы. Чтобы создать пользовательский символ или значок, вам необходимо объявить его, как массив из восьми байт, и «нарисовать», какие пиксели будут включены (1 – включен, 0 – выключен).

В функции вы создаете его с помощью . принимает два аргумента: номер позиции для хранения символа и массив байт, в котором определено, какие пиксели будут отображаться. В нашем случае это . Затем символ выводится на LCD с помощью функции .