#5Intermediário

Sequencial de LEDs

4.6(85)
206 concluído
Sequencial de LEDs
Luzes que acendem uma após a outra, como se estivessem correndo. O Arduino acende seis LEDs, um de cada vez; cada um brilha por um instante e apaga, fazendo a luz percorrer a sequência do início ao fim e recomeçar. Neste projeto fácil, você aprende a controlar várias luzes com um único padrão simples.

Vídeo

Esquema do circuito

Sequencial de LEDs - Circuit

Código-fonte

Arduino (C++)
1// ─────────────────────────────────────────
2//   BlueGrays · bluegrays.com
3//   LED Chaser
4// ─────────────────────────────────────────
5// The 6 LEDs light up one after another for 150 ms each, so the light
6// walks along the row. Shows multi-pin control with an array and a for
7// loop.
8//
9// Pins:
10//   D2, D3, D4, D5, D6, D7 -> 6 LEDs (in order)
11//   Each LED with a 330 ohm resistor
12
13int ledPins[] = {2, 3, 4, 5, 6, 7};   // LED pins in lighting order
14
15void setup() {
16  // Set all LED pins as outputs
17  for(int i = 0; i < 6; i++) {
18    pinMode(ledPins[i], OUTPUT);
19  }
20}
21
22void loop() {
23  // Light each LED in turn for 150 ms
24  for(int i = 0; i < 6; i++) {
25    digitalWrite(ledPins[i], HIGH);
26    delay(150);
27    digitalWrite(ledPins[i], LOW);
28  }
29}
30

Perguntas frequentes

Por que é melhor usar um array?▾

Ao guardar os números dos pinos em um array, você pode percorrer todos os LEDs com um laço for em uma única linha de código. Para mudar o número de LEDs neste código, atualize tanto o array ledPins quanto os limites i < 6 dos laços em setup() e loop(); não é preciso escrever uma linha separada para cada LED.

Se 6 LEDs acenderem ao mesmo tempo, o Arduino será danificado?▾

Considerando cerca de 10 mA por LED, seis LEDs consomem aproximadamente 60 mA. O limite superior recomendado por pino é 20 mA; é preciso respeitar tanto os limites de corrente de cada pino quanto os dos grupos de pinos. O valor máximo absoluto de 200 mA especificado para os pinos VCC/GND do ATmega328P não é uma meta de operação normal nem uma corrente disponível exclusivamente para I/O.

Como inverto a direção do movimento?▾

Configure o laço `for` em ordem inversa: `for (int i = 5; i >= 0; i--)`. Assim, a luz se move na direção oposta. Se você colocar os dois laços um após o outro, terá o efeito Knight Rider.

Um dos LEDs não acende. Qual pode ser o motivo?▾

O LED pode estar invertido, com um terminal mal encaixado na protoboard ou com o resistor em outra linha. Você pode descobrir se o LED está com defeito ou se há um problema na conexão colocando-o no lugar de um LED que funciona.