🛠 Passerelle série sur les 4 UART matériels
Objetivos
Realizar el montaje insignia de la Mega 2560: hablar con cuatro dispositivos serie al mismo tiempo gracias a sus 4 UART de hardware — algo que un Uno no puede hacer (una sola UART). Asignación oficial de pines: Serial (0 RX / 1 TX, compartido con USB), Serial1 (RX 19 / TX 18), Serial2 (RX 17 / TX 16), Serial3 (RX 15 / TX 14). Escribirás un enrutador no bloqueante byte a byte.
Material
- 1 × Arduino Mega 2560 + cable USB
- 1 × módulo GPS (9600 baudios típicos) en Serial1
- 1 × módulo módem o segundo dispositivo (115200 típicos) en Serial2
- 1 × transceptor RS-485 (o cualquier dispositivo a 9600) en Serial3
- Placa de pruebas y cables
Respeta el cruce TX→RX/RX→TX entre la Mega y cada módulo, así como la masa común. Atención: la conexión USB-CP es gestionada por el ATmega16U2; si el PC escribe mucho sin que nadie lea, el flujo puede bloquear la placa (comportamiento CDC documentado).
Código completo
// Passerelle 4 UART — PC + GPS + modem + RS-485
void setup {
Serial.begin(115200); // console USB (broches 0/1)
Serial1.begin(9600); // GPS typique
Serial2.begin(115200); // modem typique
Serial3.begin(9600); // transceiver RS-485
while (!Serial && millis < 3000) {} // attend l'USB CDC
}
void loop {
// Routage non bloquant, octet par octet :
if (Serial1.available) Serial.write(Serial1.read); // GPS -> PC
if (Serial.available) Serial2.write(Serial.read); // PC -> modem
if (Serial2.available) Serial3.write(Serial2.read); // modem -> RS-485
if (Serial3.available) Serial.write(Serial3.read); // RS-485 -> PC
}
Verificación esperada
El monitor serie a 115200 baudios muestra continuamente las tramas NMEA del GPS. Lo que escribes en el monitor se envía a Serial2; la respuesta del módem se reenvía a Serial3. No se pierde ningún byte a las velocidades habituales porque cada loop vacía los cuatro búferes.
Errores frecuentes
- Confundir los pares: Serial1 = 19/18, Serial2 = 17/16, Serial3 = 15/14 (RX/TX en este orden) — no los pines 10/11 del SPI.
- Conectar TX con TX en lugar de TX con RX cruzado: no pasa nada, o peor aún, conflicto de líneas.
- Olvidar la masa común entre módulos alimentados por separado: datos corruptos.
- Saturar el puerto USB sin leerlo: la placa puede dejar de responder por USB (especificidad del control de flujo CDC del 16U2); limita el caudal o lee desde el PC.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
clignotante.inoArduinobouton-led.inoArduinodouble-servo.inoArduinopont-uart.inoArduinopwm-respiration.inoArduinopotentiometre-plotter.inoArduino