🛠 Ajouter un deuxième port série avec SoftwareSerial (GPS sur broches 10/11)
Objectifs
La Duemilanove n'a qu'un seul UART matériel (broches 0/1) et il est déjà occupé par le pont USB-série FTDI. La page officielle le dit explicitement : « une bibliothèque SoftwareSerial permet la communication série sur n'importe quelle broche numérique ». Vous allez brancher un GPS sur les broches 10/11 et faire un pont série bidirectionnel entre le GPS et le moniteur USB — la technique qui a permis à des générations de projets GPS/GSM/MP3 de vivre sur AVR.
Matériel
- 1 Arduino Duemilanove (ATmega328 conseillée : les 1 Ko de SRAM de la 168 limitent la taille du programme)
- 1 module GPS TTL (type NEO-6M, 4800 ou 9600 bauds) — en 5 V il est compatible avec la logique 5 V de la Duemilanove, aucun niveau-baisseur nécessaire
- 4 fils mâche-mâche, câble mini-USB
Code complet
// Pont moniteur USB <-> GPS sur SoftwareSerial (RX=10, TX=11)
#include <SoftwareSerial.h>
SoftwareSerial gps(10, 11); // RX, TX
void setup {
Serial.begin(9600); // USB (FTDI)
gps.begin(4800); // NEO-6M par defaut : 4800
Serial.println("Pont GPS actif — attendez le fix");
}
void loop {
if (gps.available) Serial.write(gps.read); // GPS -> moniteur
if (Serial.available) gps.write(Serial.read); // moniteur -> GPS
}
Vérification attendue
Le moniteur série (9600) affiche les phrases NMEA $GPGGA, $GPRMC… dès que le GPS capte (quelques minutes à froid, près d'une fenêtre). En envoyant une commande UBX ou une phrase valide depuis le moniteur, elle repart vers le GPS. La LED de statut du GPS clignote à chaque seconde.
Erreurs fréquentes
- Croire SoftwareSerial full-duplex à 9600+ sur AVR : à 4800 ça tient ; à 9600 et plus, les octets se perdent si le loop fait autre chose — c'est la limite physique de l'émulation logicielle sur un AVR 16 MHz.
- Inverser le croisement : TX du GPS → broche 10 (RX logiciel), RX du GPS ← broche 11 (TX logiciel) ; sans croisement, silence total.
- Utiliser la broche 11 en PWM en même temps : SoftwareSerial sur 10/11 monopolise le timer utilisé par le PWM des broches 9/10/11 — les
analogWritesur ces broches se dégradent. - Brancher le GPS sur 0/1 : conflit direct avec la FTDI, le moniteur et le GPS se parlent dessus et le téléversement devient impossible.
- Choisir les broches 2/3 pour le GPS : possible, mais on les réserve souvent aux interruptions externes ; 10/11 est le choix classique.
- Attendre un fix en intérieur : sans vue du ciel, les phrases arrivent vides — sortir tester.
- Oublier le
delay(1000)après ouverture du port dans un script hôte : l'auto-reset DTR fait perdre la première demi-seconde (voir le tuto bouton).
Autres tutoriels pour cette carte
- Faire clignoter la LED 13 d'une Duemilanove (et choisir le bon ATmega)
- Bouton poussoir et moniteur série sur la Duemilanove (avec ses 0,5 s de silence)
- Potentiomètre et variation LED : l'ADC 10 bits et le PWM 8 bits version AVR
- Régler la référence de mesure avec AREF et analogReference
- Persister une calibration dans l'EEPROM de l'ATmega (512 octets ou 1 Ko)
- Convertir la Duemilanove en programmateur AVR (ArduinoISP) pour graver des puces nues
Exemples de code pour cette carte
clignotante.inoArduinobouton-led.inoArduinopwm-respiration.inoArduinopotentiometre-plotter.inoArduinoservo-balayage.inoArduinobuzzer-melodie.inoArduino