// Definição dos pinos que serão utilizados no projeto
const int pinoPotenciometro = A0; // Pino analógico para ler o potenciômetro
const int pinoLedPwm = 9; // Pino PWM para controlar o brilho do LED
void setup() {
// Inicia a comunicação serial para podermos ver os valores no computador
Serial.begin(9600);
// Define o pino do LED como saída
pinMode(pinoLedPwm, OUTPUT);
}
void loop() {
// 1. LER O POTENCIÔMETRO
// Lê o valor bruto do potenciômetro, que vai de 0 a 1023
int valorPot = analogRead(pinoPotenciometro);
// 2. MAPEAR O VALOR PARA UM ÂNGULO (0 a 90 graus)
// A função map() converte a faixa de 0-1023 para uma faixa de 0-90
float anguloGraus = map(valorPot, 0, 1023, 0, 90);
// 3. APLICAR A LEI DE MALUS
// A função cos() no Arduino trabalha com radianos, não graus.
// Precisamos converter nosso ângulo para radianos.
float anguloRadianos = anguloGraus * (PI / 180.0);
// Calcula o cosseno ao quadrado do ângulo
float cos2 = pow(cos(anguloRadianos), 2);
// A intensidade inicial (I0) é o brilho máximo do LED (255)
// A intensidade final (I) será o brilho calculado.
// Usamos int para o valor final, pois analogWrite aceita inteiros.
int intensidadeLed = 255 * cos2;
// 4. ATUALIZAR O BRILHO DO LED
// A função analogWrite() usa PWM para definir o brilho do LED (0 a 255)
analogWrite(pinoLedPwm, intensidadeLed);
// 5. EXIBIR OS DADOS NO MONITOR SERIAL
// Isso nos ajuda a ver o que está acontecendo
Serial.print("Angulo (graus): ");
Serial.print(anguloGraus, 0); // Exibe o ângulo sem casas decimais
Serial.print(" | ");
Serial.print("Intensidade (0-255): ");
Serial.println(intensidadeLed);
// Um pequeno atraso para não sobrecarregar o monitor serial
delay(500);
}