#7Intermediário

Sequencial de LEDs com velocidade ajustável

4.6(72)
146 concluído
Sequencial de LEDs com velocidade ajustável
Seis LEDs acendem um após o outro, fazendo a luz parecer correr de uma ponta à outra. Ao girar o botão do potenciômetro, a velocidade muda na hora: para um lado, a luz corre rapidamente; para o outro, cada LED fica aceso por quase um segundo. Você vê com os próprios olhos como um botão pode ajustar a velocidade de algo.

Vídeo

Esquema do circuito

Sequencial de LEDs com velocidade ajustável - Circuit

Código-fonte

C++ (Arduino IDE)
1// ─────────────────────────────────────────
2//   BlueGrays · bluegrays.com
3//   Sequencial de LEDs com velocidade ajustável
4// ─────────────────────────────────────────
5// Um potenciômetro define a velocidade do efeito de LED que percorre a
6// fila. 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  for(int i = 0; i < 6; i++) {
27    potValue = analogRead(A0);        // Lê a velocidade (0-1023)
28    digitalWrite(ledPins[i], HIGH);
29    delay(potValue);                  // Espera tantos ms quanto o valor do pot
30    digitalWrite(ledPins[i], LOW);
31  }
32}
33

Perguntas frequentes

Quais valores `analogRead` retorna?

As entradas analógicas do Uno leem de 0–5 V com resolução de 10 bits e retornam um valor entre 0 e 1023. Ao girar o potenciômetro de uma ponta à outra, o valor varia de 0 a 1023.

Como convertemos a leitura do potenciômetro em velocidade?

Com a função `map()`, você pode converter a faixa de 0–1023 para o intervalo de atraso que quiser (por exemplo, 20–500 ms): `map(value, 0, 1023, 20, 500)`. Quando esse valor é usado dentro de `delay()`, a velocidade muda na hora.

Como ligar os terminais de um potenciômetro?

Os dois terminais externos são ligados a 5 V e GND, e o terminal central (cursor) é ligado a uma entrada analógica (por exemplo, A0). Se você inverter os terminais externos, apenas o sentido de ajuste será invertido; o circuito não será danificado.

Por que as mudanças de velocidade são detectadas com atraso?

Se o potenciômetro for lido apenas no início do laço, o novo valor só será aplicado depois que todos os LEDs tiverem acendido. Se você fizer a leitura no passo de cada LED, a velocidade mudará na hora.