from machine import Pin, ADC
import utime
# ============================================================
# CONFIGURACIÓN DE HARDWARE
# ============================================================
boton = Pin(2, Pin.IN, Pin.PULL_DOWN) # Entrada digital
pot = ADC(26) # Entrada analógica (0 - 65535)
led_verde = Pin(0, Pin.OUT) # LED verde (antes motor)
led_rojo = Pin(1, Pin.OUT) # LED rojo adicional
# ============================================================
# VARIABLES INTERNAS DEL SISTEMA (MEMORIA)
# ============================================================
toggle_memoria = False # Memoria biestable tipo toggle
estado_anterior_boton = 0 # Para detectar flanco ascendente
# ============================================================
# BUCLE PRINCIPAL → ENTRADA → PROCESO → SALIDA
# ============================================================
while True:
# ========================================================
# 1. ENTRADAS
# ========================================================
entrada_digital = boton.value()
entrada_analogica = pot.read_u16()
# Detección de flanco ascendente
flanco_subida = (entrada_digital == 1 and estado_anterior_boton == 0)
estado_anterior_boton = entrada_digital
# ========================================================
# 2. PROCESAMIENTO
# ========================================================
# --- MEMORIA TOGGLE ---
if flanco_subida:
toggle_memoria = not toggle_memoria
# --- CONVERSIÓN DE ADC A PORCENTAJE (0–100%) ---
porcentaje_adc = (entrada_analogica / 65535) * 100
# --- LÓGICA DE DECISIÓN ---
# LED VERDE: 0% a 50%
# LED ROJO : 51% a 100%
if toggle_memoria: # La memoria controla si el sistema funciona o no
if porcentaje_adc <= 50:
salida_verde = True
salida_rojo = False
else:
salida_verde = False
salida_rojo = True
else:
# Si el toggle está apagado, ambos LEDs apagados
salida_verde = False
salida_rojo = False
# ========================================================
# 3. SALIDAS
# ========================================================
led_verde.value(salida_verde)
led_rojo.value(salida_rojo)
# ========================================================
# 4. SUPERVISIÓN EN CONSOLA
# ========================================================
print("===== CICLO DE CONTROL =====")
print("Botón Digital :", entrada_digital)
print("Valores ADC (0-65535):", entrada_analogica)
print("Porcentaje ADC :", round(porcentaje_adc, 2), "%")
print("Memoria Toggle :", toggle_memoria)
print("LED Verde (0–50%) :", salida_verde)
print("LED Rojo (51–100%) :", salida_rojo)
print("============================\n")
utime.sleep(0.1) # tiempo del ciclo continuo