🛠 Télémétrie série robuste vers le Traceur série
Objectifs
Envoyer des données de l'UNO vers le PC proprement : cadencer l'échantillonnage avec micros/millis au lieu de delay, économiser la SRAM avec la macro F, et surtout comprendre le quirk de réinitialisation automatique DTR — l'UNO reset à chaque ouverture du port série et son bootloader « intercepte les premiers octets » envoyés après la connexion.
Matériel
- 1 Arduino UNO R3 + câble USB-B (le 16U2 fait le pont USB-série, rien d'autre n'est requis)
- PC avec l'Arduino IDE (Moniteur + Traceur série)
- Éventuellement un autre terminal série (PuTTY, screen) pour reproduire le quirk DTR.
Code complet
// Échantillonnage non bloquant 20 Hz sur A0, format Traceur série.
const uint32_t PERIODE_US = 50000; // 50 ms = 20 Hz
uint32_t précédent = 0;
void setup {
Serial.begin(115200);
while (!Serial) { } // attend l'ouverture du port (utile sur les cartes USB natives)
Serial.println(F("pret")); // F : la chaîne vit en flash, pas en SRAM (2 Ko seulement !)
}
void loop {
uint32_t maintenant = micros;
if (maintenant - précédent >= PERIODE_US) {
précédent = maintenant;
int a0 = analogRead(A0);
int a1 = analogRead(A1);
// Le Traceur série trace une courbe par valeur séparée par tabulation :
Serial.print(a0); Serial.print("\t"); Serial.println(a1);
}
// ... ici on peut faire autre chose : le delay ne bloque plus la boucle.
}
Vérification attendue
Outils > Traceur série : deux courbes continues et régulières, sans trous. Si vous ouvrez le Moniteur, le message « pret » apparaît (la carte vient de re-démarrer — c'est le DTR !). Testez avec un terminal brut : les 2–3 premiers caractères émis juste après l'ouverture peuvent être perdus, et les premiers octets que VOUS envoyez peuvent être avalés par le bootloader.
Erreurs fréquentes
- Croire que les premiers caractères sont perdus « à cause d'Arduino » : c'est le reset DTR + fenêtre bootloader, documenté ; côté PC, ouvrez le port puis attendez ~2 s avant de parler.
- Imprimer des littéraux sans F : avec 2 Ko de SRAM, quelques Serial.print("longue chaîne") suffisent à fragmenter la mémoire et faire planter la carte.
- delay entre chaque mesure : la cadence devient fausse dès qu'une autre tâche arrive ; d'où micros.
- Confondre Moniteur (texte) et Traceur (courbes) : sans tabulation entre valeurs, le Traceur n'affiche qu'une courbe.
- 9600 bauds pour du 20 Hz multi-voies : passez à 115200, le 16U2 l'encaisse sans problème.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
clignotante.inoArduinobouton-poussoir.inoArduinopwm-fade.inoArduinocapteur-lumiere-ldr.inoArduinoservo-balayage.inoArduinoruban-neopixel.inoArduino