現時点では、ルーターに接続されたイーサネット シールドを備えた Arduino ボードがあります。私のコンピュータは Wi-Fi 経由でこのルーターに接続します。私のボードと私のコンピューターは相互にUDPメッセージを送受信します。私のコンピューターはクライアントで、ボードはサーバーです。ただし、コンピューターから長い UDP メッセージを送信してから短い UDP メッセージを送信すると、Arduino は短いメッセージを受け入れ、その後に長いメッセージの残りのビットが続くことに気付きました。
たとえば、コンピューターから「Hello World」を送信し、その後に「Test」を送信するとします。Arduino は 2 番目のメッセージを「Test」ではなく、「Testo World」と読み上げます。
おそらく最初は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();
}
スケッチから正しいメッセージを送信するにはどうすればよいですか?
もちろん、私はより多くの情報を喜んで提供します。