Curso C para Arduino
¿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.
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
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}
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}
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}