Arduino Mega gestion des port serie !!!

Tu places tes fonctions de lecture dans des boucles infinies donc tu crées de nouveau des lectures bloquantes.

loop() est déjà une boucle infinie, il suffit de tester pour chaque interface si un caractère est disponible et si oui le placer dans un buffer. Lorsque tu reçois un terminateur pour l'une des interfaces tu appelles la fonction de traitement associée.
Ainsi tu es réactif sur toutes tes interfaces. Pour autant que ta fonction de traitement ne soit pas trop longue.