Die übertragung einer int zwei bytes an den Arduino

Ich bin der Probenahme bei hohen Frequenzen und übertragen müssen die 10-bit-ADC-Wert über die UART aus meinem Arduino.

Standardmäßig verwendet ein byte pro Zeichen. Also, wenn dies ein analogRead ergäbe den Wert von "612", es würde senden über UART "6" als ein byte, "1" als ein byte, "2" als ein byte, und das Zeilenabschlusszeichen als das Letzte byte.

Da meine Abtastrate ist abgeschnitten von dieser Mitteilung, ist es wichtig, dass es so effizient und einheitliche wie möglich, so bin ich versucht zu zwingen, es zu verwenden zwei bytes zu übertragen, die Daten, egal, was die tatsächlichen Daten (standardmäßig würde es werden drei bytes übertragen, "23", vier bytes für die übertragung "883" und fünf bytes für die übertragung "1001").

Derzeit bin ich etwas wie das zu tun, was ist der beste Weg den ich gefunden habe:

int a = 600; //Just an example
char high = (char)highByte(a);
char low = (char)lowByte(a);
Serial.print(high);
Serial.println(low);

Derzeit werden drei bytes (einschließlich \n) unabhängig vom Wert. Gibt es eine noch effizientere Methode?

Nur drucken Sie es mit etwas, wie

Serial.print(foo, BIN);

Funktioniert überhaupt nicht. Es verwendet ein byte pro jedes einzelne bit der binären Darstellung von foo, das ist ziemlich albern.

  • Nicht versenden newline überhaupt? Wenn Sie wissen, dass die Daten immer ein paar bytes, und keine Gedanken über ablegen eines byte (Sie können Synchronisations-bytes verteilt in den stream eher selten), dann gibt es keinen Grund, ein Zeilenumbruch. Außerdem, wenn Sie senden Sie die Daten als Binär -, was wird geschehen, wenn eines dieser bytes zufällig 10 (das gleiche wie ASCII-Zeilenvorschub)?
  • Serial.write() ist die Methode zum behandeln binärer Daten. Die Serielle.die print () - Funktionen sind so konzipiert, konvertieren Sie den Wert in einen lesbaren text.
InformationsquelleAutor Daniel | 2013-10-10
Schreibe einen Kommentar