#include <SPI.h> // needed for Arduino versions later than 0018
#include <Ethernet.h>
#include <Udp.h>
#include <avr/io.h>
#include <avr/wdt.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192,168,0,202 };
unsigned int localPort = 8888; // local port to listen on
byte remoteIp[] = { 192,168,0,201 };
byte remoteIp2[] = {192,168,0,203 };
unsigned int remotePort = 8888; // holds received packet's originating port
unsigned int remotePort2 = 8889;
char packetBuffer[UDP_TX_PACKET_MAX_SIZE];
int risposta;
int arrivo;
char invio[]="0";
int persi = 0;
int stato4 = 0;
int stato5 = 0;
int stato6 = 0;
int stato7 = 0;
int stati = 0;
void setup() {
wdt_enable(WDTO_2S);
pinMode(2, OUTPUT); //POMPA
pinMode(3, OUTPUT); //Acquedotto
pinMode(8, OUTPUT); //Assenza rete
pinMode(9, OUTPUT); //Reset Arduino
digitalWrite(9,LOW);
pinMode(4,INPUT); //Pompa ON
pinMode(5,INPUT); //Acquedotto ON
pinMode(6,INPUT); //Avaria Pompa
pinMode(7,INPUT); //Energia Elettrica
Ethernet.begin(mac,ip);
Udp.begin(localPort);
Serial.begin(9600);
}
void loop() {
wdt_reset();
stati = 0;
//char packetBuffer[] = "0";
int packetSize = Udp.available();
if(packetSize)
{ persi =0;
Udp.readPacket(packetBuffer,UDP_TX_PACKET_MAX_SIZE, remoteIp, remotePort);
arrivo=atoi(packetBuffer);
Serial.print("Ho Ricevuto:");
Serial.println(arrivo);
switch (arrivo) {
case 1:
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
break;
case 2:
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
break;
case 3:
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
delay (5000);
break;
default:
digitalWrite(2, LOW);
digitalWrite(3, LOW);
}}
else { persi= persi+1;}
if (persi >20){
digitalWrite(2, LOW);
digitalWrite(3, LOW);
Serial.println("Nessun Collegamento");}
if (persi == 100){
digitalWrite(9,HIGH);
delay(50);
digitalWrite(9,LOW);}
Serial.print("pacchetti Persi: ");
Serial.println(persi);
Serial.println();
stato4 = digitalRead(4);
stato5 = digitalRead(5);
stato6 = digitalRead(6);
stato7 = digitalRead(7);
if (stato4 == HIGH) { (stati=stati+1); }
if (stato5 == HIGH) { (stati=stati+2); }
if (stato6 == HIGH) { (stati=stati+4); }
if (stato7 == LOW) { (stati=stati+8);
digitalWrite(8, HIGH); }
if (stato7 == HIGH) {digitalWrite(8, LOW);}
itoa(stati,invio,10);
//invio[0] = char(stati);
//invio[1] = '\0';
Serial.print("Ho inviato");
Serial.println(invio);
Udp.sendPacket( invio, remoteIp, remotePort);
Udp.sendPacket( invio, remoteIp2, remotePort2);
delay(250);
}
lo avevo fatto per vedere se funzionava il watchdog...nel caso avessi ricevuto 3 doveva attendere 5 secondi, quindi scattare il watchdog