Это старая версия документа!


Эксперимент 33. Термометр

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

Схема эксперимента

Рисунок 1. Электрическая принципиальная схема эксперимента

Добавляем подключения дисплея

Рисунок 2. Монтажная схема эксперимента

Программный код эксперимента

Exp33.ino
  1. #include <LCDI2C_Multilingual.h>
  2.  
  3. #define ACD_PIN A0
  4. #define DEFAULT_I2C_ADDR 0x3F // Или 0x27 в зависимости от твоей платы IoT
  5.  
  6. const int Bcoef = 3950;
  7. const int R1 = 10000;
  8. const int Rtnom = 10000;
  9. const float T0 = 273.15;
  10.  
  11. int value = 0;
  12. float R2 = 0.0;
  13. float temp = 0.0;
  14.  
  15. LCDI2C_Generic lcd(DEFAULT_I2C_ADDR, 16, 2);
  16.  
  17. void setup() {
  18. lcd.init();
  19. lcd.setBacklight(0);
  20. }
  21.  
  22. void loop() {
  23. value = analogRead(ACD_PIN);
  24.  
  25. R2 = (-R1 * value) / (value - 1023);
  26.  
  27. temp = 1 / (log(R2 / Rtnom) / Bcoef + 1/(25 + T0)) - T0;
  28.  
  29. lcd.clear();
  30. lcd.print("T=");
  31. lcd.print(temp, 1);
  32. delay(500);
  33. }

К предыдущей программе добавили то, что требуется для работы с дисплеем. Подключение библиотеки дисплея, настройка дисплея и включение подсветки.

Перед выводом информации очищаем дисплей от старых данных. При этом курсор дисплея устанавливается в левый верхний угол.

  1. lcd.clear()

Температуру перед выводом на экран округляем до десятых (один знак после точки):

  1. round_temp = round(temp, 1)

Формируем строку для вывода на дисплей. Она состоит из подстроки «T=» и подстроки с температурой. Оператор str() преобразует число в строку. А оператор + здесь работает не совсем так, как мы привыкли. Дело в том, что поведение этого оператора зависит от контекста. Когда он оказывается среди чисел, то это операция математического сложения. Но в данном случае оператор + оказался среди строк. В таком контексте этот оператор выполняет операцию конкатенации — склейки строк. Вот он и склеивает одну строку из двух половинок. Полученная таким образом строка передается для вывода на дисплей.

  1. lcd.putstr("T=" + str(round_temp))

Дополнительное задание

1. Измени программу, чтобы она выводила температуру с точностью до сотых.

2. Добавь символ градуса после показаний температуры. Символ градуса создай самостоятельно.