私はArduinoプロジェクトに取り組んでいますが、メモリの制限のため、Pythonスクリプトとのインターフェースを取っています。Python側では、座標のそれぞれのx、y値を含む2次元の行列があり、このリストには26000の座標ペアがあります。したがって、すべての人のデータ構造を明確にするために、、pathlist[0][0]
は私のリストの最初の座標のX値を返します。このリストでPythonでさまざまな操作などを実行しても、問題はありません。しかし、私が問題にぶつかっているのは、これらの値をシリアル経由でArduinoに送信することです。これは便利な方法です。
シリアル通信の性質上(少なくともこれが当てはまると思います)、各整数を文字列として、一度に1桁だけ送信する必要があります。したがって、345のような数字は、3つの個別の文字として送信されます。もちろん、3、4、5の順になります。
私が苦労しているのは、Arduinoでそれらの整数を再構築する方法を見つけることです。
値を送信するたびに、データを受信して次のように出力します。
//Python is sending over the number '25'
2ÿÿ52
//Python is sending the number 431.
4ÿÿ321ÿÿÿ2
Arduinoコードは次のとおりです。
String str;
int ds = 4;
void setup() {
Serial.begin(9600);
}
void loop(){
if (Serial.available()>0) {
for (int i=0; i<4; i=i+1) {
char d= Serial.read();
str.concat(d);
}
char t[str.length()+1];
str.toCharArray(t, (sizeof(t)));
int intdata = atoi(t);
Serial.print(intdata);
}
}
そして、Pythonコードは次のようになります。
import serial
s = serial.Serial(port='/dev/tty.usbmodemfd131', baudrate=9600)
s.write(str(25))
問題はoutputメソッド()に起因するものではないとほぼ確信していSerial.print
ます。別のintを宣言すると、出力で正常にフォーマットされるため、問題はintdata
変数の構成方法にあると考えられます。
この問題の診断に役立つ可能性のある注意点の1つは、結果を変更Serial.print(intdata)
すると、30(25 + 5)になると予想されることです。この7は、入力に関係なく存在します。たとえば、シリアルに271を書き込むと、結果は次のようになります。Serial.print(intdata+5)
2ÿÿ57
//For input 271.
2ÿÿ771ÿÿÿ7
Arduinoは値を2つのペアにチャンクし、最後に長さを追加しているように見えます。なぜそうなるのか理解できません。
またÿ
、forループにが追加されているように見えます。その時点では何も送信されていないため、追加されていることを意味します。しかし、さらに別のif(Serial.available()>0)
条件を追加してそれを修正しても、結果は整数のようには扱われません。
また、ここではピクルスを使用するのが適切でしょうか?私は何が間違っているのですか?