0

シリアルポートを介してArduinoと通信しようとしているPython 3.2を使用しています。ドキュメントから、Arduino Serial.Read() が個々のバイトを読み取ることを理解しました。ただし、これを実装しようとすると、Serial.Read() は送信したすべての数値を読み取ります。これが私のPythonとArduinoのコードです

たとえば、Arduino に送信する値 412 があります。

パイソン:

xCoordint = 412
xCoordConverted = "%03d" % (xCoordint)
xCoord = [int(i) for i in str(xCoordConverted)]
xSingleDigit0 = chr(int(xCoord[0] + 48))
xSingleDigit1 = chr(int(xCoord[1] + 48))
xSingleDigit2 = chr(int(xCoord[2] + 48))
ser.write (bytes(xSingleDigit0, 'UTF-8'))
ser.write (bytes(xSingleDigit1, 'UTF-8'))
ser.write (bytes(xSingleDigit2, 'UTF-8'))

アルドゥイーノ:

char joinCharX[3] ;
int n_avail = Serial.available();
  if(n_avail>0){ 
    for (int i=0;i<3; i++){
      joinCharX[i] = Serial.read();
    }
int xCoords = atoi(joinCharX);
Serial.print(joinCharX[0]);

返されたときの joinCharX[0] は 4 ではなく 412 です。なぜそうなのか、一度に 1 バイトずつ読み取るように戻すにはどうすればよいのでしょうか。

4

1 に答える 1

0

試す:

char joinCharX[3] ;
int n_avail = Serial.available();
  if(n_avail>0){ 
    for (int i=0;i<3; i++){
      joinCharX[i] = Serial.read(1);  # Note the parameter
    }
int xCoords = atoi(joinCharX);
Serial.print(joinCharX[0]);

これにより、一度に 1 文字ずつ読み取られるようになります。

修正:

上記のように文字なしを制限することはできませんが、問題は、print ステートメントが最初の文字を文字列の開始として受け取ることです。最初の文字だけを表示したい場合は、使用する必要があります。

char forprint;
:
:
forprint = joinCharX[0];
Serial.print (forprint);
于 2013-08-10T17:29:07.913 に答える