2015-04-17 76 views
0

我有一個Arduino以太網裏面我是用對模擬器讀取POT價值觀,我想,然後用模擬器軟件上發送這些值到計算機,以便他們可以輸入到來自Arduino的以太網發送POT值遊戲。通過UDP

我通過UDP這樣做是誰寫的程序,它與遊戲整合傢伙說,這會更容易這樣,並從該控件記錄數據(用於研究目的)也將是更容易。不管這是否屬實,我無法改變這一點。

我目前正在寫一些代碼發送由POT一些處理代碼,然後將此值顯示讀取值。在我嘗試將這些代碼與遊戲等進行整合之前,這只是一箇中間步驟。在這方面,我是一個初學者,關於編程方面,我剛剛在這裏深入研究。雖然我可以編程,但這只是真的用matlab來製作數學程序。

我試圖修改的例子給出了一些代碼,並結束了與以下,但它不工作:

Aruino代碼:

的#include //需要Arduino的版本高於0018 #包括 的#include // UDP庫從:[email protected] 2008年12月30日

// 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); 
    } 

} 

注:有可能是一些uneccesary線在那裏,我都未能從中我修改了代碼刪除。此外,模擬讀取的映射值就像我不確定遊戲將要接收的值的範圍。

感謝您的幫助!

+0

你的問題是什麼? –

+0

好吧,什麼都沒有發生,當我運行處理代碼時,我沒有收到arduino的任何東西。所以有些地方出了問題,問題是我應該想像它有很多錯誤。 –

回答

0

我不能確切地說出了什麼問題,但這裏有一些東西在代碼中出現。 Arduino代碼通過UDP.remotePort端口發送消息。從我在其他地方看到的內容看來,這隻能通過接收消息來設置,所以也許嘗試對遠程IP進行硬編碼以確保其設置正確。

此外,我會暫時消除你的一個問題,只是使用UDP終端。我之前在Windows http://www.hw-group.com/products/hercules/index_en.html上使用過Hercules。這會讓你只關注Arduino代碼,它應該讓你看到正在發生的一切。 Wireshark將是另一個更復雜的選項,它可以真正讓你看到你在網絡上發送的內容。