Un exemple valant mieux qu'un long discourt.
#include <SPI.h>
#include <Ethernet.h>
#include <EthernetUDP.h>
const unsigned int udpPort = 30666;
byte mac[] = { 0x90, 0xA2, 0xDA, 0x01, 0x01, 0x01 };
IPAddress IPgateDNS(10, 0, 0, 1);
IPAddress IP2(10, 0, 0, 2);
IPAddress IP3(10, 0, 0, 3);
IPAddress mask(255, 0, 0 ,0);
IPAddress broadcast(10, 255, 255, 255);
unsigned long monTimer = 0;
byte maBoucle = 0;
EthernetUDP udp;
void udpPacket(void);
void setup()
{
Serial.begin(9600);
Ethernet.begin(mac, IP2, IPgateDNS, IPgateDNS, mask);
udp.begin(udpPort);
udpPacket();
while(Ethernet.localIP()==IP2)
{
if (millis()-monTimer>10000)
{
monTimer=millis();
maBoucle++;
Serial.println("Boucle");
Serial.println(Ethernet.localIP());
if (maBoucle>2)
{
Ethernet.begin(mac, IP3, IPgateDNS, IPgateDNS, mask);
}
else
{
udpPacket();
}
}
}
Serial.println("FinBoucle");
Serial.println(Ethernet.localIP());
udp.beginPacket(broadcast, udpPort);
Serial.println("Tag1");
udp.write("VRB");
Serial.println("Tag2");
udp.write(mac,6);
Serial.println("Tag3");
udp.endPacket();
Serial.println("Tag4");
}
void loop()
{
Serial.println("TheEnd");
delay(15000);
}
void udpPacket(void)
{
udp.beginPacket(broadcast, udpPort);
udp.write("ASK");
udp.write(mac,6);
udp.endPacket();
}
Sortie série:
Boucle
10.0.0.2
Boucle
10.0.0.2
Boucle
10.0.0.2
FinBoucle
10.0.0.3
Tag1
Tag2
Tag3
Je ne passe pas le Tag4.