目前我有一個以太網盾連接到路由器的Arduino板。我的電腦通過Wi-Fi連接到這臺路由器。我的主板和我的電腦互相發送UDP消息。我的電腦是客戶端,而主板是服務器。但是我注意到,當我從計算機發送更長的UDP消息,然後發送更短的UDP消息時,Arduino接受較短的消息,然後接着來自較長消息的剩餘位。例如:如果我從我的電腦發送「Hello World」,然後是「測試」; Arduino將不會將第二條消息讀爲「Test」,而是將其稱爲「Testo World」。Arduino:UDP發送產生額外的字符
我以爲也許是來自Arduino的第一個問題。 Arduino將這些消息暫時存儲在一個名爲packetBuffer
的數組中。我在每次收到新消息之前嘗試清除此緩衝區。該緩衝區將清除,但然後我會再次收到錯誤消息。
所以我假設罪魁禍首是電腦,客戶端。在計算機端,我有一個處理草圖發送UDP消息。下面的例子不是草圖本身;但是,這是一個更簡單的例子,它仍然提供了我用原始草圖描述的確切症狀。
import hypermedia.net.*;
UDP udp; // define the UDP object
void setup() {
udp = new UDP(this, 6000); // Create a new datagram connection on port 6000
//udp.log(true); // <-- printout the connection activity
udp.listen(true); // and wait for incoming message
}
void keyPressed() {
String IPaddress = "192.168.1.177"; // The remote IP address
int port = 8888; // The destination port
if (keyCode == UP)
{
udp.send("Test", IPaddress, port);
}
else
if (keyCode == DOWN)
{
udp.send("Hello World", IPaddress, port);
}
}
void receive(byte[] data) { // <-- default handler
//void receive(byte[] data, String IPaddress, int port) { // <-- extended handler
for(int i=0; i < data.length; i++)
print(char(data[i]));
println();
}
我怎樣才能得到草圖發送正確的消息?
當然我很樂意提供更多信息。
我會開始使用Wireshark來查看消息是否被傳輸錯誤。如果傳輸正常,它必須在接收端。 – 2012-07-19 09:13:55
好的建議;令人驚訝的是,wireshark顯示從電腦發送的信息沒有錯誤。也許我的問題在於Arduino。感謝那! – 2012-07-20 01:14:33
你可以顯示你的UDP類的代碼嗎? – 2012-07-20 10:09:23