Arduino, configurar puerto serie.

En Arduino para configurar la conexión serie de la placa se usa la instrucción Serial.begin(speed). El parámetro indica la velocidad de transmisión en bits por segundo (baudios), tiene que ser uno de estos valores: 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600 o 115200. Puede aceptar un parámetro más Serial.begin(speed, config). Este parámetro se usa para configurar el tamaño de bits por dato, la paridad y el número de bit de parada. Para ello hay definidas un conjunto de constantes con un convenio para sus nombres. Veamos como funciona.

  • SERIAL_ : Todas las constante empiezan así
  • 5,6,7,8 : bits por dato
  • N,E,O : Paridad. Ninguna (None), par (Even) o impar (Odd). La paridad es un mecanismo para verificar si los datos recibidos son correctos.
  • 1, 2: bits de parada. Se usan para indicar el fin de un dato.

Por ejemplo, el valor por defecto es SERIAL_8N1 que indica 8 bits por dato, sin paridad y con un bit de parada. El listado de posibles valores es:

  • SERIAL_5N1
  • SERIAL_6N1
  • SERIAL_7N1
  • SERIAL_8N1
  • SERIAL_5N2
  • SERIAL_6N2
  • SERIAL_7N2
  • SERIAL_8N2
  • SERIAL_5E1
  • SERIAL_6E1
  • SERIAL_7E1
  • SERIAL_8E1
  • SERIAL_5E2
  • SERIAL_6E2
  • SERIAL_7E2
  • SERIAL_8E2
  • SERIAL_5O1
  • SERIAL_6O1
  • SERIAL_7O1
  • SERIAL_8O1
  • SERIAL_5O2
  • SERIAL_6O2
  • SERIAL_7O2
  • SERIAL_8O2

Por ejemplo estas dos instrucciones hacen lo mismo ya que SERIAL_8N1 es el valor por defecto:

Serial.begin(9600);

Serial.begin(9600,  SERIAL_8N1);

En el caso de placas con varios puertos serie como MEGA o NANO 33 existe un nombre distinto para cada uno. Se nombran «Serial» y el número de puerto empezando en 0 y teniendo en cuenta que «Serial0» es simplemente «Serial»:

  • Serial
  • Serial1
  • Serial2
  • Serial3

Se usan exactamente igual que Serial:

void setup() {
  Serial.begin(9600);
  Serial1.begin(9600);
  Serial2.begin(9600, SERIAL_8N1);
  Serial3.begin(9600, SERIAL_8N1);
}

En alguna placas como Leonardo o Micro puede ser necesario esperar a que el puerto serie este correctamente inicializado puedes leer más sobre eso en esta entrada.

Este texto mejorado y ampliado forma parte de mi libro sobre como mejorar tus programas en Arduino. Puedes echarle un vistazo aquí.