Fundamentos · 13 min de lectura

Bucles y variables en programación por bloques con Arduino

Bucles y variables en programación por bloques: repetir siempre y loop(), el bloque contar y el bucle for de Arduino, arreglos y contadores con bloques y C++.

Los bucles y las variables en la programación por bloques son las dos piezas que convierten un programa de "haz esto una vez" en "hazlo todo el rato y con cabeza". Un bucle ejecuta los mismos bloques una y otra vez, y una variable recuerda un número mientras tanto. En los bloques de BlueGrays aparecen como "repetir siempre", "contar con i", "variables globales (al principio)" y "establecer … a"; en el código de Arduino que se carga en la placa, sus equivalentes son loop(), el bucle for, una variable int y una línea de asignación.

Este artículo es la parte 4 de la serie De los bloques al código. En la parte anterior comparamos el botón y el bloque si con if/else; en la siguiente veremos cómo leer sensores con bloques y pasar a MicroPython en la Pico.

En esta parte leeremos los bloques de cuatro proyectos gratuitos junto a su código C++ real: Luz secuencial LED, que enciende seis LED uno tras otro; Luz secuencial LED con velocidad regulable, que toma la velocidad de un potenciómetro; Efecto coche fantástico con LED, que lleva la luz de un extremo al otro y la trae de vuelta; y su versión con potenciómetro, Efecto coche fantástico con velocidad regulable. Los cuatro usan el mismo circuito: seis LED en los pines D2–D7 y un potenciómetro en A0. Al final escribirás tu propio ejemplo de contador y verás uno por uno los tres errores más habituales de quien empieza: contar uno de más o de menos, salirse del arreglo y las esperas largas que dejan ciegos a los botones.

El bloque "repetir siempre" y loop(): ¿por qué la placa nunca se detiene?

Un programa del ordenador se cierra cuando termina su trabajo; un programa de Arduino no. La placa no tiene sistema operativo y el procesador no tiene otra cosa que hacer. Por eso todos los proyectos con bloques tienen el mismo esqueleto: lo que va dentro de "configuración (una vez)" se ejecuta una sola vez al dar corriente a la placa o pulsar el botón de reset, y lo que va dentro de "repetir siempre" se repite de arriba abajo sin parar. En C++ son las funciones setup() y loop(). Cuando termina la última línea de loop(), la placa vuelve enseguida a la primera; un loop() corto y sin esperas puede ejecutarse decenas de miles de veces por segundo. La única forma de pararla es quitarle la corriente o cargar otro programa. Esta repetición infinita no es un fallo, es el diseño: leer un botón, vigilar un sensor o encender un LED se hace de nuevo en cada vuelta, y así la placa responde siempre a lo que cambia a su alrededor.

BloqueEquivalente en C++¿Cuándo se ejecuta?
variables globales (al principio)las líneas encima de setup()Una vez al arrancar el programa; las variables siguen en memoria
configuración (una vez)void setup() { ... }Una vez al encender o tras un reset
repetir siemprevoid loop() { ... }Después de setup(), sin parar hasta que se corta la corriente

Variables en la programación por bloques: variables globales y el bloque declarar

Una variable es una cajita en la que guardas un número y a la que llamas por su nombre. En los bloques, las variables se crean dentro del bloque morado "variables globales (al principio)". El bloque "declarar entero (int) potValue = 0" que va dentro se convierte en la línea int potValue del código: int es el tipo, potValue el nombre y 0 el valor inicial. Lo de "al principio" importa: estas líneas van arriba del todo en el archivo, fuera de setup() y de loop(). Una variable global declarada así se ve desde cualquier parte del programa y no pierde su valor cada vez que loop() vuelve a empezar. En el Arduino Uno un int ocupa 2 bytes y guarda números enteros de -32768 a 32767, más que suficiente para el rango 0–1023 de analogRead() y para los números de pin. Quizá notes que los bloques de Luz secuencial LED con velocidad regulable dicen potValue = 0 y su código solo int potValue;. El resultado es el mismo: en C++ una variable global sin valor inicial empieza en cero.

El bloque que cambia una variable más tarde es "establecer … a". El bloque "establecer potValue a leer analógico A0" se traduce en potValue = analogRead(A0); en el código. El signo = aquí no es la igualdad de matemáticas; significa "calcula el valor de la derecha y guárdalo en la caja de la izquierda". La comparación que pregunta si dos valores son iguales se escribe con == en C++, como vimos con el bloque si en la parte anterior de la serie. Cuando el bloque establecer se ejecuta, el valor antiguo se borra y se escribe el nuevo. Todos los bloques que leen la variable usan desde ese momento el nuevo valor: "esperar potValue ms" espera tantos milisegundos como valga potValue en ese instante.

El bucle de conteo: el bloque "contar con i" y el bucle for de Arduino

Para repetir algo un número fijo de veces se usa el bloque verde "contar con i desde 0 hasta 5 de a 1". Crea un contador llamado i, le da el valor 0, ejecuta los bloques de dentro, suma 1 a i, los vuelve a ejecutar y sigue así hasta que i pasa de 5. Su equivalente en Arduino es la línea for (int i = 0; i < 6; i++). Dentro del paréntesis hay tres partes separadas por punto y coma: el inicio (int i = 0), la condición para seguir (i < 6) y el paso tras cada vuelta (i++, es decir, sumar uno a i). Lo más importante: el valor final del bloque está incluido. "Desde 0 hasta 5" significa 0, 1, 2, 3, 4 y 5, así que el bucle da 6 vueltas, no 5, y cada uno de los seis LED recibe la suya. Por eso el código pone i < 6, que equivale a i <= 5. El patrón "empieza en cero y sigue mientras sea menor que el número de elementos" es muy común en Arduino porque el 6 te dice directamente cuántos LED hay.

Ajuste del bloqueC++ equivalenteValores de iVueltas
desde 0 hasta 5 de a 1for (int i = 0; i < 6; i++)0, 1, 2, 3, 4, 56
desde 0 hasta 5 de a 2for (int i = 0; i <= 5; i += 2)0, 2, 43
desde 4 hasta 1 de a 1for (int i = 4; i > 0; i--)4, 3, 2, 14
desde 1 hasta 6 de a 1for (int i = 1; i <= 6; i++)1, 2, 3, 4, 5, 66 (pero ledPins[6] no existe)

El bloque arreglo: "arreglo 2 3 4 5 6 7" y ledPins[i]

En lugar de declarar seis variables para seis LED, puedes guardarlos todos en una sola lista. Cuando el bloque morado "arreglo 2 3 4 5 6 7" se encaja en "declarar entero (int) ledPins = …", se convierte en la línea int ledPins[] = {2, 3, 4, 5, 6, 7}; del código. Los corchetes indican que es un arreglo y las llaves contienen sus valores. A cada elemento se llega por su posición, el índice, y en C++ el índice empieza en 0: el primer elemento es ledPins[0] y el último ledPins[5]. En los bloques esto lo hace "elemento i de ledPins", que pasa a ser ledPins[i]. Como el bucle de conteo también empieza en 0, encajan a la perfección: en cada vuelta i da el siguiente índice y ledPins[i] el número de pin guardado ahí. Otra ventaja: si quieres cambiar el orden de los LED, solo cambias los números de la lista, sin tocar el bucle. Tienes más detalles en arreglos en Arduino.

i (índice)ledPins[i]LED que se enciende
02LED 1 (D2)
13LED 2 (D3)
24LED 3 (D4)
35LED 4 (D5)
46LED 5 (D6)
57LED 6 (D7)

Luz secuencial LED: bloques y C++ línea por línea

Bloques del proyecto luz secuencial LED: arreglo, bucle de conteo y repetir siempre
Los bloques de la luz secuencial LED: el arreglo ledPins en las variables globales, un bucle de conteo en la configuración que pone los pines como salida y otro dentro de repetir siempre que enciende los LED uno a uno durante 150 ms.
C++ (Arduino IDE)
1int ledPins[] = {2, 3, 4, 5, 6, 7};   // LED pinleri, yanma sırasıyla / LED pins in lighting order
2
3void setup() {
4  // Tüm LED pinlerini çıkış yap / Set all LED pins as outputs
5  for(int i = 0; i < 6; i++) {
6    pinMode(ledPins[i], OUTPUT);
7  }
8}
9
10void loop() {
11  // Her LED'i sırayla 150 ms yak / Light each LED in turn for 150 ms
12  for(int i = 0; i < 6; i++) {
13    digitalWrite(ledPins[i], HIGH);
14    delay(150);
15    digitalWrite(ledPins[i], LOW);
16  }
17}
BloqueLínea de C++¿Qué hace?
declarar entero (int) ledPins = arreglo 2 3 4 5 6 7int ledPins[] = {2, 3, 4, 5, 6, 7};Guarda los seis números de pin en orden de encendido
configuración (una vez)void setup() {Lo de dentro se ejecuta una vez al arrancar
contar con i desde 0 hasta 5 de a 1for(int i = 0; i < 6; i++) {Cuenta i de 0 a 5: 6 vueltas
configurar pin elemento i de ledPins como SALIDApinMode(ledPins[i], OUTPUT);Pone el pin actual como salida
repetir siemprevoid loop() {Lo de dentro se repite sin parar
escribir ALTO en pin elemento i de ledPinsdigitalWrite(ledPins[i], HIGH);Enciende el LED actual
esperar 150 msdelay(150);El LED sigue encendido 150 ms
escribir BAJO en pin elemento i de ledPinsdigitalWrite(ledPins[i], LOW);Apaga el LED; el bucle pasa al siguiente

Piensa en el programa como una línea de tiempo. Al arrancar, el bucle de la configuración pone los seis pines como salida uno a uno, del 0 al 5, y eso no se repite nunca más. Después empieza repetir siempre: el bucle de conteo de dentro enciende el LED de D2, espera 150 ms, lo apaga y hace lo mismo con D3, D4, D5, D6 y D7. Una vuelta dura 6 × 150 = 900 ms. Cuando se apaga el último LED, loop() termina, la placa vuelve enseguida al principio y la luz arranca otra vez en D2; como no hay pausa entre vueltas, parece que la luz fluye sin parar. Para cambiar la velocidad basta con cambiar un número, el 150: con 50 la luz va tres veces más rápida, con 500 pasea tranquilamente. Hacer que esa velocidad fija se pueda ajustar con una perilla nos lleva al siguiente proyecto.

Luz secuencial LED con velocidad regulable: el valor del potenciómetro es la espera

Bloques de la luz secuencial con velocidad regulable: variable potValue y leer analógico A0
Luz secuencial LED con velocidad regulable: en cada vuelta del bucle de conteo se guarda leer analógico A0 en potValue y después el LED sigue encendido potValue ms.
C++ (Arduino IDE)
1int ledPins[] = {2, 3, 4, 5, 6, 7};   // LED pinleri, yanma sırasıyla / LED pins in lighting order
2int potValue;                         // Pot değeri = bekleme (ms) / Pot value = delay (ms)
3
4void setup() {
5  // Tüm LED pinlerini çıkış yap / Set all LED pins as outputs
6  for(int i = 0; i < 6; i++) {
7    pinMode(ledPins[i], OUTPUT);
8  }
9}
10
11void loop() {
12  for(int i = 0; i < 6; i++) {
13    potValue = analogRead(A0);        // Hızı oku (0-1023) / Read the speed (0-1023)
14    digitalWrite(ledPins[i], HIGH);
15    delay(potValue);                  // Pot değeri kadar ms bekle / Wait as many ms as the pot value
16    digitalWrite(ledPins[i], LOW);
17  }
18}

La única diferencia con la luz secuencial LED son dos bloques nuevos. A las variables globales se añade "declarar entero (int) potValue = 0" y el bucle de conteo empieza con "establecer potValue a leer analógico A0". analogRead(A0) convierte la tensión de la pata central del potenciómetro en un número de 0 a 1023; ese número va directo a "esperar potValue ms", es decir, a la línea delay(potValue). Si giras la perilla hacia un extremo, cada LED queda encendido cerca de un segundo (1023 ms) y una vuelta dura unos 6 segundos; hacia el otro extremo la espera baja a 0 y los LED cambian tan rápido que parecen brillar débilmente todos a la vez. Leer el potenciómetro dentro del bucle, antes de cada LED, es una decisión pensada: el siguiente LED ya usa la nueva velocidad en cuanto giras, sin esperar a que termine la vuelta. Cómo funciona un potenciómetro lo explicamos en qué es un potenciómetro.

Coche fantástico: dos bucles que cuentan hacia delante y hacia atrás

Bloques del efecto coche fantástico con LED: un bucle de 0 a 5 y otro de 4 a 1
Efecto coche fantástico con LED: repetir siempre contiene dos bucles de conteo. El primero cuenta de 0 a 5 y lleva la luz de D2 a D7, el segundo cuenta hacia atrás de 4 a 1 y la trae de D6 a D3.

En el efecto coche fantástico la luz viaja de un extremo al otro y vuelve. Los bloques de Efecto coche fantástico con LED tienen dos bucles de conteo, uno debajo del otro, dentro de repetir siempre. El primero es el conocido "contar con i desde 0 hasta 5 de a 1" y lleva la luz de D2 a D7. El segundo es "contar con i desde 4 hasta 1 de a 1": como el inicio es mayor que el final, el bloque cuenta hacia atrás y i vale 4, 3, 2, 1. En el código es la línea for(int i = 4; i > 0; i--); i-- resta uno a i. ¿Por qué de 4 a 1 y no de 5 a 0? Porque ledPins[5] (D7) ya se enciende al final de la ida y ledPins[0] (D2) al principio de la siguiente. Saltarse los extremos al volver evita que los LED de las puntas se enciendan dos veces seguidas, y el rebote se ve fluido. Una ida y vuelta son 6 + 4 = 10 pasos de 100 ms, 1 segundo en total. Efecto coche fantástico con velocidad regulable usa los mismos dos bucles; solo añade "establecer potValue a leer analógico A0" al principio de ambos y usa "esperar potValue ms" en lugar de 100 ms. Para más patrones, echa un vistazo a coche fantástico y luz secuencial con Arduino.

Tu propio ejemplo de contador: contador de vueltas y puerto serie

Ahora vamos a escribir un pequeño ejemplo que lo une todo: cada vez que la luz secuencial termina una vuelta sube un contador, y la placa envía al ordenador tanto los valores de i como el número de vueltas. Con los bloques de las imágenes se montaría así: bajo el arreglo ledPins, en las variables globales, se añade "declarar entero (int) rounds = 0". En la configuración entra el bloque "iniciar serie a 9600 baudios". Dentro del bucle de conteo, antes de encender el LED, unos bloques "imprimir en serie" muestran el texto "i = ", luego i y luego el texto " pin = " con la opción "continuar", y al final "elemento i de ledPins" con la opción "salto de línea". Tras el bucle de conteo, todavía dentro de repetir siempre, un bloque "establecer rounds a …" recibe la suma rounds + 1 y el número de vueltas se imprime con "imprimir en serie … salto de línea".

C++ (Arduino IDE)
1int ledPins[] = {2, 3, 4, 5, 6, 7};   // LED pinleri / LED pins
2int rounds = 0;                       // tamamlanan tur sayısı / number of finished rounds
3
4void setup() {
5  Serial.begin(9600);                 // seri port 9600 baud / serial port at 9600 baud
6  for (int i = 0; i < 6; i++) {
7    pinMode(ledPins[i], OUTPUT);
8  }
9}
10
11void loop() {
12  for (int i = 0; i < 6; i++) {
13    Serial.print("i = ");             // aynı satırda kal / stay on the same line
14    Serial.print(i);
15    Serial.print("  pin = ");
16    Serial.println(ledPins[i]);       // alt satıra geç / new line
17    digitalWrite(ledPins[i], HIGH);
18    delay(300);
19    digitalWrite(ledPins[i], LOW);
20  }
21  rounds = rounds + 1;                // sayacı bir artır / add one to the counter
22  Serial.print("Tur / Round: ");
23  Serial.println(rounds);
24}

Después de cargarlo, abre el monitor serie del Arduino IDE y ponlo a 9600 baudios. En cada vuelta verás seis líneas, de "i = 0 pin = 2" a "i = 5 pin = 7", y después una línea "Tur / Round" que cuenta 1, 2, 3. Esta salida es la prueba más clara de que el valor final del bloque contar está incluido: "desde 0 hasta 5" produce exactamente seis valores. Fíjate también en que rounds está declarada en las variables globales; no se reinicia cada vez que empieza loop(), sino que conserva su valor de una vuelta a otra. Una vuelta dura 6 × 300 = 1,8 segundos, así que el límite de int, 32767, se alcanza en unas 16 horas; si necesitas contar más tiempo, usa unsigned long. Tienes más sobre el monitor serie en monitor serie de Arduino.

Circuito: 6 LED, resistencias de 220 Ω y un potenciómetro

ComponenteConexión (Arduino Uno)En el código
LED 1D2 → 220 Ω → ánodo del LED (pata larga), cátodo → GNDledPins[0]
LED 2D3 → 220 Ω → ánodo, cátodo → GNDledPins[1]
LED 3D4 → 220 Ω → ánodo, cátodo → GNDledPins[2]
LED 4D5 → 220 Ω → ánodo, cátodo → GNDledPins[3]
LED 5D6 → 220 Ω → ánodo, cátodo → GNDledPins[4]
LED 6D7 → 220 Ω → ánodo, cátodo → GNDledPins[5]
Potenciómetro (10 kΩ)Un extremo a 5V, pata central a A0, el otro extremo a GNDanalogRead(A0), solo en los proyectos con velocidad regulable

Una resistencia de 220 Ω deja pasar unos (5 − 2) / 220 ≈ 14 mA por un LED rojo alimentado a 5 V, un valor seguro para el LED y para el pin de Arduino. Si usas LED de otro color, comprueba la resistencia con la calculadora de resistencia para LED. Reúne todos los cátodos en la línea GND de la protoboard y conéctala al pin GND del Arduino. Si inviertes las patas exteriores del potenciómetro no se rompe nada; solo cambia el sentido de giro. La luz secuencial LED y el coche fantástico no usan el potenciómetro, pero dejarlo conectado no molesta, así que puedes probar los cuatro proyectos seguidos en el mismo circuito.

Errores comunes con bucles y variables

ErrorSíntomaSolución
Contar uno de más: "desde 0 hasta 6"El bucle da 7 vueltas y en la última lee ledPins[6], que no existeEl valor final está incluido: para 6 LED, de 0 a 5 (i < 6 en el código)
Empezar el índice en 1El primer LED en D2 nunca se enciende y la última vuelta se sale del arregloLos índices empiezan en 0: empieza el bloque contar en 0
Salirse del arregloSe activa un pin que no toca o el programa hace cosas raras; C++ no comprueba los límitesEl índice siempre debe estar entre 0 y el número de elementos − 1
Declarar el contador dentro de loop()El contador vuelve a 0 en cada vuelta y siempre imprime 1Declara el contador en el bloque "variables globales (al principio)"
Dejar corto el bucle de la configuración (0 a 4)El último LED brilla muy poco o nada, porque su pin nunca se puso como salidaEl rango de conteo en la configuración y en repetir siempre debe ser el mismo
Confundir asignación y comparaciónif (potValue = 0) siempre es falso y además borra el valorAsignar es =, comparar es ==
Las esperas largas dejan ciegos a los botones. El bloque "esperar … ms", o sea delay(), detiene la placa por completo mientras dura; en ese tiempo no se lee ningún botón ni se mira ningún sensor. En Luz secuencial LED con velocidad regulable, con el potenciómetro al máximo, una vuelta dura unos 6 segundos. Si añades a este proyecto un botón que se lee al principio de cada vuelta, lo más probable es que una pulsación corta llegue durante una espera y se pierda. La solución es esperar midiendo el tiempo: con millis() preguntas "¿ha pasado ya suficiente tiempo desde el último cambio de LED?" y entretanto sigues leyendo el botón. Explicamos esta técnica paso a paso en millis() frente a delay() en Arduino.

Explorar los bloques de bucles y variables en la app BlueGrays

Los cuatro proyectos de este artículo y los siguientes son totalmente gratuitos en la app BlueGrays, con bloques y código. En la sección de código de un proyecto, activa el interruptor Ver en bloques y el código se sustituye por los bloques del mismo programa; si tocas la imagen se abre a pantalla completa y puedes ampliar con comodidad los bucles largos. La pestaña Entiende los bloques recorre el programa paso a paso y en cada paso muestra solo sus bloques y lo que hacen. Otros proyectos gratuitos que vale la pena ver en bloques: Luces de policía LED, que funciona con una variable delayTime y dos bucles de conteo; Semáforo, que pasa por cuatro estados dentro de repetir siempre; Medir la intensidad de luz con LDR, que guarda su lectura en una variable y la imprime por el puerto serie; y Encender y apagar un LED con un botón, que recuerda el estado del LED en una variable. Cada ejemplo de Arduino de la Guía de código también está en bloques, y las Preguntas del día te ayudan a afianzar lo aprendido con 5 preguntas diarias de A1 a C2. La lista completa de proyectos con bloques está en la página de programación por bloques. Los bloques no se cargan directamente en la placa; a la placa siempre va el código real del proyecto, así que copias en el Arduino IDE el programa que entendiste con los bloques y lo cargas.

Ahora que conoces los bucles y las variables, el siguiente paso es sacar esos números del mundo real: en la parte 5 de la serie contamos cómo leer sensores con bloques, el puerto serie y el paso a MicroPython en la Pico. Mientras tanto, en la app BlueGrays puedes ver la luz secuencial LED, el coche fantástico y sus versiones con velocidad regulable con esquema y código, pasar a los bloques con Ver en bloques y a la explicación paso a paso con Entiende los bloques, y seguir tú mismo a qué línea de código corresponde cada bucle de conteo.

Preguntas frecuentes

¿Qué es un bucle en la programación por bloques?

Un bucle es un bloque que ejecuta una y otra vez los bloques que lleva dentro. En BlueGrays destacan dos: "repetir siempre" es el bucle principal del programa y no se detiene mientras la placa tenga corriente, y "contar con i" repite un número fijo de veces. En el código de Arduino sus equivalentes son la función loop() y el bucle for.

¿Cómo se escribe un bucle for en Arduino?

El paréntesis de un bucle for tiene tres partes separadas por punto y coma: int i = 0 inicia el contador, una condición como "sigue mientras i sea menor que 6" decide cuánto dura, e i++ suma uno al contador tras cada vuelta. Este bucle cuenta i de 0 a 5 y ejecuta 6 veces el código entre llaves. En bloques hace lo mismo "contar con i desde 0 hasta 5 de a 1".

¿Cuántas veces se ejecuta un bloque contar "desde 0 hasta 5"?

Seis veces. En el bloque contar de BlueGrays el valor final está incluido, así que i vale 0, 1, 2, 3, 4 y 5. En el código aparece como un bucle for que se repite mientras i sea menor que 6 y recorre exactamente todos los índices de un arreglo de seis elementos.

¿Cómo se crea una variable en la programación por bloques?

Se coloca un bloque "declarar entero (int) … = …" dentro del bloque "variables globales (al principio)" y se le da a la variable un nombre y un valor inicial. Eso crea una variable global como int potValue = 0; al principio del código. Más tarde, el valor se cambia con un bloque "establecer … a".

¿Se puede detener loop() en Arduino?

loop() nunca se detiene por sí solo; al terminar su última línea vuelve a empezar enseguida. Para parar la placa del todo hay que quitarle la corriente o cargar otro programa. Si quieres que algo ocurra solo una vez, ponlo en setup(), el bloque "configuración (una vez)", o usa una variable para comprobar si ya se ha hecho.

¿Por qué los índices de un arreglo en Arduino empiezan en 0?

En C y C++ el índice indica a cuántos pasos está un elemento del principio del arreglo; el primero está justo al principio, así que su índice es 0. Por eso los índices del arreglo ledPins, de seis elementos, van de 0 a 5. Escribir ledPins[6] es salirse del arreglo, y C++ no lo comprueba por ti.

Ver todos los proyectos
Luz secuencial LED
#5Intermedio

Luz secuencial LED

Luces que se encienden una tras otra, como si corrieran. El Arduino enciende seis LED de uno en uno; cada uno brilla un instante y se apaga, así que la luz recorre la fila de principio a fin y vuelve

4.6(85)
207
Efecto coche fantástico con LED
#6Intermedio

Efecto coche fantástico con LED

La clásica luz que va y viene: un punto de luz recorre seis LED de un extremo al otro y luego regresa. El Arduino enciende cada LED una décima de segundo antes de pasar al siguiente, da la vuelta en c

4.8(106)
202
Luz secuencial LED con velocidad regulable
#7Intermedio

Luz secuencial LED con velocidad regulable

Seis LED se encienden uno tras otro y la luz parece correr de un extremo al otro. Al girar el mando del potenciómetro, la velocidad de esa carrera cambia al instante: hacia un lado la luz vuela, hacia

4.6(72)
146
Efecto coche fantástico con velocidad regulable
#8Intermedio

Efecto coche fantástico con velocidad regulable

Una luz recorre seis LED de un extremo a otro, da la vuelta y vuelve a correr. Girando el mando del potenciómetro cambias al instante la velocidad de esa carrera: con el mando a un lado la luz casi vu

4.5(60)
120
Luces de policía LED
#4Principiante

Luces de policía LED

Como las luces de un coche de policía: el LED rojo destella tres veces muy rápido, después el azul destella otras tres, y la secuencia se repite sin parar. Solo necesitas dos LED y dos resistencias co

4.7(103)
258
Semáforo
#3Principiante

Semáforo

Una copia en miniatura del semáforo que ves cada día en la calle. El rojo se queda dos segundos, el amarillo brilla un instante, el verde se queda dos segundos y luego vuelve al rojo pasando otra vez

4.8(131)
397
Medir la intensidad de luz con LDR
#11Principiante

Medir la intensidad de luz con LDR

¿Quieres ver en números cuánta luz hay en tu habitación? El LDR, una pequeña pieza sensible a la luz, mide la luz ambiente y el Arduino escribe el valor en la pantalla del ordenador cada medio segundo

4.6(81)
139
Encender y apagar un LED con un botón
#10Principiante

Encender y apagar un LED con un botón

Pulsas el botón una vez y la luz se enciende, lo pulsas otra vez y se apaga, igual que el interruptor de tu habitación. El Arduino nota cada pulsación y cambia el LED al estado contrario, esperando un

4.8(100)
167