通过UDP从Arduino以太网发送POT值

时间:2015-04-17 17:26:32

标签: java arduino processing

我有一个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); 
  }

 }

注意:可能有一些不成功的行,我无法从我修改的代码中删除。此外,模拟读取的映射值就像我不确定游戏目前还要接收的值范围一样。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我不能确切地说出了什么问题,但是这里有一些问题在你的代码中出现了。 Arduino代码在UDP.remotePort端口上发送消息。从我在其他地方读到的内容看来,这只会通过接收消息来设置,因此可以尝试使用远程IP对其进行硬编码以确保正确设置。

此外,我暂时会消除您的一个问题,只使用UDP终端。我之前在Windows http://www.hw-group.com/products/hercules/index_en.html上使用过Hercules。这将让您专注于Arduino代码,它应该让您看到正在发生的一切。 Wireshark将是另一个更复杂的选项,它可以让你真正看到你在网络上发送的内容。