import time
from machine import Pin
import dht
import machine
inicializado = False
led1 = machine.Pin(14, machine.Pin.OUT)
def cambiar_estado(estado_actual, nuevo_estado):
global inicializado
if not inicializado:
print("Inicializado")
inicializado = True
print(f"Cambiando a estado: {nuevo_estado}")
return nuevo_estado
def disparar_canon():
global led1
print("Disparando el cañón...")
led1.on()
time.sleep(10)
led1.off()
def verificar_temperatura(sensor):
global inicializado
sensor.measure()
temperatura = sensor.temperature()
print(f"Temperatura actual: {temperatura}°C")
if temperatura >= 50:
return "apagar_dispositivo"
elif temperatura > 40:
return "enfriar_activamente"
elif temperatura > 30:
return "enfriar_pasivamente"
elif temperatura < 15: # Nueva condición para disparar si la temperatura es menor a 15 grados
return "disparar_canon"
return None
def enfriar_pasivamente(temperatura):
print("Enfriando pasivamente...")
time.sleep(3)
nueva_temperatura = temperatura - 5
print(f"Nueva temperatura después de enfriar pasivamente: {nueva_temperatura}°C")
return nueva_temperatura
def enfriar_activamente(temperatura):
print("Enfriando activamente...")
time.sleep(5)
nueva_temperatura = temperatura - 10
print(f"Nueva temperatura después de enfriar activamente: {nueva_temperatura}°C")
return nueva_temperatura
def apagar_dispositivo():
print("Apagando el dispositivo.")
exit()
def ejecutar():
global inicializado, led1
estado = "inicializar"
sensor = dht.DHT22(Pin(15))
temperatura = 25
while True:
if not inicializado:
sensor.measure()
temperatura = sensor.temperature()
inicializado = True
if estado == "inicializar":
estado = cambiar_estado(estado, "encender_chasis")
elif estado == "encender_chasis":
print("Chasis encendido. Listo para disparar.")
nuevo_estado = verificar_temperatura(sensor)
if nuevo_estado:
estado = cambiar_estado(estado, nuevo_estado)
else:
estado = "disparar_canon" if temperatura < 15 else "enfriar_pasivamente"
elif estado == "disparar_canon":
disparar_canon()
nuevo_estado = verificar_temperatura(sensor)
if nuevo_estado:
estado = cambiar_estado(estado, nuevo_estado)
else:
estado = "enfriar_pasivamente"
elif estado == "enfriar_pasivamente":
temperatura = enfriar_pasivamente(temperatura)
nuevo_estado = verificar_temperatura(sensor)
if nuevo_estado:
estado = cambiar_estado(estado, nuevo_estado)
else:
estado = "disparar_canon" if temperatura < 15 else "enfriar_activamente"
elif estado == "enfriar_activamente":
temperatura = enfriar_activamente(temperatura)
nuevo_estado = verificar_temperatura(sensor)
if nuevo_estado:
estado = cambiar_estado(estado, nuevo_estado)
else:
estado = "disparar_canon" if temperatura < 15 else "apagar_dispositivo"
elif estado == "apagar_dispositivo":
apagar_dispositivo()
# Ejecutar la máquina de estado del cañón
ejecutar()