高周波でサンプリングしており、Arduino から UART 経由で 10 ビットの ADC 値を送信する必要があります。
デフォルトでは、1 文字あたり 1 バイトを使用します。したがって、analogRead を実行すると "612" の値が得られる場合、UART 経由で "6" を 1 バイトとして、"1" を 1 バイトとして、"2" を 1 バイトとして、行ターミネータを最後のバイトとして送信します。
この通信によってサンプリング レートが切り捨てられることを考えると、可能な限り効率的かつ均一であることが重要です。そのため、実際のデータが何であるかに関係なく、そのデータを送信するために 2 バイトを使用するように強制しようとしています (byデフォルトでは、"23" の送信に 3 バイト、"883" の送信に 4 バイト、"1001" の送信に 5 バイトが使用されます)。
現在、私はこのようなことをしています。これは私が見つけた最良の方法です:
int a = 600; //Just an example
char high = (char)highByte(a);
char low = (char)lowByte(a);
Serial.print(high);
Serial.println(low);
現在、これは値に関係なく 3 バイト (\n を含む) を使用します。さらに効率的な方法はありますか?
のようなもので印刷するだけです
Serial.print(foo, BIN);
まったく機能しません。実際には、foo のバイナリ表現の各ビットごとに 1 バイトを使用しますが、これは非常にばかげています。