06. Barra de nivel con LEDs y potenciómetro
Cinco LEDs que se encienden en cascada según giras el mando, como un vúmetro. Refuerza arrays, bucles y mapeo de rangos.
🧰 Lista de materiales
🎯 Qué vas a aprender
Manejar varios pines con elegancia usando un array y un bucle for, en lugar de repetir código. Es el patrón que escala a 8, 16 o 64 salidas.
📚 Teoría: arrays para no repetirte
Si tienes 5 LEDs, escribir digitalWrite cinco veces es tedioso y propenso a errores. Un array guarda los pines en una lista (int leds[] = {...}) y un bucle los recorre. Cambiar de 5 a 10 LEDs es entonces trivial.
La idea: mapeamos la lectura del potenciómetro (0–1023) al número de LEDs encendidos (0–5) y encendemos los primeros N.
🔌 Conexiones
| LED | Pin | Color sugerido |
|---|---|---|
| 1 | D2 | Verde |
| 2 | D3 | Verde |
| 3 | D4 | Verde |
| 4 | D5 | Amarillo |
| 5 | D6 | Rojo (tope) |
Cada LED con su resistencia de 220 Ω a GND. Potenciómetro: extremos a GND/5 V, cursor a A0.
💻 Código completo
// Barra de nivel (VU) con 5 LEDs
const int leds[] = {2, 3, 4, 5, 6};
const int N = 5;
const int PIN_POT = A0;
void setup() {
for (int i = 0; i < N; i++) pinMode(leds[i], OUTPUT);
}
void loop() {
int lectura = analogRead(PIN_POT);
int nivel = map(lectura, 0, 1023, 0, N); // cuántos encender (0..5)
for (int i = 0; i < N; i++) {
digitalWrite(leds[i], i < nivel ? HIGH : LOW);
}
delay(20);
}🛠️ Montaje paso a paso
- Coloca los 5 LEDs en fila con sus resistencias a GND.
- Cablea cada ánodo a D2–D6 en orden.
- Conecta el potenciómetro (cursor a A0).
- Sube el sketch y gira: los LEDs se encienden en cascada.
🧩 Resolución de problemas
| Síntoma | Causa | Solución |
|---|---|---|
| Orden de encendido raro | Pines del array no coinciden con el cableado | Ajusta el array al cableado real |
| Nunca llega al 5º | map a 0..N-1 | Usa 0..N como en el código |
🚀 Para ir más lejos
- Alimenta la barra con la señal de un micrófono o LDR en vez del potenciómetro.
- Sustituye los LEDs por la matriz 8×8 (proyecto 15) para una barra alta.