from machine import Pin, ADC, Timer, I2C
from time import ticks_ms, ticks_diff, sleep_ms
from ssd1306 import SSD1306_I2C
# Sensores uv - 100mV a 1250 mV
uv = (ADC(Pin(32, atten=ADC.ATTN_2_5DB)),
ADC(Pin(33, atten=ADC.ATTN_2_5DB)),
ADC(Pin(35, atten=ADC.ATTN_2_5DB)))
# TODO coolers!
# Relés lâmpadas
rele = (Pin(25, Pin.OUT, value=0),
Pin(26, Pin.OUT, value=0),
Pin(27, Pin.OUT, value=0))
# Trava e Sensor porta
trava = Pin(13, Pin.OUT, value=0)
porta = Pin(4, Pin.IN, Pin.PULL_UP)
# Encoder
bot = Pin(21, Pin.IN)
pulso = Pin(22, Pin.IN)
sens = Pin(23, Pin.IN)
# Display
i2c0 =I2C(0)
dsp = SSD1306_I2C(i2c0, width=128, height=64)
# Inicialização
cfg = {'intervalo' : 90000, # em milissegundos
'tmedicao' : 1000, # em milissegundos,
'tdisplay': 1000, # em milissegundos
'redeNome' : 'internet' , # nome da rede
'redeSenha' : 'senha' # senha da rede
} #
# TODO buscar cfg de arquivo
# TODO parte da rede e atualizacao do rtc
state = 0 # estado inicial
instante = 0 # instante da descontaminação
inicio = 0 # início da descontaminação
updDsp = 0 # última atualização do display
updDados = 0 # última atualização das medições
while True:
if state == 0: # ihm
pass
elif state == 1: # descontaminando
if ticks_diff(ticks_ms(), updDados) >= cfg['tmedicao']:
# atualiza medicao
updDados = ticks_ms()
if ticks_diff(ticks_ms(), updDsp) >= cfg['tdisplay']:
# atualiza display
updDsp = ticks_ms()
if ticks_diff(ticks_ms(), inicio) >= cfg['intervalo']:
pass # para a descontaminação, dá um tempo p o cooler, destrava a porta
elif state == 2: # erro
pass
else: # não previsto
pass
UV
Trava
Porta