🛠 Passerelle série sur les 4 UART matériels
Objectifs
Réaliser le montage signature de la Mega 2560 : parler à quatre appareils série en même temps grâce à ses 4 UART matériels — ce qu'un Uno ne peut pas faire (une seule UART). Affectation officielle des broches : Serial (0 RX / 1 TX, partagé avec l'USB), Serial1 (RX 19 / TX 18), Serial2 (RX 17 / TX 16), Serial3 (RX 15 / TX 14). Vous écrirez un routeur non bloquant octet par octet.
Matériel
- 1 × Arduino Mega 2560 + câble USB
- 1 × module GPS (9600 bauds typiques) sur Serial1
- 1 × module modem ou second appareil (115200 typiques) sur Serial2
- 1 × transceiver RS-485 (ou tout appareil 9600) sur Serial3
- Plaque d'essai et câbles
Respectez le croisement TX→RX/RX→TX entre la Mega et chaque module, et la masse commune. Attention : la liaison USB-CP est gérée par l'ATmega16U2 ; si le PC écrit beaucoup sans que personne ne lise, le flux peut bloquer la carte (comportement CDC documenté).
Code complet
// 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
}
Vérification attendue
Le moniteur série à 115200 bauds affiche les trames NMEA du GPS en continu. Ce que vous tapez dans le moniteur part vers Serial2 ; la réponse du modem est relayée vers Serial3. Aucun octet n'est perdu aux cadences usuelles car chaque loop vide les quatre tampons.
Erreurs fréquentes
- Confondre les paires : Serial1 = 19/18, Serial2 = 17/16, Serial3 = 15/14 (RX/TX dans cet ordre) — pas les broches 10/11 du SPI.
- TX et TX au lieu de TX vers RX croisé : rien ne passe, ou pire conflit de lignes.
- Oublier la masse commune entre modules alimentés séparément : données corrompues.
- Inonder le port USB sans le lire : la carte peut cesser de répondre sur l'USB (spécificité du contrôle de flux CDC du 16U2) ; limitez le débit ou lisez côté PC.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
clignotante.inoArduinobouton-led.inoArduinodouble-servo.inoArduinopont-uart.inoArduinopwm-respiration.inoArduinopotentiometre-plotter.inoArduino