Tengo un Arduino conectado a una caja de Linux (una Raspberry Pi). Estoy leyendo un pin analógico y lo escribo con Serial.println()
junto con el valor de millis()
El puerto serie se está ejecutando a 9600bps
Algo en las líneas de:
void Setup() {
Serial.begin(9600)
}
void loop() {
Serial.print(analogRead(A0));
Serial.print("\t");
Serial.println(millis());
}
En el extremo de recepción, veo un flujo continuo de 5 o 6 segundos, luego un espacio de 2 segundos sin datos, luego otros 5 o 6 segundos llenos de datos. No lo "veo" en vivo, pero graficando el valor de millis () con datos leídos desde el puerto serie.
Creo que podría ser que los datos se pierdan en el búfer de escritura del arduino, o que otra cosa lleve el tiempo del procesador cada 5 o 6 segundos (hay un escudo Ethernet no utilizado) o tal vez el puerto serie escribe en ráfagas .
Cuando aumente la velocidad en baudios a 115200, sigo teniendo intervalos de tiempo, pero parecen más aleatorios.
Actualización:
El aumento de la velocidad en baudios a 38400 eliminó las brechas en las muestras (brechas medidas en tiempo de arduino millis ())
Otra cosa extraña fue:
En el extremo receptor, estaba haciendo cat /dev/ttyACM0
y canalizándolo a awk
, lo que agregó el reloj del sistema a cada línea recibida. Luego graficé el tiempo recibido frente al sistema, y no era una línea recta, sino una trama como una escalera. Se eliminó el cat
innecesario y el tiempo volvió a la normalidad.
Resulta que cat /dev/ttyACM0 | awk {print}
no es lo mismo que </dev/ttyACM0 awk {print}
. Parece que el gato hace algunos búferes extraños.
Ahora parece que el arduino lee todos los valores.