Commer nommer Serial

Bonjour,

Je souhaite savoir s'il est possible de déclarer une variable et de la lier à un port série. L'objectif est de pouvoir jouer entre les différents ports série sur une MEGA sans utiliser des conditions. Donc de remplacer un code comme celui-ci:

int nbSerial;
[...]
if (nbSerial == 1) {
  Serial1.Print("test1");
} else if (nbSerial == 2) {
  Serial2.Print("test2");
} else if (nbSerial == 3) {
  Serial3.Print("test3");
}

Par exemple, au lieu d'avoir:

Serial.print("test");

Je souhaite pouvoir écrire quelque chose du genre:

Serial mySerial; // déclaration de mySerial ?
mySerail = Serial1;
mySerial.print("test");

Pour info, je ne suis pas intéressé par les éventuelles solutions impliquant la bibliothèque "SoftwareSerial" car elle me crée des problèmes dans mon code (interactions avec mes calculs de délais dans mes interruptions)
Merci d'avance,
Mikael

3 options:

même si je ne suis pas fan des #define, ça peut simplifier la vie faites un

#define lePortSerieDuGPS Serial1

et ensuite utilisez

 lePortSerieDuGPS.begin(38400);
...
r = lePortSerieDuGPS.read();
...

sinon, comme Serial, Serial1, Serial2,... sont juste des instances d'une classe, vous pouvez définir par exemple un pointeur sur le port Série. Il suffit d'avoir la bonne classe (HardwareSerial)

HardwareSerial* monPortSeriePtr = &Serial2;
void setup() {
  monPortSeriePtr->begin(115200);
  ...
}

bien sûr comme c'est un pointeur il faut utiliser la notation -> et pas le point pour appeler les méthodes de la classe

enfin vous pouvez utiliser une référence vers cette instance

HardwareSerial& monPortSerieRef = Serial;
void setup() {
  monPortSerieRef.begin(115200);
  monPortSerieRef.println("Hello World");
}

void loop() {}

et dans ce cas vous conservez la notation avec le point.

Hello J-M-L,
C'est super, exactement ce que je cherchais !
Merci.

bonne continuation !