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()