Comunicación Serial
1. Qué es la comunicación serial? #
La comunicación serial permite enviar y recibir datos de forma secuencial, bit por bit, a través de un canal (por ejemplo, el cable USB que conecta Arduino al PC).
Arduino utiliza los pines TX (transmitir) y RX (recibir), pero también puedes comunicarte con el ordenador a través del puerto USB gracias al chip serial integrado.
2. Inicializar la comunicación serial #
Para usar la comunicación serial, debes iniciarla con la función Serial.begin() en el setup().
1Serial.begin(9600); // velocidad en baudios
- Velocidades comunes: 9600, 115200
- El valor debe coincidir con el configurado en el Monitor Serie
3. Enviar datos al Monitor Serie #
Serial.print() #
Imprime datos en una sola línea, sin salto de línea al final.
1Serial.print("Temperatura: "); 2Serial.print(25); 3Serial.print(" ºC");
Serial.println() #
Imprime datos con salto de línea al final.
1Serial.println("Dato recibido");
Ejemplo práctico:
1void setup() { 2 Serial.begin(9600); 3} 4 5void loop() { 6 Serial.print("Contador: "); 7 Serial.println(millis()); 8 delay(1000); 9}
4. Leer datos desde el Monitor Serie #
Serial.available() #
Devuelve el número de bytes disponibles para leer.
Serial.read() #
Lee el primer byte disponible (carácter ASCII).
Ejemplo básico: encender un LED desde el teclado
1const int pinLED = 13; 2 3void setup() { 4 pinMode(pinLED, OUTPUT); 5 Serial.begin(9600); 6} 7 8void loop() { 9 if (Serial.available() > 0) { 10 char comando = Serial.read(); 11 12 if (comando == '1') { 13 digitalWrite(pinLED, HIGH); 14 Serial.println("LED encendido"); 15 } else if (comando == '0') { 16 digitalWrite(pinLED, LOW); 17 Serial.println("LED apagado"); 18 } 19 } 20}
5. Leer números enviados por el usuario #
Para leer datos numéricos completos, puedes usar Serial.parseInt():
1int valor = Serial.parseInt();
Ejemplo: controlar brillo de LED con número del 0 al 255
1const int led = 9; 2 3void setup() { 4 pinMode(led, OUTPUT); 5 Serial.begin(9600); 6 Serial.println("Introduce un valor entre 0 y 255:"); 7} 8 9void loop() { 10 if (Serial.available()) { 11 int brillo = Serial.parseInt(); 12 analogWrite(led, brillo); 13 Serial.print("Brillo establecido a: "); 14 Serial.println(brillo); 15 } 16}
Resumen del tema
Conceptos clave #
- Comunicación UART: protocolo de transmisión serie asíncrona sobre los pines TX (pin 1) y RX (pin 0) sincronizado por velocidad en baudios (
Serial.begin(9600)). - Transmisión de Datos:
Serial.print()para texto continuo ySerial.println()para agregar retorno de carro y salto de línea. - Recepción y Buffers:
Serial.available()comprueba si existen bytes en cola de entrada ySerial.read()extrae el byte más antiguo en formato de carácter ASCII. - Conversión Automática:
Serial.parseInt()ySerial.parseFloat()analizan directamente secuencias de caracteres y las convierten a variables numéricas.
Qué debes recordar #
Siempre se debe verificar Serial.available() > 0 antes de invocar Serial.read() o Serial.parseInt() para evitar leer datos basura o bloquear la ejecución.