#8Intermediário

Efeito Knight Rider com LEDs e velocidade ajustável

4.5(60)
119 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

Arduino (C++)
1// ─────────────────────────────────────────
2//   BlueGrays · bluegrays.com
3//   Knight Rider LED Effect with Adjustable Speed
4// ─────────────────────────────────────────
5// A potentiometer sets the speed of the Knight Rider (back and forth) LED
6// effect. A0 is read at every step and its 0-1023 value becomes the delay
7// time (ms).
8//
9// Pins:
10//   D2, D3, D4, D5, D6, D7 -> 6 LEDs (in order)
11//   Each LED with a 330 ohm resistor
12//   A0 -> Potentiometer wiper
13//   (outer legs to 5V and GND)
14
15int ledPins[] = {2, 3, 4, 5, 6, 7};   // LED pins in lighting order
16int potValue;                         // Pot value = delay (ms)
17
18void setup() {
19  // Set all LED pins as outputs
20  for(int i = 0; i < 6; i++) {
21    pinMode(ledPins[i], OUTPUT);
22  }
23}
24
25void loop() {
26  // Forward: D2 to D7
27  for(int i = 0; i < 6; i++) {
28    potValue = analogRead(A0);        // Read the speed (0-1023)
29    digitalWrite(ledPins[i], HIGH);
30    delay(potValue);                  // Wait as many ms as the pot value
31    digitalWrite(ledPins[i], LOW);
32  }
33
34  // Backward: D6 to D3. The end LEDs are skipped so the bounce looks seamless
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.