Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Следующая версия
Предыдущая версия
products:laboratory_iot_c:exp33 [2024/11/15 19:42] – создано labuser30products:laboratory_iot_c:exp33 [2024/12/04 12:23] (текущий) – [Программный код эксперимента] labuser30
Строка 13: Строка 13:
  
 ==== Программный код эксперимента ==== ==== Программный код эксперимента ====
-<file python Exp33.py[enable_line_numbers="2", start_line_numbers_at="1"]> +<file arduino Exp33.ino[enable_line_numbers="2", start_line_numbers_at="1"]> 
-from machine import Pin, I2C +#include <LCDI2C_Multilingual.h>
-from esp8266_i2c_lcd import I2cLcd +
-import time +
-import math+
  
-_init()+#define ACD_PIN A0    
 +#define DEFAULT_I2C_ADDR 0x3F // Или 0x27 в зависимости от твоей платы IoT
  
-Bcoef = 3950 +const int Bcoef = 3950; 
-R1 = 10000 +const int R1 = 10000; 
-Rtnom = 10000 +const int Rtnom = 10000; 
-T0 = 273.15+const float T0 = 273.15;
  
-adc machine.ADC(0)+int value 0; 
 +float R2 = 0.0; 
 +float temp = 0.0;
  
 +LCDI2C_Generic lcd(DEFAULT_I2C_ADDR, 16, 2); 
  
-DEFAULT_I2C_ADDR = 0x3F # Или 0x27 в зависимости от модели микросхемы на плате +void setup() { 
- +  lcd.init() 
- +  lcd.setBacklight(0);           
-i2c = I2C(scl=Pin(5), sda=Pin(4), freq=400000+} 
-lcd = I2cLcd(i2c, DEFAULT_I2C_ADDR, 2, 16+  
-lcd.backlight_on() +void loop() {    
- +  value = analogRead(ACD_PIN); 
- +  
-while True: +  R2 = (-R1 * value) / (value - 1023); 
-    value = adc.read() +  
- +  temp = 1 / (log(R2 / Rtnom) / Bcoef + 1/(25 + T0)) - T0; 
-    = (-R1 * value)/(value-1023) +   
- +  lcd.clear(); 
-    temp = 1 / (math.log(/ Rtnom) / Bcoef + 1/(25+T0)) -T0 +  lcd.print("T="); 
- +  lcd.print(temp, 1);  
-    round_temp = round(temp, 1) +  delay(1000);             
- +}
-    print(round_temp) +
-     +
-    lcd.clear() +
-    lcd.putstr("T=" + str(round_temp)+
-    time.sleep(3)+
 </file> </file>
  
-К предыдущей программе добавили то, что требуется для работы с дисплеем. Подключение библиотеки дисплея, настройка дисплея и шины I2C, включение подсветки дисплея.+К предыдущей программе добавили то, что требуется для работы с дисплеем. Подключение библиотеки дисплея, настройка дисплея и включение подсветки.
  
-Температуру перед выводом на экран округляем до десятых дин знак после точки): +Перед выводом информации очищаем дисплей от старых данных. При этом курсор дисплея устанавливается в левый верхний угол. 
-<code python[enable_line_numbers="2", start_line_numbers_at="31"]> +<code arduino[enable_line_numbers="2", start_line_numbers_at="29"]> 
-    round_temp = round(temp, 1)+  lcd.clear()
 </code> </code>
  
-Перед выводом информации очищем дисплей от старых данных. При этом курсор дисплея устанавливается в левый верхний угол.+Печатаем на дисплей "T=": 
 +<code arduino[enable_line_numbers="2", start_line_numbers_at="30"]> 
 +  lcd.print("T="); 
 +</code>
  
-<code python[enable_line_numbers="2", start_line_numbers_at="35"]> +Далее выводим на дисплей температуру округляя ее до десятых (один знак после точки). За количество цифр после запятой отвечает второй аргумент функции ''lcd.print()''.  
-    lcd.clear()+ 
 +<code arduino[enable_line_numbers="2", start_line_numbers_at="31"]> 
 +  lcd.print(temp, 1);
 </code> </code>
  
-Формируем строку для вывода на дисплей. Она состоит из подстроки ''"T="'' и подстроки с температурой. Оператор ''str()'' преобразует число в строку. А оператор ''+'' здесь работает не совсем так, как мы привыкли. Дело в том, что поведение этого оператора зависит от //контекста//. Когда он оказывается среди чисел, то это операция математического сложения. Но в данном случае оператор ''+'' оказался среди строк. В таком контексте этот оператор выполняет операцию //конкатенации// — склейки строк. Вот он и склеивает одну строку из двух половинок. Полученная таким образом строка передается для вывода на дисплей. +Устанавливаем частоту обновления температуры на дисплее с помощью задержки — раз в полсекунды. 
- +<code arduino[enable_line_numbers="2", start_line_numbers_at="32"]> 
-<code python[enable_line_numbers="2", start_line_numbers_at="36"]> +  delay(500)
-    lcd.putstr("T=" + str(round_temp))+
 </code> </code>
  
Строка 76: Строка 76:
 1. Измени программу, чтобы она выводила температуру с точностью до сотых. 1. Измени программу, чтобы она выводила температуру с точностью до сотых.
  
-2. Добавь символ градуса после показаний температуры. Символ градуса [[products:laboratory_iot:exp30|создай самостоятельно]].+2. Добавь символ градуса после показаний температуры. Символ градуса [[products:laboratory_iot_c:exp30|создай самостоятельно]].
 </WRAP> </WRAP>