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}