# Construa um circuito composto de dois botões (vermelho e azul),
# três LEDs (vermelho, amarelo e azul) com respectivos resistores,
# um DHT, um PIR, um buzzer e um potenciômetro.
# O botão deve ser conectado ao resistor interno da raspberry em pull up.
# Depois de construir seu circuito, programe-o para que:
# AO INICIAR E ANTES DE EXECUTAR QUALQUER INTERRUPÇÃO, o circuito:
# Coloca o DHT em modo de leitura;
# Acende os três leds.
# Ativa o PIR e, em caso de detectar movimento, imprime na tela a mensagem: "Pressione o botão azul"
# e ativa o buzzer emitindo som na frequência 387, nível 250.
# Caso não detecte movimento,
# imprime a mensagem "Pressione o botão vermelho" e mantém o buzzer em silêncio.
# AO PRESSIONAR O BOTÃO AZUL, ATIVA-SE UMA INTERRUPÇÃO QUE:
# Mantém o led azul aceso e apaga os demais;
# Pergunta ao usuário se ele deseja ler a temperatura OU a umidade. Caso o usuário escolha temperatura, faça com que o DHT leia a temperatura e em seguida, imprima-a na tela. Caso o usuário escolha umidade, faça com que o DHT leia a umidade e, em seguida, imprima-a na tela;
# Ativa o buzzer na frequência 291 Hz, nível do som em 150.
# Aguarda 2 segundos.
# AO PRESSIONAR O BOTÃO VERMELHO, ATIVA-SE UMA INTERRUPÇÃO QUE:
# Mantém o led vermelho aceso e apaga os demais.;
# Lê o potenciômetro e imprime sua leitura na tela;
# Ativa o buzzer na frequência 496 Hz, nível do som em 150.
# Aguarda 2 segundos.
# Observação:
# Dois ou mais leds não acendem ao mesmo tempo, exceto quando indicado.
# Utilize temporização.
from machine import Pin,ADC,PWM
from dht import DHT22
from time import sleep
led_red = Pin(0,Pin.OUT)
led_yellow = Pin(5,Pin.OUT)
led_blue = Pin(9,Pin.OUT)
bot_red = Pin(11,Pin.IN,Pin.PULL_UP)
bot_blue = Pin(16,Pin.IN,Pin.PULL_UP)
sensor_temp = DHT22(28)
PIR = Pin(26,Pin.IN)
pot = ADC(27)
buzzer = PWM(20)
def nome_da_funcao1(args):
# AO PRESSIONAR O BOTÃO AZUL, ATIVA-SE UMA INTERRUPÇÃO QUE:
# Mantém o led azul aceso e apaga os demais;
# Pergunta ao usuário se ele deseja ler a temperatura OU a umidade. Caso o usuário escolha temperatura, faça com que o DHT leia a temperatura e em seguida, imprima-a na tela. Caso o usuário escolha umidade, faça com que o DHT leia a umidade e, em seguida, imprima-a na tela;
# Ativa o buzzer na frequência 291 Hz, nível do som em 150.
# Aguarda 2 segundos.
led_red.off()
led_yellow.off()
led_blue.on()
pergunta_usuario = int(input(f"\n\nDESEJA AFERIR QUAL MEDIDA:\n\n1- TEMPERATURA\n2- UMIDADE:\n"))
if pergunta_usuario == 1:
print(f"\nT = {_temp.temperature()}°C")
elif pergunta_usuario == 2:
print(f"\nU = {sensor_temp.humidity()}%")
# else:
# print(f"RESPOSTA INVALIDA")
buzzer.duty_u16(150)
buzzer.freq(291)
sleep(2)
def nome_da_funcao2(args):
# AO PRESSIONAR O BOTÃO VERMELHO, ATIVA-SE UMA INTERRUPÇÃO QUE:
# Mantém o led vermelho aceso e apaga os demais.;
# Lê o potenciômetro e imprime sua leitura na tela;
# Ativa o buzzer na frequência 496 Hz, nível do som em 150.
# Aguarda 2 segundos.
led_red.on()
led_yellow.off()
led_blue.off()
valor = pot.read_u16()
print(valor)
buzzer.duty_u16(150)
buzzer.freq(496)
sleep(2)
bot_blue.irq(handler = nome_da_funcao1, trigger = Pin.IRQ_FALLING)
bot_red.irq(handler = nome_da_funcao2, trigger = Pin.IRQ_FALLING)
while True:
# AO INICIAR E ANTES DE EXECUTAR QUALQUER INTERRUPÇÃO, o circuito:
# Coloca o DHT em modo de leitura; OK
# Acende os três leds. OK
# Ativa o PIR e, em caso de detectar movimento, imprime na tela a mensagem: "Pressione o botão azul"
# e ativa o buzzer emitindo som na frequência 387, nível 250. OK
# Caso não detecte movimento,
# imprime a mensagem "Pressione o botão vermelho" e mantém o buzzer em silêncio. OK
try:
sensor_temp.measure()
except:
print(f"FALHA TECNICA")
led_red.on()
led_yellow.on()
led_blue.on()
if PIR.value() == 1:
print(f"Pressione o botão azul")
buzzer.duty_u16(250)
buzzer.freq(387)
sleep(5)
elif PIR.value() == 0:
print("Pressione o botão vermelho")
buzzer.duty_u16(0)
sleep(5)