Fundamentos · 13 min de lectura

Comandos de Arduino: 36 tarjetas con C++ y MicroPython a la par

Comandos de Arduino en orden de aprendizaje: 18 tarjetas de pinMode a tone, equivalentes en MicroPython, código lado a lado, plan de 4 semanas y 8 errores.

La forma más fiable de aprender los comandos de Arduino no es memorizar una lista larga, sino recorrerlos en orden, cada uno con un ejemplo pequeño y un proyecto real. Para eso la app BlueGrays tiene la Guía de código en la sección Lecciones de su pestaña Aprende: 18 tarjetas en la ruta Arduino C++, de pinMode a tone, y 18 tarjetas en la ruta MicroPython, de import a I2C, 36 tarjetas en total. Todas siguen el mismo esquema: ¿Para qué sirve?, ¿Por qué?, Sintaxis, Ejemplo (con las pestañas Bloques, Arduino y MicroPython), Error frecuente, Consejo, Verlo en proyectos y un Minitest de dos preguntas. El orden también está fijado: primero los pines (pinMode, digitalWrite, digitalRead, analogRead, analogWrite), después el tiempo (delay, millis), luego variables, condiciones, bucles y funciones, y al final Serial, map, random y tone. Si usas una Raspberry Pi Pico, aprendes las mismas ideas en la ruta MicroPython con Pin, Pin.value, time.sleep, ADC.read_u16 y PWM.

Este artículo es un mapa de la guía. Primero verás qué hay dentro de una tarjeta y después las 18 tarjetas de cada ruta en su orden real dentro de la app, con el equivalente en el otro lenguaje. Luego vienen tres ejemplos cortos que ponen lado a lado la versión en C++ y en MicroPython del mismo programa, cómo funcionan el minitest y el registro de progreso, un orden de aprendizaje de 4 semanas, una rutina diaria de 20 minutos y los 8 errores más frecuentes con estos comandos. Si buscas una explicación detallada de cada comando, el artículo comandos de Arduino con sintaxis y ejemplos dedica una sección a cada uno; este explica en qué orden aprenderlos y cómo practicar.

Placa Arduino Uno: pines digitales, pines PWM marcados con ~ y entradas analógicas A0–A5
Las cinco primeras tarjetas de la ruta Arduino C++ tratan los tres grupos de pines de esta placa: pines digitales, pines PWM marcados con ~ y entradas analógicas A0–A5.

¿Dónde está la Guía de código y cómo funciona?

Entras a la guía desde la pestaña Aprende de abajo: en la sección Lecciones, arriba, toca la casilla Guía de código. Al abrir la guía ves dos pestañas arriba: Arduino C++ y MicroPython; la app recuerda qué ruta abriste la última vez. Debajo están el contador Lo que has aprendido y la línea Siguiente tarjeta, así que nunca tienes que buscar dónde lo dejaste. Las tarjetas se agrupan por temas: Pines, Tiempo, Variables, Condiciones, Bucles, Funciones, Puerto serie, Matemáticas y Sonido; la ruta MicroPython añade Estructura básica y Manejo de errores. La Guía de código es gratis: no necesitas Premium para leer las tarjetas, ver los ejemplos ni resolver los minitests. Las tarjetas están en 10 idiomas, así que lees las explicaciones en el idioma en el que usas la app.

¿Qué hay dentro de una tarjeta?

Todas las tarjetas usan el mismo esqueleto, así que a partir de la tercera ya sabes dónde mirar. La tabla muestra las secciones con la 7.ª tarjeta de la ruta Arduino, millis; la columna de la derecha resume lo que dice la tarjeta. El orden de las secciones es en sí un orden de aprendizaje: primero oyes en una frase qué hace el comando, luego entiendes para qué lo necesitas con una comparación cotidiana, ves cómo se escribe, lees un ejemplo que funciona, conoces la trampa más común y te pones a prueba con dos preguntas.

SecciónQué explicaEn la tarjeta millis
¿Para qué sirve?La tarea del comando en una fraseTe dice cuántos milisegundos han pasado desde que arrancó la placa.
¿Por qué?Para qué lo necesitas, con una comparación cotidianaComo meter un bizcocho en el horno y mirar el reloj de vez en cuando: mientras esperas, haces otras cosas.
SintaxisCómo se escribe el comandounsigned long now = millis();
EjemploUn programa corto que funciona; pestañas Bloques, Arduino y MicroPythonCódigo que invierte un LED cada 500 ms; en la Pico lo mismo con time.ticks_ms
Error frecuenteLa trampa en la que más caen los principiantesGuardar millis en un int: el número se estropea al cabo de unos 33 segundos.
ConsejoUna regla pequeña que te facilita el trabajoEscribe siempre la comprobación como ahora - anterior >= intervalo.
Verlo en proyectosProyectos que usan el comando, de fácil a difícilMás de 50 proyectos; la lista empieza con un proyecto gratuito de botón con ESP32
MinitestDos preguntas, una explicación breve tras cada respuesta¿Qué devuelve millis()? ¿En qué tipo deberías guardar millis?

La sección Ejemplo se abre en la ruta de la propia tarjeta: en una tarjeta de Arduino aparece primero la pestaña Arduino, en una de MicroPython la pestaña MicroPython. Pero la otra pestaña siempre está ahí, y eso convierte la guía en un diccionario. En la tarjeta Pin de salida: Pin(15, Pin.OUT) de la ruta MicroPython, por ejemplo, la pestaña Arduino contiene código que hace lo mismo con pinMode y digitalWrite, y los comentarios dicen qué línea corresponde a qué (como la línea que equivale a led.toggle()). Casi todas las tarjetas tienen además una tercera pestaña, Bloques, que muestra el programa de ejemplo en bloques. Si pasas de Arduino a la Pico, el método más rápido es este: abre una tarjeta que conozcas, cambia de pestaña y empareja los dos programas línea a línea.

Ruta Arduino C++: 18 tarjetas y sus equivalentes en MicroPython

La tabla es el orden real de la ruta Arduino en la app; la última columna muestra cómo se hace lo mismo con MicroPython en una Raspberry Pi Pico. Los números de pin coinciden con los ejemplos de las tarjetas: para un LED, 13 o 9 en el Uno y GP15 en la Pico; para un botón, 2 en el Uno y GP14 en la Pico; para la lectura analógica, A0 en el Uno y GP26 en la Pico. Las cinco primeras tarjetas tratan los pines, la 6 y la 7 el tiempo, de la 8 a la 14 las bases de la programación, y las cuatro últimas el puerto serie, el cambio de escala, los números aleatorios y el sonido. El orden es intencionado: primero aprendes cómo la placa toca el mundo exterior y después controlas esos contactos con variables, condiciones y bucles.

N.ºTarjeta¿Para qué sirve?Equivalente en MicroPython
1pinModeIndica si un pin es salida (LED, zumbador) o entrada (botón, sensor)Pin(15, Pin.OUT) · Pin(14, Pin.IN, Pin.PULL_UP)
2digitalWriteEnciende (HIGH, 5 V) o apaga (LOW, 0 V) un pin de salidaled.value(1) · led.on() · led.off()
3digitalReadLee si un pin de entrada está en HIGH o en LOWbutton.value() → 1 o 0
4analogReadConvierte la tensión de A0–A5 en un número de 0 a 1023ADC(26).read_u16() → 0–65535
5analogWrite (PWM)Atenúa un LED o frena un motor con un valor de 0 a 255 en un pin ~PWM(Pin(15)) · freq(1000) · duty_u16(0–65535)
6delayDetiene el código los milisegundos indicadostime.sleep(0.5) · time.sleep_ms(500)
7millisMilisegundos desde el arranque; temporizar sin detener el códigotime.ticks_ms() · time.ticks_diff()
8Variables y tiposGuarda valores con tipos como int, float, bool, unsigned longNo se escribe el tipo: count = 0, volts = 3.3
9if / else if / elseEjecuta un código u otro según una condiciónif / elif / else
10Operadores de comparación y lógicosConstruye condiciones con ==, !=, <, >, &&, ||, !==, !=, <, > · and, or, not
11Bucle forRepite una tarea un número fijo de vecesfor i in range(10):
12Bucle whileRepite mientras una condición sea verdaderawhile condición:
13Funciones (void, parámetros, return)Divide el código en piezas con nombre y reutilizablesdef blink(times): … return
14ArraysGuarda en orden valores del mismo tipo bajo un solo nombreLista: pins = [2, 3, 4] · len(pins)
15Serial.begin / print / printlnEnvía texto y valores al ordenador (monitor serie)print(x) · f-string; no hace falta Serial.begin
16mapPasa un rango de números a otroNo hay comando propio: raw * 255 // 1023 o tu propia función
17random / randomSeedGenera números aleatoriosimport random · random.randint(1, 6)
18tone / noToneHace sonar un zumbador a una frecuencia dada y lo callaPWM: freq(440) · duty_u16(32768); duty_u16(0) para silenciarlo
Los equivalentes no son uno a uno, y la mayor diferencia está en los rangos de números. En el Uno, analogRead devuelve 0–1023 y analogWrite espera 0–255; en la Pico, ADC.read_u16 y PWM.duty_u16 usan ambos 0–65535. En la Pico solo GP26, GP27 y GP28 leen valores analógicos, y miden como máximo 3,3 V, así que conecta el potenciómetro a 3V3 (OUT), no a 5 V. MicroPython tampoco tiene un comando listo como map o tone: cambias de escala con una simple multiplicación y división, y generas sonido con el ajuste freq del PWM.

Ruta MicroPython: 18 tarjetas y sus equivalentes en Arduino

La ruta MicroPython está pensada para la Raspberry Pi Pico; los ejemplos de las tarjetas son programas cortos que puedes ejecutar en una Pico, por ejemplo con Thonny. El orden difiere un poco del de la ruta Arduino, porque en Python primero hay que acostumbrarse a las reglas del propio lenguaje: añadir módulos con import, mostrar texto con print y la regla de la sangría y los dos puntos. La pestaña Arduino de cada tarjeta de MicroPython incluye también la versión en C++ del mismo programa, así que, si ya sabes Arduino, puedes leer la tabla de derecha a izquierda. Si es tu primera Pico, el artículo qué es la Raspberry Pi Pico es una buena preparación para la instalación y los pines.

N.ºTarjeta¿Para qué sirve?Equivalente en Arduino
1import y from … importAñade al programa módulos como machine y time#include para librerías; los comandos básicos como pinMode y delay vienen incluidos
2print y f-stringsMuestra texto y valores en la consola de ThonnySerial.begin(9600) + Serial.println()
3Pin de salida: Pin(15, Pin.OUT)Convierte un pin GP en salida; value(), on(), off(), toggle()pinMode(13, OUTPUT) + digitalWrite()
4Pin de entrada: Pin.IN, PULL_UP, PULL_DOWNConvierte un pin en entrada, elige la resistencia interna y lo lee con value()pinMode(2, INPUT_PULLUP) + digitalRead()
5time.sleep y sleep_msPausa el programa en segundos o milisegundosdelay()
6while True: el bucle infinitoRepite las líneas de debajo mientras la Pico esté encendidaloop()
7Sangría y dos puntos (:)Decide a qué bloque pertenece cada líneaLlaves { } y punto y coma ;
8Variables: int, float, str, boolGuarda valores; el tipo se decide soloint, float, String, bool
9if / elif / else, and / or / notRamifica según condiciones y las combinaif / else if / else · &&, ||, !
10for y rangeRepite un número fijo de veces; range(0, 10) cuenta de 0 a 9for (int i = 0; i < 10; i++)
11Listas: [ ], índice, lenGuarda varios valores en orden; el primer elemento tiene índice 0Arrays: int pins[] = {2, 3, 4};
12def y return (funciones)Da nombre a código reutilizable y devuelve un resultadoFunciones void o con tipo, return
13ADC: lectura analógica con read_u16Lee la tensión de GP26, GP27, GP28 como 0–65535analogRead() → 0–1023
14PWM: freq y duty_u16Atenúa un LED y toca notas con un zumbadoranalogWrite() y tone()
15time.ticks_ms y ticks_diffMide el tiempo transcurrido sin detener el códigomillis()
16Pin.irq: botones con interrupcionesEjecuta una función en el instante en que se pulsa un botónattachInterrupt()
17try / except (capturar errores)Evita que el programa se detenga cuando surge un errorSin equivalente habitual en Arduino; se comprueban los valores devueltos
18I2C y scan()Encuentra las direcciones de los dispositivos del bus I2CWire.begin() + código de escáner I2C

El mismo programa en dos lenguajes: 3 ejemplos lado a lado

El primer ejemplo es el «hola mundo» de cualquier lenguaje: hacer parpadear el LED de la placa cada medio segundo. En el Uno el LED integrado está en el pin 13, así que no necesitas montar ningún circuito. En la Pico es algo distinto: en la Pico normal el LED integrado está en GP25, pero en la Pico W ese LED va conectado al chip inalámbrico y Pin(25) no lo enciende. Por eso en MicroPython es más seguro escribir Pin("LED", Pin.OUT); en las versiones actuales de MicroPython ese nombre encuentra el LED integrado tanto en la Pico como en la Pico W. Si el firmware de tu placa no reconoce el nombre "LED", instala un MicroPython actual en la Pico. El proyecto gratuito Parpadeo LED Integrado Raspberry Pi Pico (Pico y Pico W) explica justo esta diferencia.

C++ (Arduino IDE)
1// Örnek 1: dahili LED'i yakıp söndür / Example 1: blink the built-in LED
2void setup() {
3  pinMode(13, OUTPUT);     // Uno'da dahili LED 13. pinde / built-in LED is on pin 13 on the Uno
4}
5
6void loop() {
7  digitalWrite(13, HIGH);  // LED yanar / LED on
8  delay(500);              // 500 ms bekle / wait 500 ms
9  digitalWrite(13, LOW);   // LED söner / LED off
10  delay(500);              // 500 ms bekle / wait 500 ms
11}
MicroPython
1# Örnek 1: dahili LED'i yakıp söndür / Example 1: blink the onboard LED
2from machine import Pin
3import time
4
5led = Pin("LED", Pin.OUT)  # Pico ve Pico W'de dahili LED / onboard LED on Pico and Pico W
6# Pin(25, Pin.OUT) yalnız düz Pico'da çalışır / Pin(25, Pin.OUT) works only on the plain Pico
7
8while True:                # Arduino'daki loop() gibi / like loop() in Arduino
9    led.on()               # LED yanar / LED on
10    time.sleep_ms(500)     # 500 ms bekle / wait 500 ms
11    led.off()              # LED söner / LED off
12    time.sleep_ms(500)     # 500 ms bekle / wait 500 ms

El segundo ejemplo añade una entrada: el LED se enciende mientras el botón está pulsado. El botón va entre el pin 2 y GND en el Uno, y entre GP14 y GND en la Pico. En el Uno volvemos a usar el LED integrado del pin 13; en la Pico, conecta un LED externo a GP15 con una resistencia de 220 Ω (la herramienta Resistencia para LED calcula el valor para tu propio LED). En los dos lenguajes se activa la resistencia pull-up interna: INPUT_PULLUP en Arduino y Pin.PULL_UP en MicroPython. Con este montaje la lógica va al revés: al pulsar, el pin se lleva a GND, así que el Arduino lee LOW y la Pico lee 0. La pausa de 20 ms del final no resuelve del todo el rebote mecánico del botón, pero reduce los parpadeos muy cortos. Los detalles del montaje están en el artículo cómo conectar un botón a Arduino.

C++ (Arduino IDE)
1// Örnek 2: butona basılıyken LED yanar / Example 2: LED on while the button is pressed
2const int BUTTON_PIN = 2;  // buton: 2. pin ile GND arasında / button between pin 2 and GND
3const int LED_PIN = 13;    // dahili LED / built-in LED
4
5void setup() {
6  pinMode(BUTTON_PIN, INPUT_PULLUP);  // iç pull-up direnci açık / internal pull-up on
7  pinMode(LED_PIN, OUTPUT);
8}
9
10void loop() {
11  if (digitalRead(BUTTON_PIN) == LOW) {  // basılıyken LOW okunur / reads LOW while pressed
12    digitalWrite(LED_PIN, HIGH);
13  } else {
14    digitalWrite(LED_PIN, LOW);
15  }
16  delay(20);  // kısa bekleme / short pause
17}
MicroPython
1# Örnek 2: butona basılıyken LED yanar / Example 2: LED on while the button is pressed
2from machine import Pin
3import time
4
5button = Pin(14, Pin.IN, Pin.PULL_UP)  # buton: GP14 ile GND arasında / button between GP14 and GND
6led = Pin(15, Pin.OUT)                 # LED: GP15 + 220 ohm direnç / LED on GP15 with 220 ohm
7
8while True:
9    if button.value() == 0:            # basılıyken 0 okunur / reads 0 while pressed
10        led.value(1)
11    else:
12        led.value(0)
13    time.sleep_ms(20)                  # kısa bekleme / short pause

El tercer ejemplo muestra la diferencia más importante entre los dos lenguajes: los rangos de números. La patilla central del potenciómetro va a A0 en el Uno y a GP26 en la Pico; las patillas de los extremos van a 5V y GND en el Uno, y a 3V3 (OUT) y GND en la Pico. El LED va en el pin 9 (marcado con ~) en el Uno y en GP15 en la Pico, en ambos casos con una resistencia de 220 Ω. En Arduino, analogRead devuelve 0–1023 pero analogWrite espera 0–255, por eso entre ambos aparece map(raw, 0, 1023, 0, 255). En la Pico, read_u16 y duty_u16 usan los dos 0–65535, así que puedes pasar la lectura directamente al PWM. Cómo funciona el PWM lo tienes en el artículo qué es PWM, y cómo ver los valores en directo, en la guía del monitor serie.

C++ (Arduino IDE)
1// Örnek 3: potansiyometreyle LED parlaklığı / Example 3: LED brightness with a potentiometer
2const int POT_PIN = A0;  // potansiyometrenin orta ucu / potentiometer wiper
3const int LED_PIN = 9;   // ~ işaretli PWM pini / PWM pin marked with ~
4
5void setup() {
6  pinMode(LED_PIN, OUTPUT);
7  Serial.begin(9600);
8}
9
10void loop() {
11  int raw = analogRead(POT_PIN);               // 0-1023
12  int brightness = map(raw, 0, 1023, 0, 255);  // 0-255 aralığına ölçekle / scale to 0-255
13  analogWrite(LED_PIN, brightness);
14  Serial.println(raw);                         // Seri Monitör'de izle / watch in the Serial Monitor
15  delay(50);
16}
MicroPython
1# Örnek 3: potansiyometreyle LED parlaklığı / Example 3: LED brightness with a potentiometer
2from machine import Pin, ADC, PWM
3import time
4
5pot = ADC(26)            # GP26 = ADC0, orta uç / wiper on GP26 (ADC0)
6led = PWM(Pin(15))       # LED: GP15 + 220 ohm direnç / LED on GP15 with 220 ohm
7led.freq(1000)           # saniyede 1000 aç-kapa / 1000 cycles per second
8
9while True:
10    raw = pot.read_u16()     # 0-65535
11    led.duty_u16(raw)        # aynı aralık, ölçekleme gerekmez / same range, no scaling needed
12    print(raw)               # Thonny kabuğunda izle / watch in the Thonny shell
13    time.sleep_ms(50)
ConceptoArduino C++MicroPython (Pico)
Se ejecuta una vezvoid setup() { … }Las líneas antes de while True:
Se repite siemprevoid loop() { … }while True: y las líneas con sangría de debajo
Bloque de códigoLlaves { } y ; al final de la línea: al final de la línea y sangría de 4 espacios
Comentario// comentario# comentario
Pin de salidapinMode(13, OUTPUT); digitalWrite(13, HIGH);led = Pin(15, Pin.OUT) · led.value(1)
Pin de entradapinMode(2, INPUT_PULLUP); digitalRead(2)Pin(14, Pin.IN, Pin.PULL_UP) · button.value()
Lectura analógicaanalogRead(A0) → 0–1023ADC(26).read_u16() → 0–65535
Salida PWManalogWrite(9, 0–255)PWM(Pin(15)).duty_u16(0–65535)
Esperardelay(500)time.sleep_ms(500) o time.sleep(0.5)
Mostrar textoSerial.begin(9600); Serial.println(x);print(x)

Minitest, «Entendido» y tu progreso en Mi nivel

  • Minitest: Cada tarjeta termina con dos preguntas, y el encabezado dice Minitest · 1 / 2. Al tocar una opción recibes enseguida Correcto. o No del todo. con una breve explicación; sigues con Siguiente pregunta.
  • Puntuación: Al terminar las dos preguntas ves una puntuación como 2 / 2 correctas. La tarjeta no se puede terminar sin el test; en lugar del botón aparece Resuelve el minitest para terminar la tarjeta.
  • Entendido: Cuando acabas el test aparece el botón Entendido, siguiente tarjeta (en la última tarjeta de una ruta, solo Entendido). Al tocarlo, la tarjeta se guarda como aprendida en tu cuenta, una pequeña celebración muestra tu progreso, por ejemplo ¡Genial! 5 / 18 tarjetas, y se abre la siguiente tarjeta.
  • Insignia y contador: Las tarjetas aprendidas llevan la marca Aprendida en la lista y sube el contador Lo que has aprendido de la parte superior. Cuando terminas todas las tarjetas de una ruta aparece Has aprendido todas las tarjetas de esta ruta.
  • Mi nivel: En la pantalla Mi nivel de la sección Aprende, bajo el título Guía de código y la nota Tarjetas aprendidas, hay dos barras separadas: Arduino C++ x/18 y MicroPython x/18. Estas barras cuentan solo las tarjetas de la guía de código.
  • Una regla honesta contigo: La app no te frena tras una respuesta incorrecta; el botón Entendido aparece en cuanto terminas el test. Así que antes de tocarlo, asegúrate de poder explicar en voz alta por qué las dos respuestas son correctas; si no puedes, vuelve a la sección Ejemplo y lee el código otra vez línea a línea.

Verlo en proyectos: encontrar el comando en código real

El último paso para aprender un comando es reconocerlo en un proyecto que funciona y que ha escrito otra persona. En la sección Verlo en proyectos la tarjeta muestra algunos proyectos seleccionados y, debajo, una frase que dice en cuántos proyectos aparece el comando; el enlace Todos abre la lista completa. Está ordenada de fácil a difícil y se puede acotar con los filtros Todos, Gratis y Premium. millis, por ejemplo, aparece en el código de más de 50 proyectos: la lista empieza con el proyecto gratuito Control de LED con botón en ESP32 (Toggle), sigue con proyectos de iniciación para Pico como Piano de botones con Raspberry Pi Pico (5 botones + zumbador + grabadora) y Sensor de aparcamiento con Raspberry Pi Pico (HC-SR04 + 3 LED + zumbador), y sube a proyectos de nivel intermedio como Semáforo Raspberry Pi Pico con selector de 4 modos (máquina de estados, GP11-13 + GP4), que combinan un botón con temporización. Nuestra sugerencia: abre un proyecto gratuito de la lista, busca el comando en el código, cambia un valor y predice antes el resultado. Para ver qué hace cada línea del código, la pestaña Entender el código del proyecto es el paso natural siguiente.

Orden de aprendizaje recomendado: un plan de 4 semanas

Supongamos que puedes dedicar unos 20 minutos al día, 5 días por semana. Para terminar una ruta en 4 semanas basta con una tarjeta la mayoría de los días; los demás días repasas y trabajas en un proyecto en lugar de una tarjeta nueva. Si tienes un Arduino, sigue solo la columna de Arduino; si tienes una Pico, la de MicroPython. Si tienes las dos placas, termina primero la ruta Arduino y pasa a MicroPython el segundo mes; los conceptos son los mismos, así que la segunda ruta va mucho más rápido. Todos los proyectos de la tabla son gratis en BlueGrays. Si quieres un plan más amplio, la hoja de ruta de 30 días del artículo aplicación para aprender Arduino encaja bien con esta tabla; si das clase con la Pico, el plan de clase de Raspberry Pi Pico reparte las tarjetas de MicroPython en 6 semanas de clases.

SemanaTarjetas Arduino C++Tarjetas MicroPythonProyectos gratuitos de la semanaLo que sabes hacer al final de la semana
11–5: pinMode, digitalWrite, digitalRead, analogRead, analogWrite1–5: import, print, pin de salida, pin de entrada, time.sleepParpadeo de LED, Encender un LED con pulsador (Push); Pico: Parpadeo LED Integrado Raspberry Pi Pico (Pico y Pico W)Hacer parpadear un LED, leer un botón; en Arduino, ver un valor analógico
26–10: delay, millis, variables, if / else, operadores6–9: while True, sangría, variables, if / elif / elseLuz nocturna con LDR, Control de LED con botón en ESP32 (Toggle); Pico: Raspberry Pi Pico Dos LEDs alternos (Flip-Flop, GP14 + GP13)Decidir según una lectura, temporizar sin detener el programa
311–14: for, while, funciones, arrays10–13: for y range, listas, def, ADCEfecto coche fantástico con LED, Luz secuencial LED; Pico: Simulador de Semáforo Raspberry Pi Pico (3 LEDs Secuenciales, GP11/GP12/GP13)Meter las repeticiones en bucles, los pines en arrays y las tareas en funciones
415–18: Serial, map, random, tone14–18: PWM, ticks_ms, Pin.irq, try / except, I2CUso del zumbador, Medir la intensidad de luz con LDR; Pico: Semáforo Raspberry Pi Pico con selector de 4 modos (máquina de estados, GP11-13 + GP4)Mostrar valores, ajustar sonido y brillo, montar un proyecto pequeño desde cero

Una rutina diaria de 20 minutos

  1. 3 minutos, calentamiento: Resuelve las preguntas del día en la sección Aprende o repite el minitest de ayer. El objetivo es comprobar que hoy sigues recordando el comando de ayer.
  2. 5 minutos, tarjeta nueva: Lee las secciones ¿Para qué sirve?, ¿Por qué? y Sintaxis. Copia la sintaxis a mano en un papel; al escribirla es mucho más difícil que se te escapen paréntesis y puntos y coma.
  3. 3 minutos, ejemplo: Explícate el ejemplo línea a línea y luego cambia de pestaña. En una tarjeta de Arduino mira la pestaña MicroPython, en una de MicroPython la pestaña Arduino, y empareja las líneas que hacen lo mismo en los dos programas.
  4. 2 minutos, minitest: Responde las dos preguntas y lee la explicación de la que hayas fallado. En este momento vuelve a mirar los recuadros Error frecuente y Consejo.
  5. 6 minutos, proyecto: Abre un proyecto gratuito y fácil de la lista Verlo en proyectos, busca el comando en el código y cambia un solo valor: una espera, un número de pin o un umbral. Si tienes el circuito montado, súbelo a la placa; si no, predice el resultado y compruébalo con Entender el código.
  6. 1 minuto, nota: Escribe una línea en tu cuaderno: el nombre del comando, su significado en una frase y su equivalente en el otro lenguaje. Al cabo de cuatro semanas esa página será tu propio diccionario de comandos.

8 errores frecuentes con estos comandos

ErrorSíntomaSoluciónTarjeta
Olvidar pinModeEl LED no se enciende o brilla muy pocoEscribe pinMode(pin, OUTPUT) en setup(); en la Pico crea el pin con Pin(15, Pin.OUT)pinMode · pin de salida
Escribir = en lugar de == en una condiciónif (x = 5) siempre es verdadero y el programa entra siempre en la misma ramaUsa == para comparar; en Python if x = 5 da un SyntaxError directamenteif / else · operadores
Bloquear el código con un delay largoPulsas el botón, pero la reacción llega tarde o no llegaHaz la espera con millis; en la Pico usa time.ticks_ms y ticks_diffdelay · millis · ticks_ms
Confundir el rango de analogReadUn umbral copiado de Arduino nunca se cumple en la PicoEn el Uno analogRead da 0–1023 y en la Pico read_u16 da 0–65535; recalcula el umbral para el nuevo rangoanalogRead · ADC
Llevar un valor de analogWrite a duty_u16En la Pico, con duty_u16(255) el LED apenas se enciendeduty_u16 espera 0–65535: medio brillo es 32768 y brillo máximo 65535analogWrite · PWM
Guardar millis en un intEn el Uno la temporización se estropea al cabo de unos 33 segundosDeclara las variables de tiempo como unsigned long y escribe la comprobación como ahora - anterior >= intervalomillis
Esperar la lógica de INPUT_PULLUP al revésEsperas HIGH o 1 al pulsar el botón, pero llega LOW o 0Con pull-up, pulsado es LOW (0) y suelto es HIGH (1)digitalRead · pin de entrada
Escribir sleep(500) en la PicoLa Pico espera 500 segundos, más de 8 minutos, en lugar de medio segundosleep usa segundos: escribe sleep(0.5) o sleep_ms(500)time.sleep

La pestaña Bloques: entender un comando viéndolo

Bloques en español del proyecto Parpadeo de LED: configurar pin 9 como SALIDA y, dentro de repetir siempre, escribir ALTO en pin 9, esperar 100 ms, escribir BAJO en pin 9, esperar 100 ms
Bloques del proyecto gratuito Parpadeo de LED: el bloque «configuración (una vez)» corresponde a setup() y «repetir siempre» a loop().

La pestaña Bloques te deja ver qué hace un comando sin escribir código, sobre todo en las primeras tarjetas de una ruta. En la imagen de arriba, pinMode se convierte en el bloque «configurar pin 9 como SALIDA», digitalWrite en «escribir ALTO en pin 9» y delay en «esperar 100 ms»; en la tarjeta pinMode, una nota bajo la vista de bloques indica además las opciones del menú desplegable: SALIDA, ENTRADA y ENTRADA (PULLUP). Los bloques se muestran en el idioma de la app y sirven para leer: en la app no arrastras bloques para escribir un programa, y a la placa siempre se sube el código real. La forma recomendada de usarlos: primero predice en la pestaña Bloques qué hará el programa, luego pasa a la pestaña Arduino y busca a qué línea corresponde cada bloque. En los proyectos con vista de bloques, el interruptor Ver en bloques de la página del proyecto te permite hacer el mismo emparejamiento con un proyecto entero; las bases están en el artículo qué es la programación por bloques.

En resumen, para aprender los comandos de Arduino no necesitas una lista larga: bastan el orden correcto, un pequeño ejemplo que funcione para cada comando, una comprobación de dos preguntas y un proyecto real que use el comando. Si empiezas hoy con la tarjeta pinMode, en cuatro semanas habrás terminado las 18 tarjetas y habrás visto cada comando con tus propios ojos en al menos un proyecto; cuando pases a la Pico, recorrerás los mismos conceptos en la ruta MicroPython mucho más rápido. Si quieres probar las tarjetas y los proyectos que incluyen, instala BlueGrays en tu móvil y abre la primera tarjeta en la sección Aprende.

Preguntas frecuentes

¿Cuáles son los comandos básicos de Arduino?

Los comandos de Arduino más usados son los de pines (pinMode, digitalWrite, digitalRead, analogRead, analogWrite), los de tiempo (delay, millis), los del puerto serie con Serial y ayudas como map, random y tone. Junto a ellos, estructuras de C++ como if, for y while, además de las funciones, construyen el flujo del programa. La ruta Arduino C++ de la Guía de código de BlueGrays trata estos temas en orden a lo largo de 18 tarjetas.

¿Con qué comando de Arduino empiezo?

Empieza con pinMode y digitalWrite, porque con esos dos ya puedes encender un LED y ves el resultado al momento. Después añade la temporización con delay y la lectura de un botón con digitalRead. analogRead, millis, if y for se apoyan en estos cuatro comandos.

¿Qué diferencia hay entre los comandos de Arduino y los de MicroPython?

Los conceptos son los mismos y cambia la forma de escribirlos: Pin(15, Pin.OUT) y led.value(1) sustituyen a pinMode y digitalWrite, time.sleep_ms a delay y while True a loop(). También cambian los rangos de números; analogRead devuelve 0–1023 en el Uno y read_u16 devuelve 0–65535 en la Pico. En Python, la sangría y los dos puntos ocupan el lugar de las llaves y los puntos y coma de C++.

¿Existe el comando delay en MicroPython?

No hay ningún comando llamado delay; hacen lo mismo sleep (segundos), sleep_ms (milisegundos) y sleep_us (microsegundos) del módulo time. El delay(500) de Arduino se convierte en la Pico en time.sleep_ms(500) o time.sleep(0.5). Para temporizar sin detener el código, time.ticks_ms y time.ticks_diff sustituyen a millis.

¿En qué pin está el LED integrado de la Raspberry Pi Pico?

En la Pico normal, el LED integrado está conectado a GP25. En la Pico W ese LED va conectado al chip inalámbrico, por lo que Pin(25) no lo enciende. En las versiones actuales de MicroPython, Pin("LED", Pin.OUT) encuentra el LED integrado en las dos placas.

¿La Guía de código de BlueGrays es gratis?

Sí, la Guía de código es gratis: puedes leer las 36 tarjetas, ver los ejemplos y resolver los minitests. Las listas de Verlo en proyectos incluyen proyectos gratuitos y Premium; con el filtro Gratis ves solo los gratuitos.

Ver todos los proyectos
Parpadeo de LED
#1Principiante

Parpadeo de LED

El primer hola de la electrónica: encender y apagar un solo LED. El Arduino enciende y apaga el LED a intervalos cortos, así que la luz parpadea rápido. Ves de la forma más sencilla cómo la placa cont

4.6(188)
1127
Encender un LED con pulsador (Push)
#9Principiante

Encender un LED con pulsador (Push)

Como un timbre: la luz se enciende mientras pulsas y se apaga cuando sueltas. El Arduino escucha el botón todo el rato; mientras está pulsado enciende el LED, y en cuanto levantas el dedo lo apaga. Co

4.8(113)
229
Luz nocturna con LDR
#12Principiante

Luz nocturna con LDR

Una pequeña lamparita que se enciende sola cuando oscurece y se apaga cuando llega la mañana. Un sensor de luz mide la claridad de la habitación, y el Arduino enciende el LED cuando está lo bastante o

4.8(102)
205
Control de LED con botón en ESP32 (Toggle)
#105Principiante

Control de LED con botón en ESP32 (Toggle)

Cada vez que se pulsa el botón, cambia el estado del LED: si está encendido se apaga, si está apagado se enciende. Patrón de conmutación clásico. Con debounce limpiamos el ruido mecánico del pulsador para garantizar una sola conmutación con una sola pulsación.

4.6(39)
57
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
Parpadeo LED Integrado Raspberry Pi Pico (Pico y Pico W)
#147Principiante

Parpadeo LED Integrado Raspberry Pi Pico (Pico y Pico W)

¡El proyecto de apertura de la serie Raspberry Pi Pico! Hacemos parpadear el LED verde integrado para verificar que la placa funciona — un experimento clásico "Hello World". SIN componentes externos, solo Pico y cable USB. El código está escrito en MicroPython (el lenguaje oficialmente respaldado por la Raspberry Pi Foundation). Aprende la clase machine.Pin, el modo Pin.OUT, los métodos led.on()/off() y time.sleep() en Thonny IDE. Sigue cada cambio en vivo en l

5.0(1)
10
Raspberry Pi Pico Dos LEDs alternos (Flip-Flop)
#149Principiante

Raspberry Pi Pico Dos LEDs alternos (Flip-Flop)

El siguiente paso después del LED único en el Pico: dos LEDs parpadean alternativamente en un patrón flip-flop clásico. Dos LEDs de diferentes colores (rojo en GP14, verde en GP13) intercambian estados cada 500ms. Pin.toggle() de MicroPython hace el código corto. Base de semáforos, luces de policía.

5.0(2)
19
Simulador de Semáforo Raspberry Pi Pico (3 LEDs Secuenciales)
#150Principiante

Simulador de Semáforo Raspberry Pi Pico (3 LEDs Secuenciales)

Simulamos un semáforo real con LEDs rojo, amarillo y verde. Verde 4 seg "pase", amarillo 1,5 seg "prepárese", rojo 3 seg "detenga" y rojo+amarillo 1 seg "arranque" (patrón europeo). Aprende definición de función, lógica de máquina de estados y sincronización multi-GPIO. Circuito simple: 3 LEDs en GP11/GP12/GP13.

4.0(1)
12