from machine import Pin
import utime, dht
COMMON_ANODE = False
DHT_PIN = 15
BUTTON_PIN = 14
DP_POSITION = 2
segments = [Pin(i, Pin.OUT) for i in range(2, 10)]
positions = [Pin(i, Pin.OUT) for i in range(10, 14)]
button = Pin(BUTTON_PIN, Pin.IN, Pin.PULL_UP)
nums = [
[0,0,0,0,0,0,1,1],
[1,0,0,1,1,1,1,1],
[0,0,1,0,0,1,0,1],
[0,0,0,0,1,1,0,1],
[1,0,0,1,1,0,0,1],
[0,1,0,0,1,0,0,1],
[0,1,0,0,0,0,0,1],
[0,0,0,1,1,1,1,1],
[0,0,0,0,0,0,0,1],
[0,0,0,0,1,0,0,1]
]
minus = [1,1,1,1,1,1,0,1]
def show_number(value, dot_pos=None, duration_ms=1000):
"""Показывает число (до 99.9), включая отрицательные."""
negative = value < 0
value = abs(value)
if value > 99.9:
value = 99.9
value = int(round(value * 10))
d0 = value % 10
d1 = (value // 10) % 10
d2 = (value // 100) % 10
d3 = (value // 1000) % 10
digits = [d3, d2, d1, d0]
start = utime.ticks_ms()
while utime.ticks_diff(utime.ticks_ms(), start) < duration_ms:
for i in range(4):
if negative and i == 0:
pattern = minus.copy()
else:
pattern = nums[digits[i]].copy()
if dot_pos is not None and i == dot_pos:
pattern[7] = 0
else:
pattern[7] = 1
for s in range(8):
val = pattern[s]
if COMMON_ANODE:
segments[s].value(0 if val else 1)
else:
segments[s].value(1 if val else 0)
if COMMON_ANODE:
positions[i].value(0)
else:
positions[i].value(1)
utime.sleep_ms(3)
if COMMON_ANODE:
positions[i].value(1)
else:
positions[i].value(0)
sensor = dht.DHT22(Pin(DHT_PIN))
mode = 0
last_press = utime.ticks_ms()
while True:
if not button.value():
if utime.ticks_diff(utime.ticks_ms(), last_press) > 300:
mode = 1 - mode
last_press = utime.ticks_ms()
try:
sensor.measure()
temp = sensor.temperature()
hum = sensor.humidity()
if mode == 0:
print(f"Температура: {temp:.1f}°C")
show_number(temp, dot_pos=DP_POSITION, duration_ms=1200)
else:
print(f"Влажность: {hum:.1f}%")
show_number(hum, dot_pos=None, duration_ms=1200)
utime.sleep(0.5)
except OSError as e:
print("Ошибка датчика:", e)
utime.sleep(2)