我有一个Arduino以太网用于在模拟器上读取POT值,然后我想将这些值发送到计算机上,并使用模拟器软件将它们输入到游戏中。
我通过UDP做这个,因为编写程序将其与游戏集成的人说这样会更容易,并且从控件(用于研究目的)记录数据也会更容易。无论这是否属实,我都无法改变这一点。
我目前正在尝试编写一些代码,将POT读取的值发送到某些处理代码,然后显示该值。在尝试将此代码与游戏等集成之前,这只是一个中间步骤。我是关于这方面编程的初学者,我刚刚被深入到这里。虽然我可以编程,但这只是用matlab制作数学程序。
我试图修改示例中给出的一些代码,最终得到以下内容,但它不起作用:
Aruino代码:
#include //超过0018的Arduino版本需要 #包括 #include // UDP库来自:bjoern@cs.stanford.edu 12/30/2008
// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = {
0x90, 0xA2, 0xDA, 0x0F, 0xC6, 0x1F
};
IPAddress ip(192, 168, 0, 177);
unsigned int localPort = 8888; // local port to listen on
// buffers for receiving and sending data
char packetBuffer[UDP_TX_PACKET_MAX_SIZE]; //buffer to hold incoming packet,
char ReplyBuffer[] = "acknowledged"; // a string to send back
// An EthernetUDP instance to let us send and receive packets over UDP
EthernetUDP Udp;
int potPin = 2; // select the input pin for the potentiometer
int val = 0; // variable to store the value coming from the sensor
int mapped = 0;
void setup() {
// start the Ethernet and UDP:
Ethernet.begin(mac,ip);
Udp.begin(localPort);
}
void loop() {
val = analogRead(potPin); // read the value from the sensor
mapped = map(val, 0, 1023, 0, 5000);
Serial.print(analogRead(potPin));
Serial.print(mapped);
delay (400);
Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
Udp.write(mapped);
Udp.endPacket();
}
处理代码:
import hypermedia.net.*;
UDP udp; // define the UDP object
String value = "0";
void setup() {
size(480,640);
background(0);
smooth();
udp = new UDP( this, 3000 ); // create a new datagram connection on port 6000
udp.log( true ); // <-- printout the connection activity
udp.listen( true ); // and wait for incoming message
}
void receive( byte[] data ) { // <-- default handler
//void receive( byte[] data, String ip, int port ) { // <-- extended handler
value=new String(data);
println(value);
}
void draw()
{
fill(50);
if (value != "0") {
text(value, 10, 10, 70, 80);
}
}
注意:可能有一些不成功的行,我无法从我修改的代码中删除。此外,模拟读取的映射值就像我不确定游戏目前还要接收的值范围一样。
感谢您的帮助!
答案 0 :(得分:0)
我不能确切地说出了什么问题,但是这里有一些问题在你的代码中出现了。 Arduino代码在UDP.remotePort端口上发送消息。从我在其他地方读到的内容看来,这只会通过接收消息来设置,因此可以尝试使用远程IP对其进行硬编码以确保正确设置。
此外,我暂时会消除您的一个问题,只使用UDP终端。我之前在Windows http://www.hw-group.com/products/hercules/index_en.html上使用过Hercules。这将让您专注于Arduino代码,它应该让您看到正在发生的一切。 Wireshark将是另一个更复杂的选项,它可以让你真正看到你在网络上发送的内容。