Ejercicio 01 — Abrir el puerto serie a 9600 baudios e imprimir un contador que sube…

Dificultad: verde · Módulo 05 (Comunicacion serie)

Enunciado

Abrir el puerto serie a 9600 baudios e imprimir un contador que sube cada segundo, junto con mensajes de texto.

Montaje (Arduino UNO)

Ninguno (solo el monitor serie por USB)

Cómo se resuelve

El primer programa del curso que no enciende nada. No hay montaje, no hay LED, no hay ni un pinMode: el único hardware implicado es el cable USB que ya tienes puesto para programar la placa. Ese cable, además de dar corriente, transporta la comunicación serie, y este ejercicio consiste en usarlo para que la placa te cuente algo.

La preparación cabe en dos líneas, y va en setup() porque se hace una sola vez:

Serial.begin(9600);
Serial.println("Arduino listo.");

Serial.begin(9600) abre el canal y fija la velocidad en 9600 baudios. Ese número tiene que coincidir con el que selecciones en el desplegable del monitor serie: si el sketch habla a 9600 y el monitor escucha a otra velocidad, verás símbolos ilegibles en vez de texto. No es un fallo del programa, es un desacuerdo sobre el ritmo. Y si te olvidas de Serial.begin directamente, el monitor se queda en blanco sin dar ningún error, que es la forma más frustrante de fallar.

El Serial.println("Arduino listo.") no es adorno. Aparece una única vez, justo al arrancar o al resetear la placa, así que sirve de marca: cuando lo ves en el monitor sabes con certeza que la placa ha arrancado, que el canal está abierto y que los baudios cuadran. Si lo que sale es basura, ya sabes dónde mirar.

El loop() es donde está la idea del ejercicio:

Serial.print("Contador = ");
Serial.println(contador);
contador = contador + 1;
delay(1000);

Las dos primeras líneas construyen una sola línea de texto en dos trozos. Serial.print escribe y deja el cursor justo donde termina; Serial.println escribe y añade el salto de línea (\n) que cierra la línea. Por eso la salida es Contador = 0, Contador = 1, Contador = 2, una por segundo, y no cuatro líneas sueltas por vuelta ni un churro infinito. Prueba a cambiar el primer print por un println y verás la etiqueta y el número en líneas separadas: entender esa diferencia es la mitad del ejercicio.

Fíjate también en que println acepta tanto texto entre comillas como una variable numérica. El número se convierte solo a los caracteres que lo representan, así que contador valiendo 42 sale como los dos caracteres 4 y 2.

El detalle que se pasa por alto está en la primera línea del fichero:

int contador = 0;

Está declarada fuera de setup() y de loop(), y eso es deliberado. Una variable declarada dentro de loop() nace y muere en cada vuelta: se crearía otra vez a cero cada segundo y el contador nunca pasaría de 0. Al estar fuera, existe durante toda la vida del programa y su valor sobrevive de una vuelta a la siguiente. Es la primera vez en el curso que necesitas que algo se acuerde de lo que pasó antes, y conviene que la primera vez duela poco.

El delay(1000) no cambia lo que el programa hace, solo el ritmo al que lo hace. Sin él el programa seguiría siendo correcto, pero el loop() daría miles de vueltas por segundo y el monitor se llenaría a una velocidad que no hay ojo que siga. Bájalo a delay(100) un momento para verlo, y luego devuélvelo a 1000.

Todo esto parece poca cosa, y sin embargo acabas de aprender la herramienta de depuración más útil del curso. A partir de ahora, cuando un programa no haga lo que esperas, la respuesta casi siempre empieza por imprimir el valor sospechoso y comprobar si la placa está viendo lo que tú crees que está viendo.

Para practicar — cópialo y complétalo

Pega este esqueleto y completa los TODO. Es la mejor forma de aprender: inténtalo antes de mirar la solución.

/*
 * Curso de Arduino — Módulo 05: Comunicación serie
 * Ejercicio 01 — PRÁCTICA (rellena los TODO)
 * Enunciado: Abrir el puerto serie a 9600 baudios e imprimir un contador
 *            que sube cada segundo, junto con mensajes de texto.
 * Dificultad: verde
 * Placa: Arduino UNO    Montaje: ninguno (solo el monitor serie por USB)
 * Correr: Arduino IDE / Wokwi (wokwi/ej01) / arduino-cli (ver README)
 *         Abre el Monitor Serie a 9600 baudios para ver la salida.
 */
int contador = 0;                       // variable que va a ir creciendo
 
void setup() {
    // TODO: abre el puerto serie a 9600 baudios -> Serial.begin(9600)
    // TODO: imprime un mensaje inicial con Serial.println("Arduino listo.")
}
 
void loop() {
    // TODO: imprime "Contador = " sin salto de línea -> Serial.print(...)
    // TODO: imprime el valor de contador con salto de línea -> Serial.println(contador)
    // TODO: incrementa contador en 1
    // TODO: espera 1 segundo -> delay(1000)
}

Solución — cópiala y ejecútala

/*
 * Curso de Arduino — Módulo 05: Comunicación serie
 * Ejercicio 01 — MODELO (resuelto)
 * Enunciado: Abrir el puerto serie a 9600 baudios e imprimir un contador
 *            que sube cada segundo, junto con mensajes de texto.
 * Dificultad: verde
 * Placa: Arduino UNO    Montaje: ninguno (solo el monitor serie por USB)
 * Correr: Arduino IDE / Wokwi (wokwi/ej01) / arduino-cli (ver README)
 *         Abre el Monitor Serie a 9600 baudios para ver la salida.
 */
int contador = 0;                       // variable que va a ir creciendo
 
void setup() {
    Serial.begin(9600);                 // abre el puerto serie a 9600 baudios
    Serial.println("Arduino listo.");   // mensaje inicial + salto de línea
}
 
void loop() {
    Serial.print("Contador = ");        // print NO añade salto de línea
    Serial.println(contador);           // println SÍ lo añade (\n al final)
    contador = contador + 1;            // incrementa el contador
    delay(1000);                        // espera 1 s antes de la siguiente línea
}

Cómo ejecutar la simulación

Sin instalar nada, en el navegador

  1. Abre wokwi.com y crea un proyecto nuevo de la placa que pide el ejercicio.
  2. Pega la solución (o tu intento) en la pestaña sketch.ino.
  3. Abre la pestaña diagram.json, borra lo que haya y pega el circuito de aquí abajo.
  4. Dale al play. Verás el circuito funcionando: LEDs, pantallas y monitor serie.
Circuito del ejercicio (diagram.json)
{
  "version": 1,
  "author": "ESIBot",
  "editor": "wokwi",
  "parts": [
    { "type": "wokwi-arduino-uno", "id": "uno", "top": 0, "left": 0, "attrs": {} }
  ],
  "connections": [],
  "dependencies": {}
}

En VS Code, con el repo del curso

El paquete de simulación de este ejercicio está en practica/05-comunicacion-serie/wokwi/ej01/. Con la extensión Wokwi instalada y la licencia activada (lo cuenta el onboarding del curso):

make sim EJ=05-comunicacion-serie/ej01

y después, en VS Code, Ctrl+Shift+PWokwi: Start Simulator. La extensión no compila: simula un firmware ya compilado, y de compilarlo se encarga ese make.

Cómo usarlo

Con placa: abre el .ino en el Arduino IDE, elige placa y puerto y pulsa Subir. Sin placa: simulalo en Wokwi con cualquiera de las dos vias de arriba. Antes de mirar la solucion, intenta completar tu el esqueleto: es la mejor forma de aprender.

Conexiones