0

シリアル ポート経由で接続された arduino に文字列を送信するには、文字列を適切にフォーマットする必要があります。たとえば、私はこの python2.7.5 コードを持っています:

x = int(7)
y = int(7000.523)
self.ser.write("%s%s" % (x, y))

しかし、x を 1 バイトに、y を x とは異なるバイトに入れたいので、次のような arduino コードで受信した各バイトに変数を割り当てることができます。

for (i=0; i<3; i++) 
  {
   bufferArray[i] = Serial.read();
  } 
d1 = bufferArray[0];
d2 = bufferArray[1];
d3 = bufferArray[2];
x = d1;
y = (d2 << 8) + d3;

言い換えれば、y の一部が x バイトにあることは望ましくありません。これを行うための適切な文字列形式は何ですか?

4

1 に答える 1

1

@Mattias Nilsson のアドバイスに従って、2 つの連続する 16 ビット符号なし整数を送信する場合のサンプル コードがあります。

import struct
x = int(7)
y = int(7000.523)
buf = struct.pack("<HH", x, y)
# read it back
for i in buf:
    print "%02x" % (ord(i))

それぞれ 2 バイトで送信され、LSB バイトが常に最初であることがわかります。(インテル x64 マシン python 2.7.5 でテスト済み) 編集:<フォーマット文字列の先頭にリトル エンディアン オーダーの文字を使用して、エンディアンを明示的に設定できるはずです。

次に、Serial.write を使用してバッファと文字列の両方を送信できます。

self.ser.write(buf+yourstring+'\0')

文字列を終了するゼロ文字に気付くことができます。このような文字列を送信する場合、文字列にゼロバイト文字を送信しないでください。

arduino側では、最初にこれら2つの整数を読み取ってデコードし、次にゼロバイトを読み取った場合に読み取りを終了するループで文字を読み取る必要があります。読み取りバッファもオーバーフローしないかどうかを必ず確認する必要があります。

于 2013-08-04T10:39:43.333 に答える