int pinoLed = 5; // Pino onde o LED está conectado
int brilho = 0; // Nível de brilho do LED (0 a 255)
int passoBrilho = 5; // Incremento do brilho
unsigned long tempoAnterior = 0; // Armazena o tempo da última atualização
const long intervalo = 10; // Intervalo de atualização em milissegundos
void setup() {
pinMode(pinoLed, OUTPUT); // Define o pino do LED como saída
}
void loop() {
unsigned long tempoAtual = millis();
// Controle do brilho do LED por PWM em software
if (tempoAtual - tempoAnterior >= intervalo) {
tempoAnterior = tempoAtual;
brilho += passoBrilho; // Ajusta o brilho do LED
// Inverte o sentido quando atinge o máximo ou o mínimo
if (brilho <= 0 || brilho >= 255) {
passoBrilho = -passoBrilho;
}
}
// PWM em software: liga e desliga o LED conforme o brilho
escreverPwmSoftware(pinoLed, brilho);
delayMicroseconds(1000); // Ajusta a frequência PWM (1ms para 1kHz)
}
// Função de PWM em software
void escreverPwmSoftware(int pino, int cicloTrabalho) {
int tempoLigado = map(cicloTrabalho, 0, 255, 0, 1000); // Converte ciclo de trabalho para tempo ligado (em microssegundos)
int tempoDesligado = 1000 - tempoLigado; // Tempo desligado em microssegundos
digitalWrite(pino, HIGH);
delayMicroseconds(tempoLigado);
digitalWrite(pino, LOW);
delayMicroseconds(tempoDesligado);
}