我正在開發一個Arduino項目,並且由於內存限制,我將它與Python腳本連接起來。在Python方面,我有一個2維矩陣,它包含座標各自的x,y值,並且在這個列表中有26000個座標對。因此,爲了澄清你們所有人的數據結構,pathlist[0][0]
將返回我列表的第一個座標的X值。在Python這個列表中執行不同的操作等沒有任何問題。然而,我遇到麻煩的地方是,通過串行方式將這些值發送給Arduino,這種方式非常有用。Python串行通信
由於串行通信的性質(至少我認爲是這種情況),我必須將每個整數作爲一個字符串發送,並且一次只發送一個數字。所以,像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))
我幾乎可以肯定,問題不是源於輸出方法(Serial.print
),看到當我聲明另一個int時,它的輸出格式很好,所以我假設問題在於如何構造intdata
變量。
可能有助於診斷此問題的一件事是,如果我將Serial.print(intdata)
更改爲Serial.print(intdata+5)
,我的結果是2ÿÿ57
,其中我期望30(25 + 5)。無論輸入如何,這7個都存在。比如我可以寫271到串行和我的結果將如下所示:
//For input 271.
2ÿÿ771ÿÿÿ7
這在我看來,Arduino是分塊的值到對兩個附加的長度到底。我不明白爲什麼會發生。
在我看來,ÿ
被加入for循環。這意味着他們被添加,因爲當前沒有任何內容正在發送。但即使通過添加另一個if(Serial.available()>0)
條件來修復,結果仍不會像整數那樣處理。
另外,會用Pickle在這裏適合嗎? 我在做什麼錯?
這是爲什麼標籤'java'? – NPE 2011-05-18 17:07:45
@aix嗯,我認爲Arduino是基於Java的,因此Java的知識將適用於它。如果我錯了,我很樂意改變它:D – danem 2011-05-18 17:12:21
這只是恰好是用Java編寫的Arduino IDE。你在Arduino上運行的代碼是C語言,所以Java與這個問題無關。 – NPE 2011-05-18 17:15:27