Salve a tutti,
con questo sketch
/*
Apertura cancello e suoneria
Novembre 2013
Roberto Ceccherini
*/
//Librerie impiegate per il progetto
#include <SPI.h>
#include <Ethernet.h>
#include <EthernetUdp.h>
//Creo un array di byte per specificare il mac address
byte mac[] = {
0x90, 0xA2, 0xDA, 0x0A, 0xF3, 0xC5 };
//creo un array di byte per specificare l'indirizzo ip per la villa
IPAddress ip( 192, 168, 1, 47); //modificare questo valore in base alla rete
//Creo un array per definire il gateway
IPAddress gateway(192, 168, 1, 254);
//Creo un array per la subnet
IPAddress subnet(255, 255, 255, 0);
// inririzzi ip remoti
IPAddress remoteC(192, 168, 1, 46);
//porta utilizzata per UDP
unsigned int localPort = 7878;
unsigned int remoteP = 7878;
int richiestaL = 1;
int richiestaC = 1;
int suoneria = 2; //pin per la suoneria del campanello (verificare se ci si deve collegare il relay a 12V)
int apriPorta = 6; //pin per il pulsante apertura cancello a muro (verificare se ci si deve collegare il relay a 12V)
int accendiLuce = 7; //pin per il pulsante accesione luce
String ric;
char packetBuffer[UDP_TX_PACKET_MAX_SIZE];
char senData = 'a';
char senDatal = 'l';
//creo un oggetto server che rimane in ascolto sulla porta
//specificata ed un oggetto UDP
EthernetServer ArduinoServer(80);
EthernetUDP Udp;
void setup()
{
//inizializza lo shield con il mac e l'ip
Ethernet.begin(mac, ip, gateway, subnet);
//inizializza la porta UDP
Udp.begin(localPort);
//inizializza l'oggetto server
ArduinoServer.begin();
//inizializza la porta seriale
Serial.begin(9600);
//definisco il pin 2 come uscita ed il pin 6 come ingresso in HIGH
pinMode(suoneria, OUTPUT); //collegare un filo dal pin 2 un filo da GND ed uno da 5V (per il relay)
pinMode(apriPorta, INPUT_PULLUP); //collegare un filo al pin di input ed uno a GND
pinMode(accendiLuce, INPUT_PULLUP); //collegare un filo al pin di input ed uno a GND
Serial.println("Arduvilla Ver. 1.0");
Serial.println(Ethernet.localIP());
}
void loop()
{
richiestaL = 1;
richiestaC = 1;
int dimPac = Udp.parsePacket();
if(dimPac)
{
Udp.read(packetBuffer, UDP_TX_PACKET_MAX_SIZE);
String ric = (packetBuffer);
Serial.println(ric);
for(int i=0;i<UDP_TX_PACKET_MAX_SIZE;i++) packetBuffer[i] = 0;
if (ric == ("s"))
{
Serial.println("attivo il campanello");
digitalWrite(suoneria, HIGH);
delay(5000);
Serial.println("disattivo il campanello");
digitalWrite(suoneria, LOW);
}
}
//spedici messaggio se premono il pulsante a muro apertura cancello
int camp = digitalRead(apriPorta);
if (camp == LOW)
{
if (richiestaC <=1)
{
//mando il messaggio al cancello
Serial.println("chiedo apertura cancello");
Udp.beginPacket(remoteC, remoteP);
Udp.write(senData);
Udp.endPacket();
delay(10);
richiestaC = richiestaC++;
}
}
//spedici messaggio se premono il pulsante a muro accensione luce
int luce = digitalRead(accendiLuce);
if (luce == LOW)
{
if (richiestaL <= 1)
{
Serial.println("chiedo accensione luce");
Udp.beginPacket(remoteC, remoteP);
Udp.write(senDatal);
Udp.endPacket();
delay(10);
richiestaL = richiestaL++;
}
}
}
premendo un pulsante spedisco ad un altro arduino, nella stessa rete interna, un messaggio per attivare il relay per aprire il cancello o di attivare il relay per accendere la luce. Il problema è che sia la pressione del pulsante apriPorta che l'altro accendiLuce, generano 9 richiesta che vengono spedite, ed eseguite, tutte e 9.
.... segue nel post successivo