Stap 5: Hier is de Code
/*Deze sketch stuurt een UDP-bericht tekenreeks
Anthony Kelly 07/11/2012
aangepast van UDPSendReceive.pde:
21 Aug 2010
door Michael Margolis
Deze code is in het publieke domein.
*/
#include < SPI.h > / / nodig voor Arduino versies later dan 0018
#include < Ethernet.h >
#include < EthernetUdp.h > / / UDP-bibliotheek: bjoern 12/30/2008
Voer een MAC-adres en het IP-adres voor uw controller hieronder.
Het IP-adres zal afhankelijk van uw lokale netwerk zijn:
byte mac [] {} =
0x90, 0xA2, 0xDA, 0x00, 0x85, 0x46};
IP-adres ip (192, 168, 2, 177);
IP-adres rem_ip (192, 168, 2, 178);
unsigned int localPort = 8887; / / lokale poort te luisteren op
unsigned int remPort = 8888; / / remote poort te sturen naar
char HS; / / Krijgen karakter (maken dit een matrix voor String Rx)
char snd; / / Verzenden karakter (maken dit een matrix voor String Rx)
De Arduino verbindingen definiëren
int swPin0 = A0;
int swPin1 = a1 worden verkregen;
int LEDPin = 9;
int sw0, sw1, swd0, swd1;
Een exemplaar van de EthernetUDP te laten verzenden en ontvangen van pakketten via UDP VOID Setup {}
EthernetUDP Udp;
Serial.begin(9600);
Ethernet.begin(Mac,IP);
Serial.Print ("server is op");
Serial.println(Ethernet.localIP());
UDP.begin(localPort);
pinMode(LEDPin,OUTPUT);
Stel de pinnen op de ingangen en de pullups inschakelen, zodat we niet hoeven
externe pullup resistors voor de wissels en kruisingen
pinMode(swPin0,INPUT);
pinMode(swPin1,INPUT);
digitalWrite(swPin0,HIGH); / / Enable Pullup
digitalWrite(swPin1,HIGH); Pullup inschakelen
}
void loop {}
Als (RcvPkt()) {}
We zopas een UDP-pakket dus handelen daarover.
als (HS == '1') {}
digitalWrite(LEDPin,HIGH);
Serial.println("on");
}
anders als (HS == '0') {}
digitalWrite(LEDPin,LOW);
Serial.println("off");
}
}
/ / Heeft iemand net een drukknop?
swd0 = sw0; / / Onthouden van het oude starttype van de schakelaar
sw0 = digitalRead(swPin0); / / Krijgen de nieuwe waarde
swd1 = sw1;
SW1 = digitalRead(swPin1);
Als de oude waarde niet ingedrukt was (1) en de nieuwe waarde wordt gedrukt (0)
de toets is dan gewoon ingedrukt.
als (swd0 & &! sw0) snd = '1';
anders als (swd1 & &! sw1) snd = "0";
anders snd = '-';
verzenden van een pakket, met het IP-adres en poort int RcvPkt() {}
als (snd! = '-') {}
Udp.beginPacket (rem_ip, remPort);
UDP.write(snd);
Udp.endPacket();
}
delay(100);
}
Als er gegevens beschikbaar is, gelezen een pakje
int packetomvang = Udp.parsePacket();
if(packetSize)
{
Serial.Print ("ontvangen pakje grootte");
Serial.println(packetSize);
Serial.Print ("uit");
Extern IPAdres = Udp.remoteIP();
for (int i = 0; ik < 4; i ++)
{
Serial.Print (extern [i], DEC);
Als (ik < 3)
{
Serial.Print(".");
}
}
Serial.Print (", port");
Serial.println(UDP.remotePort());
het pakket in packetBufffer lezen
Udp.read (& HS, 1);
Serial.println("Contents:");
Serial.println(RCV);
}
Return packetomvang;
}