import utime
from machine import Pin, PWM, ADC
import random
# Definir o pino para o LED (um pino com suporte a PWM)
# No ESP32, praticamente todos os pinos suportam PWM.
# No Raspberry Pi Pico, apenas alguns suportam, então verifique o seu modelo.
LED_PIN = 19  # Exemplo de pino para o Raspberry Pi Pico W
# Configura o pino como um objeto PWM
led_pwm = PWM(Pin(LED_PIN))
# Define a frequência do PWM. Um valor de 1000 Hz é bom para LEDs.
led_pwm.freq(1000)
# Inicializa o pino analógico para semente de aleatoriedade
# O pino A0 no Arduino é a entrada analógica 0.
# No ESP32/Pico, é geralmente um pino como o GPIO26.
analog_pin = ADC(Pin(26))
# Inicializa o gerador de números aleatórios com a leitura do pino analógico.
# Isso garante que a sequência de números aleatórios seja diferente a cada vez que o dispositivo é ligado.
random.seed(analog_pin.read_u16())
def main():
    """
    Função principal que executa o loop de efeito de brisa.
    """
    while True:
        # Define uma velocidade de transição aleatória para este ciclo.
        # A velocidade pode variar entre 2 e 6, deixando o efeito mais natural.
        velocidade = random.randint(2, 6)
        # Define um brilho máximo aleatório para este ciclo.
        # O brilho pode variar entre 100 e 255.
        brilho_maximo = random.randint(100, 255)
        # --- Efeito de Acender (Fade In) ---
        # Aumenta o brilho do LED de 0 (desligado) para o brilho máximo aleatório.
        for brilho in range(brilho_maximo + 1):
            # Converte a escala de brilho de 0-255 para 0-65535 (escala do MicroPython PWM).
            duty = int(brilho * 257)
            led_pwm.duty_u16(duty) # Define o brilho do LED
            utime.sleep_ms(velocidade) # Pequena pausa para criar o efeito suave
        # --- Pausa no Brilho Máximo ---
        # Mantém o LED no brilho máximo por um momento.
        utime.sleep_ms(1500) # Pausa de 1.5 segundos
        # --- Efeito de Apagar (Fade Out) ---
        # Diminui o brilho do LED do brilho máximo aleatório para 0.
        for brilho in range(brilho_maximo, -1, -1):
            # Converte a escala de brilho de 0-255 para 0-65535.
            duty = int(brilho * 257)
            led_pwm.duty_u16(duty) # Define o brilho do LED
            utime.sleep_ms(velocidade) # Pequena pausa para criar o efeito suave
        # --- Pausa no Brilho Mínimo ---
        # Mantém o LED apagado por um momento. A pausa é aleatória entre 0 e 500 milissegundos.
        utime.sleep_ms(random.randint(0, 500))
# Chama a função principal para iniciar o código
main()