Introducción
La comunicación serie es una de las habilidades más fundamentales en electrónica embebida. Ya sea que estés depurando un sensor, comunicándote con un módulo GPS o enviando datos a un PC, el humilde USART (Receptor/Transmisor Síncrono/Asíncrono Universal) es tu herramienta imprescindible. En este tutorial, construiremos un sencillo proyecto de Eco Serie usando un Arduino Uno en el simulador de Velxio. Cada carácter que escribas en el Monitor Serie se devuelve con su valor ASCII y un contador. Es el “¡Hola, mundo!” de la comunicación serie.

Recorrido del Circuito
Este proyecto es notablemente simple: solo utiliza la propia placa Arduino Uno. No se necesitan componentes externos porque la comunicación serie se realiza a través del conversor USB-serie integrado en el Uno. En Velxio, el Monitor Serie está integrado en la barra de herramientas del editor, por lo que puedes interactuar con tu código inmediatamente.
Componentes
| Componente | Cantidad | Notas |
|---|---|---|
| Arduino Uno (wokwi-arduino-uno) | 1 | El cerebro de la operación |
¡Eso es todo! Los pines TX (pin 1) y RX (pin 0) del Arduino Uno están conectados internamente a la interfaz USB, que Velxio emula perfectamente. No se requiere cableado.

Recorrido del Código
Vamos a sumergirnos en el código. Abre el editor de Velxio y verás el siguiente sketch:
// Serial Echo — USART Protocol Test
// Open the Serial Monitor to send and receive data.
// Everything you type is echoed back with extra info.
void setup() {
Serial.begin(9600);
Serial.println("=============================");
Serial.println(" Serial Echo Test (USART)");
Serial.println("=============================");
Serial.println("Type something and press Send.");
Serial.println();
// Print system info
Serial.print("CPU Clock: ");
Serial.print(F_CPU / 1000000);
Serial.println(" MHz");
Serial.print("Baud rate: 9600");
Serial.println();
Serial.println();
}
unsigned long charCount = 0;
void loop() {
if (Serial.available() > 0) {
char c = Serial.read();
charCount++;
Serial.print("[");
Serial.print(charCount);
Serial.print("] Received: '");
Serial.print(c);
Serial.print("' (ASCII ");
Serial.print((int)c);
Serial.println(")");
}
// Periodic heartbeat
static unsigned long lastBeat = 0;
if (millis() - lastBeat >= 5000) {
lastBeat = millis();
Serial.print("Uptime: ");
Serial.print(millis() / 1000);
Serial.print("s | Chars received: ");
Serial.println(charCount);
}
}

Cómo Funciona
-
Configuración: Inicializamos la comunicación serie a 9600 baudios usando
Serial.begin(9600). Luego imprimimos un banner e información del sistema: la velocidad del reloj de la CPU (F_CPU / 1000000 da MHz) y la velocidad en baudios. -
Variable global:
unsigned long charCount = 0;lleva la cuenta de cuántos caracteres hemos recibido. -
Bucle:
if (Serial.available() > 0)comprueba si hay datos esperando en el búfer de recepción.char c = Serial.read();lee un carácter.- Incrementamos
charCounte imprimimos un mensaje formateado:[cuenta] Recibido: 'c' (ASCII 99). - Cada 5 segundos, imprimimos un latido con el tiempo de actividad y el total de caracteres recibidos.
Conceptos Clave para Estudiantes
- Velocidad en Baudios: La velocidad de la comunicación serie. Ambos lados deben acordar la misma velocidad en baudios (aquí 9600).
- Serial.available(): Devuelve el número de bytes esperando para ser leídos. Siempre verifica antes de leer para evitar obtener -1.
- Serial.read(): Lee un solo byte (carácter) del búfer.
- ASCII: Cada carácter tiene un código numérico. Por ejemplo, ‘A’ es 65. El código convierte
caintpara mostrar esto. - millis(): Devuelve los milisegundos desde que se inició el programa. Útil para temporización no bloqueante.
- Variables estáticas:
static unsigned long lastBeatconserva su valor entre iteraciones del bucle, a diferencia de las variables locales.
Errores Comunes y Consejos de Depuración
- ¿El Monitor Serie no muestra salida? Asegúrate de haber abierto el Monitor Serie en Velxio (haz clic en el botón “Monitor Serie” en la barra de herramientas). También verifica que la velocidad en baudios en el monitor coincida con 9600.
- ¿Caracteres basura? La discrepancia en la velocidad en baudios es la causa más común. Vuelve a verificar
Serial.begin(9600)y la configuración del monitor. - ¿No pasa nada cuando escribes? Asegúrate de presionar “Enviar” o Enter después de escribir. El código lee un carácter a la vez.
- ¿El latido no se imprime? La condición
if (millis() - lastBeat >= 5000)usa>=para evitar perder el intervalo. Si no ves latido, verifica quelastBeatse actualice correctamente.
Extensiones Sugeridas
Una vez que domines el eco básico, prueba estas mejoras:
- Eco de líneas completas: En lugar de repetir cada carácter, acumula caracteres hasta el salto de línea, luego repite la línea completa.
- Analizador de comandos: Interpreta comandos especiales como “LED ON” para encender un LED (agrega un LED al circuito).
- Salida binaria: Imprime el carácter recibido en formato binario.
- Múltiples velocidades en baudios: Permite al usuario cambiar la velocidad en baudios mediante un comando.
- Registro en EEPROM virtual: Almacena los datos recibidos en la EEPROM simulada.
Conclusión
¡Acabas de construir tu primer proyecto de comunicación serie! El Eco Serie es una demostración simple pero poderosa de cómo los microcontroladores se comunican con el mundo exterior. Con Velxio, puedes experimentar sin ningún hardware: solo abre el simulador, escribe código y prueba al instante.
¿Listo para probarlo tú mismo? Abre el ejemplo en vivo en Velxio y empieza a escribir: Eco Serie en Velxio. ¡Feliz programación!