Questo è quello che invia il comando di accensione pozzo/acquedotto e tramite led mostra lo stato del remoto!
//Arduino Casanova aggiornato al 7 Marzo 2011 - Versione senza serial print
#include <SPI.h>
#include <Ethernet.h>
#include <Udp.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xEE };
byte ip[] = { 192,168,0,201 }; //Indirizzo IP
unsigned int localPort = 8888; //Porta
byte remoteIp[] = { 192,168,0,202 }; // Ip arduino Capannacce
unsigned int remotePort = 8888 ; // Porta arduino capannacce
char packetBuffer[UDP_TX_PACKET_MAX_SIZE];
int timer =0;
int stati = 0;
int stato1 = 0;
int stato2 = 0;
int ricevuto = 0;
char invio[] = "0";
//unsigned int sentSize = 0;
void setup() {
Ethernet.begin(mac,ip);
Udp.begin(localPort);
Serial.begin(9600);
pinMode(2,INPUT); //pompa
pinMode(3,INPUT); //Acquedott
pinMode(4,OUTPUT); //pompa
pinMode(5,OUTPUT); //Acquedotto
pinMode(6,OUTPUT); //Avaria
pinMode(7,OUTPUT); //Assenza Energia
pinMode(8,OUTPUT); //assenza rete access point
}
void loop() {
stati = 0;
stato1 = digitalRead(2);
stato2 = digitalRead(3);
if (stato1 == HIGH) { stati = stati+1;}
if (stato2 == HIGH){ stati =stati+2; }
itoa(stati,invio,10);
ket( invio, remoteIp, remotePort);
//char packetBuffer[] = "0";
int packetSize = Udp.available(); // note that this includes the UDP header
if(packetSize)
{ digitalWrite(8, LOW);
timer = 0;
Udp.readPacket(packetBuffer,UDP_TX_PACKET_MAX_SIZE, remoteIp, remotePort);
ricevuto=atoi(packetBuffer);
switch (ricevuto) {
case 1:
digitalWrite(4, HIGH);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
break;
case 2:
digitalWrite(4, LOW);
digitalWrite(5, HIGH);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
break;
case 3:
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
break;
case 4:
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, HIGH);
digitalWrite(7, LOW);
break;
case 5:
digitalWrite(4, HIGH);
digitalWrite(5, LOW);
digitalWrite(6, HIGH);
digitalWrite(7, LOW);
break;
case 6:
digitalWrite(4, LOW);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, LOW);
break;
case 7:
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, LOW);
break;
case 8:
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, HIGH);
break;
case 9:
digitalWrite(4, HIGH);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, HIGH);
break;
case 10:
digitalWrite(4, LOW);
digitalWrite(5, HIGH);
digitalWrite(6, LOW);
digitalWrite(7, HIGH);
break;
case 11:
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, LOW);
digitalWrite(7, HIGH);
break;
case 12:
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
break;
case 13:
digitalWrite(4, HIGH);
digitalWrite(5, LOW);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
break;
case 14:
digitalWrite(4, LOW);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
break;
case 15:
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
break;
default:
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
}
}
else { timer = timer+1;
if (timer > 20){
//Serial.println("NESSUNA RISPOSTA");
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, HIGH);}
}
Serial.println(timer);
delay (500);
}
Questo è il remoto: accende pompa o pozzo e manda informazioni sugli stati
//aggiornato al 7 marzo 2011, versione senza serial print
#include <SPI.h>
#include <Ethernet.h>
#include <Udp.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192,168,0,202 }; //Indirizzo Ip
unsigned int localPort = 8888; // Porta in ascolto
byte remoteIp[] = { 192,168,0,201 }; //Indirzzo IP Arduino Casanova
unsigned int remotePort = 8888; // Porta Arduino Casanova
char packetBuffer[UDP_TX_PACKET_MAX_SIZE]; //buffer to hold incoming packet,
int arrivo;
char invio[] = "0";
int timer = 0;
int stato4 = 0;
int stato5 = 0;
int stato6 = 0;
int stato7 = 0;
int stati = 0;
void setup() {
pinMode(2, OUTPUT); // Pompa
pinMode(3, OUTPUT); // Acquedotto
pinMode(8, OUTPUT); //Assenza Energia Eleettrica
pinMode(4,INPUT); // Pompa
pinMode(5,INPUT); // Acquedotto
pinMode(6,INPUT); // Avaria Pompa
pinMode(7,INPUT); //Energia Elettrica
// start the Ethernet and UDP:
Ethernet.begin(mac,ip);
Udp.begin(localPort);
Serial.begin(9600);
}
void loop() {
stati = 0;
int packetSize = Udp.available();
if(packetSize) //controlla se c'è un pacchetto UDP
{ timer =0;
// read the packet into packetBufffer and get the senders IP addr and port number
Udp.readPacket(packetBuffer,UDP_TX_PACKET_MAX_SIZE, remoteIp, remotePort);
arrivo=atoi(packetBuffer);
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);
break;
default:
digitalWrite(2, LOW);
digitalWrite(3, LOW);
}}
else {
timer= timer+1;
if (timer >20){
digitalWrite(2, LOW);
digitalWrite(3, LOW);
//Serial.print("Nessun Collegamento");}
}
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);
Udp.sendPacket( invio, remoteIp, remotePort);
delay(500);
}