Internet enheter för hemautomation (5 / 6 steg)
Steg 5: Här är koden
/*Denna skiss skickar ett UDP-meddelande sträng
Anthony Kelly 11/07/2012
Anpassad från UDPSendReceive.pde:
21 Aug 2010
av Michael Margolis
Denna kod är i public domain.
*/
#include < SPI.h > / / behövs för Arduino versioner senare än 0018
#include < Ethernet.h >
#include < EthernetUdp.h > / / UDP-bibliotek från: bjoern 2008-12-30
Ange en MAC-adress och IP-adressen för din controller nedan.
IP-adressen kommer att bero på ditt lokala nätverk:
byte mac [] = {
0x90, 0xA2, 0xDA, 0x00, 0x85, 0x46};
IP-adress ip (192, 168, 2, 177);
IP-adress rem_ip (192, 168, 2, 178);
unsigned int localPort = 8887; / / lokal port att lyssna på
unsigned int remPort = 8888; Fjärrport att skicka till
char GI; Få karaktär (gör detta till en matris för sträng Rx)
char snd; Överföra tecken (gör detta till en matris för sträng Rx)
Definiera de Arduino anslutningarna
int swPin0 = A0;
int swPin1 = A1;
int LEDPin = 9;
int sw0, sw1, swd0, swd1;
En EthernetUDP-instans att låta oss skicka och ta emot paket över UDP void setup() { pinMode(LEDPin,OUTPUT); void loop() { om (RcvPkt()) {
EthernetUDP Udp;
Serial.begin(9600);
Ethernet.BEGIN(Mac,IP);
Serial.Print ("servern är på");
Serial.println(Ethernet.localIP());
UDP.BEGIN(localPort);
Ställa in stiften till ingångarna och aktiverar pullups så vi inte behöver
externa pullup motstånd för växlarna
pinMode(swPin0,INPUT);
pinMode(swPin1,INPUT);
digitalWrite(swPin0,HIGH); / / Aktivera Pullup
digitalWrite(swPin1,HIGH); Aktivera Pullup
}
Vi fick bara ett UDP-paket så agera på den.
om (GI == '1') {
digitalWrite(LEDPin,HIGH);
Serial.println("on");
}
annars om (GI == '0') {
digitalWrite(LEDPin,LOW);
Serial.println("off");
}
}
Någon bara trycka på en knapp?
swd0 = sw0; Kom ihåg det gamla värdet av växeln
sw0 = digitalRead(swPin0); Få det nya värdet
swd1 = sw1;
SW1 = digitalRead(swPin1);
Om det gamla värdet trycktes inte (1) och det nya värdet trycks (0)
sedan trycktes bara nyckeln.
om (swd0 & &! sw0) snd = '1';
annars om (swd1 & &! sw1) snd = "0";
annat snd = '-';
Skicka ett paket, till den IP-adress och port Delay(100); int RcvPkt() {
om (snd! = '-') {
Udp.beginPacket (rem_ip, remPort);
UDP.write(SND);
Udp.endPacket();
}
}
om det finns data tillgängliga, läsa ett paket
int packetSize = Udp.parsePacket();
IF(packetSize)
{
Serial.Print ("mottagna paket av storlek");
Serial.println(packetSize);
Serial.Print ("från");
IP-adress remote = Udp.remoteIP();
för (int jag = 0; jag < 4; i ++)
{
Serial.Print (remote [i], DEC);
om (jag < 3)
{
Serial.Print(".");
}
}
Serial.Print (", port");
Serial.println(UDP.remotePort());
läsa in paketet i packetBufffer
Udp.read (& GI, 1);
Serial.println("Contents:");
Serial.println(rcv);
}
återvända packetSize;
}