🛠 Télémétrie série robuste vers le Traceur série
Objetivos
Enviar datos del UNO al PC correctamente: cadenciar el muestreo con micros/millis en lugar de delay, ahorrar SRAM con la macro F, y sobre todo comprender la peculiaridad del reinicio automático DTR: el UNO se reinicia cada vez que se abre el puerto serie y su bootloader «intercepta los primeros bytes» enviados tras la conexión.
Material
- 1 Arduino UNO R3 + cable USB-B (el 16U2 hace el puente USB-serie, no se requiere nada más)
- PC con el Arduino IDE (Monitor + Trazador serie)
- Opcionalmente, otro terminal serie (PuTTY, screen) para reproducir la peculiaridad DTR.
Código completo
// Échantillonnage non bloquant 20 Hz sur A0, format Traceur série.
const uint32_t PERIODE_US = 50000; // 50 ms = 20 Hz
uint32_t precedent = 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 - precedent >= PERIODE_US) {
precedent = 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.
}
Verificación esperada
Herramientas > Trazador serie: dos curvas continuas y regulares, sin huecos. Si abre el Monitor, aparecerá el mensaje «pret» (la placa acaba de reiniciarse: ¡es el DTR!). Pruebe con un terminal en bruto: los 2–3 primeros caracteres emitidos justo después de abrir el puerto pueden perderse, y los primeros bytes que USTED envía pueden ser absorbidos por el bootloader.
Errores frecuentes
- Creer que los primeros caracteres se pierden «a causa de Arduino»: es el reinicio DTR + la ventana del bootloader, algo documentado; en el lado del PC, abra el puerto y espere ~2 s antes de comunicarse.
- Imprimir literales sin F: con 2 KB de SRAM, unos pocos Serial.print("cadena larga") bastan para fragmentar la memoria y hacer que la placa falle.
- delay entre cada medición: la cadencia se vuelve incorrecta en cuanto aparece otra tarea; de ahí el uso de micros.
- Confundir Monitor (texto) y Trazador (curvas): sin tabulación entre valores, el Trazador solo muestra una curva.
- 9600 baudios para 20 Hz multicanal: pase a 115200, el 16U2 lo soporta sin problemas.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
clignotante.inoArduinobouton-poussoir.inoArduinopwm-fade.inoArduinocapteur-lumiere-ldr.inoArduinoservo-balayage.inoArduinoruban-neopixel.inoArduino