# 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, PWM, ADC
from time import sleep
from dht import DHT22
bot_red = Pin(15,Pin.IN,Pin.PULL_UP)
bot_blue = Pin(16,Pin.IN,Pin.PULL_UP)
lr = Pin(0,Pin.OUT)
ly = Pin(5,Pin.OUT)
lb = Pin(9,Pin.OUT)
DHT = DHT22(28)
PIR = Pin(27,Pin.IN)
buzzer = PWM(22)
pot = ADC(26)
def nome_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.
lr.off()
ly.off()
lb.on()
# global medicao
pergunta_user = int(input(f"\n\nDESEJA QUE O DHT LEIA\n\n1- TEMPERATURA\n\n2- UMIDADE\n\n"))
sleep(3)
# try:
# DHT.measure()
# except:
# print(f"FALHA TECNICA")
if pergunta_user == 1:
print(f"\nTEMPERATURA: {DHT.temperature():.1f} ° C")
sleep(5)
elif pergunta_user == 2:
print(f"\nUMIDADE:{DHT.humidity():.1f} %")
sleep(5)
else:
print(f"Opcao invalida")
buzzer.freq(291)
buzzer.duty_u16(150)
sleep(2)
def nome_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.
lr.on()
ly.off()
lb.off()
valor = pot.read_u16()
print(f"POTENCIOMETRO = {valor}")
buzzer.freq(496)
buzzer.duty_u16(150)
sleep(2)
bot_blue.irq(handler = nome_funcao1, trigger = Pin.IRQ_FALLING)
bot_red.irq(handler = nome_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;
# 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.
try:
medicao = DHT.measure()
except:
print(f"FALHA TECNICA")
sleep(2)
lr.on()
ly.on()
lb.on()
if PIR.value() == 1:
print(f"PRESSIONE O BOTAO AZUL")
buzzer.freq(387)
buzzer.duty_u16(250)
sleep(2)
elif PIR.value() == 0:
print(f"PRESSIONE O BOTAO VERMELHO")
# buzzer.freq(387)
buzzer.duty_u16(0)
sleep(2)