Hola a todos
Estoy haciendo un comunicador udp para un sistema de alarmas de casa. La idea es que cuando se dispara la sirena de la alarma, me active un relay que abre un circuito y el arduino me envia la informacion de la zona que esta abierta en la alarma.
Lo que deseo hacer es que si la alarma esta sonando, el arduino que tendra conectado 9 pines en serie con las zonas de la alarma, comience a revisar cuales zonas estan abiertas y me envie la informacion. en intervalos de 30 segundos, durante los 4 minutos que normalmente dura sonando la alarma.
Problemas:
Lograr que haga la revision de todas las zonas y me vaya enviando los datos segun los va revisando.
lograr que haga la revision de todas las zonas cada 30 segundos
lograr enviar los datos a una direccion dyndns.
-Hasta ahora he podido lograr que envie el dato de la zona abierta, pero luego espera 30 segundos para poder registrar la otra, se que me falta otra variable, pero estoy bloqueado y agradecere su ayuda. aqui va el codigo:
#include <SPI.h> // needed for Arduino versions later than 0018
#include <Ethernet.h>
#include <EthernetUdp.h> // UDP library from: bjoern@cs.stanford.edu 12/30/2008
// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 69, 200);
//IPAddress remip(10, 0, 0, 2);
unsigned int localPort = 5015; // local port to listen on
// buffers for receiving and sending data
char packetBuffer[UDP_TX_PACKET_MAX_SIZE]; //buffer to hold incoming packet,
char ReplyBuffer[] = "acknowledged"; // a string to send back
// An EthernetUDP instance to let us send and receive packets over UDP
EthernetUDP Udp;
int pinSensor[]= {7,8};
const int pinled = 3;
const int sirena = 4;
int n=0;
int sonando; // para estado del pin que monitorea la sirena de la alarma
char alarma[] ="30120001BA0"; //codigo a ser enviado, solo dejando espacio para la zona
void setup(){
// start the Ethernet and UDP:
Ethernet.begin(mac,ip);
Udp.begin(localPort);
// Udp.remoteIP=(remip);
// Udp.remotePort(rport);
Serial.begin(9600);
for (int i=0; i<2; i++){
pinMode(pinSensor[i],INPUT);
}
pinMode(pinled,OUTPUT);
pinMode(sirena,INPUT);
digitalWrite(pinled,LOW);
}
void loop(){
IPAddress destinationIP(192,168,69,122); // Address of target machine //este quiero cambiarlo por una direccion ejemplo http://luk2009.dyndns.biz
unsigned int destinationPort = 5003; // puerto udp al que se envia el dato
sonando = digitalRead(sirena);
if (sonando==LOW){
for (n=0;n<2;n++){
if (digitalRead(pinSensor[n])==LOW) {
digitalWrite(pinled, HIGH);// este led es solo para pruebas y saber que el sistema esta detectando los cambios
Udp.beginPacket(destinationIP, destinationPort);
//Udp.write(alarma);
Udp.print(alarma);
Udp.print(pinSensor[n]); // esto seria el equivalente a la zona del sistema de alarmas
Udp.endPacket();
delay (30000); // para controlar que no este enviando señales durante 4 minutos continuos, la idea es que revise todos los pines antes de hacer la pausa
}
else{
digitalWrite(pinled, LOW); //led para pruebas solamente
}
}
}
}