#8Intermediário

Efeito Knight Rider com LEDs e velocidade ajustável

4.5(60)
120 concluído
Efeito Knight Rider com LEDs e velocidade ajustável
Uma luz percorre seis LEDs de uma ponta à outra, muda de direção e volta. Ao girar o botão do potenciômetro, você ajusta a velocidade na hora: em uma extremidade, a luz quase voa; na outra, avança devagar. Aqui você experimenta controlar uma animação em tempo real com um único botão.

Vídeo

Esquema do circuito

Efeito Knight Rider com LEDs e velocidade ajustável - Circuit

Código-fonte

C++ (Arduino IDE)
1// ─────────────────────────────────────────
2//   BlueGrays · bluegrays.com
3//   Efeito Knight Rider com LEDs e velocidade ajustável
4// ─────────────────────────────────────────
5// Um potenciômetro define a velocidade do efeito de LED Knight Rider (vai
6// e volta). A0 é lido a cada passo e o valor 0-1023 vira o tempo de espera
7// (ms).
8//
9// Pinos:
10//   D2, D3, D4, D5, D6, D7 -> 6 LEDs (em ordem)
11//   Cada LED com um resistor de 330 ohm
12//   A0 -> Cursor do potenciômetro
13//   (pernas externas em 5V e GND)
14
15int ledPins[] = {2, 3, 4, 5, 6, 7};   // Pinos dos LEDs na ordem de acendimento
16int potValue;                         // Valor do pot = espera (ms)
17
18void setup() {
19  // Define todos os pinos dos LEDs como saída
20  for(int i = 0; i < 6; i++) {
21    pinMode(ledPins[i], OUTPUT);
22  }
23}
24
25void loop() {
26  // Para frente: D2 a D7
27  for(int i = 0; i < 6; i++) {
28    potValue = analogRead(A0);        // Lê a velocidade (0-1023)
29    digitalWrite(ledPins[i], HIGH);
30    delay(potValue);                  // Espera tantos ms quanto o valor do pot
31    digitalWrite(ledPins[i], LOW);
32  }
33
34  // Para trás: D6 a D3. Os LEDs das pontas são pulados para o retorno parecer contínuo
35  for(int i = 4; i > 0; i--) {
36    potValue = analogRead(A0);
37    digitalWrite(ledPins[i], HIGH);
38    delay(potValue);
39    digitalWrite(ledPins[i], LOW);
40  }
41}
42

Perguntas frequentes

O que este projeto ensina de diferente dos anteriores?

Ele combina a entrada analógica (potenciômetro) com um laço nas duas direções: enquanto a luz vai e volta, o potenciômetro é lido a cada passo e o atraso é atualizado. Essa é a base para mudar o comportamento conforme o valor de um sensor.

A leitura está oscilando. Como estabilizá-la?

Pequenas oscilações nas leituras analógicas são normais. Calcular a média de várias leituras ou usar `map()` para dividir o valor em intervalos maiores (por exemplo, de 10 milissegundos) disfarça as oscilações.

Posso usar outro sensor no lugar do potenciômetro?

Sim, você pode usar um LDR, mas ele não gera uma tensão de saída sozinho. Monte um divisor de tensão com o LDR e um resistor fixo entre 5 V e GND e ligue o ponto de junção dos dois ao A0. Depois, use `map()` no código para converter a faixa medida no intervalo de atraso desejado.

Qual pino analógico devo usar?

No Uno, todos os pinos de A0 a A5 podem ser usados para leituras analógicas. Confira se o pino usado no código corresponde à conexão no circuito; como A4 e A5 também são usados para I2C, escolha A0 se pretende adicionar um display depois.