Hola un saludo a todos
Primero que nada un agradecimieno en general por la ayuda en este foro de arduino que en verdad me a ayudadp mucho y espero que con mis aporte y mis preguntas le pueda servir a alguien mas.
Bueno en busca de nueva ayuda con mi codigo e avanzado vastante
[b]#include <SoftwareSerial.h>
#include <avr/wdt.h>
#define IRQ_PIN 2 // Puerto Del MCU, Conectado SID (Presencia De datos )
#define D0_PIN 3 // Puerto Recibe dato Binario 0
#define D1_PIN 4 // Puerto Recibe dato Binario 1
#define D2_PIN 5 // Puerto Recibe dato Binario 2
#define D3_PIN 6 // Puerto Recibe dato Binario 3
#define COMMANDLEN 16
#define NUMCOMMANDS 8
// TABLA CON LOS COMANDOS A DETECTAR
const char tabla_comandos[NUMCOMMANDS][COMMANDLEN] = {
{'2', '3', '4', '5', '6', '7', '8', '9', '0', 'D', '1', '*', '#', 'A', 'B', 'C'},
{'D', '1', '2', '9', '0', '*', '#', 'A', 'B', 'C', '3', '4', '5', '6', '7', '8'},
{'6', '7', '8', 'D', '1', '2', '3', '4', '5', '9', '0', '*', '#', 'A', 'B', 'C'},
{'D', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '*', '#', 'A', 'B', 'C'},
{'4', '5', '6', '7', '8', 'D', '1', '2', '3', '9', '0', '*', '#', 'A', 'B', 'C'},
{'5', '6', '7', '8', '9', '0', '*', '#', 'A', 'D', '1', '2', '3', '4', 'B', 'C'},
{'7', '8', '9', '0', '*', '#', 'A', 'B', 'D', '1', '2', '3', '4', '5', '6', 'C'},
{'#', 'A', 'B', 'D', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '*', 'C'}
};
// TABLA CON LA TRADUCCIÓN NÚMERO-KEY
const char tabla_key[] = {'D', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '*', '#', 'A', 'B', 'C'};// no recuerdo para que sirbe pero jala
byte irq_state;
char key[COMMANDLEN];
int indice=0;
SoftwareSerial mySerial(10, 11); // RX, TX
void setup()
{
wdt_disable(); //Disabled durante las configuraciones, algunas configuranciones llevan mucho tiempo
Serial.begin(9600); // Configura El Puerto Serial 9600,8,N,1
// Pone Los Puerto En Modo De Lectura
pinMode(IRQ_PIN, INPUT);
pinMode(D0_PIN, INPUT);
pinMode(D1_PIN, INPUT);
pinMode(D2_PIN, INPUT);
pinMode(D3_PIN, INPUT);
}
void loop()
{
// Espera a Que Haya Una Senal o Tono
irq_state = digitalRead(IRQ_PIN);
if ( irq_state == 1 )
{
wdt_enable(WDTO_4S );//Una vez configurado el sistema iniciamos perro guardian, en este ejemplo 8sg
//Serial.print("");
key [indice]= read_codigo(); // Lee El Codigo DTMF
Serial.print(indice); // Imprime La Tecla recibida
if (indice < 15 ) {
indice++;
} else {
indice=0;
Serial.print("Se han recibido 16 tonos, que son: ");
int comando = coincide();
switch (comando) {
case -1: //no hay coincidencias
Serial.println("No se arma ");
delay(10);
break;
case 0: //coincide con el primer elemento de la tabla que tiene que hacer una se;al codificada de un evento de accion de alarma
Serial.println("se abrio la puerta ");
indice= 0;
delay(1000);
break;
case 1: //coincide con el segundo
Serial.println("Se abrio la ventana");
indice= 0;
delay(1000);
break;
case 2: // coincide con el tercero elemento.
Serial.println("se abrio la puerta 333 ");
indice= 0;
delay(1000);
break;
case 3: // coincide con el cuarto elemento.
Serial.println("Entro el gato ");
indice= 0;
delay(1000);
break;
case 4: // coincide con el quinto elemento.
Serial.println(" Se activo alarma de incendio ");
indice= 0;
delay(1000);
break;
case 5: // coincide con el sexto elemento.
Serial.println(" Tu casa esta indundada ");
indice= 0;
delay(1000);
break;
case 6: // coincide con el septimo elemento elemento.
Serial.println(" Tienes un gris en tu cuarto ");
indice= 0;
delay(1000);
break;
case 7: // coincide con el octavo elemento.
Serial.println("Te secuestraron los aliens ");
indice= 0;
delay(1000);
break;
}
}
delay(500); // Pausa Para Sincronizar La Senal o IRQ
wdt_reset();
}
}
/*-------------------------------------------------------------*/
byte read_codigo()
{
byte dato; // Variable Que Tiene El Valor byte De La tecla
char key; // Variable Que Tiene El Valor Char tecla
byte D0,D1,D2,D3; // Variable Donde Se Lee el Estado
// Lee Los Estado Logico o Binario Del MT8870 (1 o 0 , ON o OFF )
D0 = digitalRead(D0_PIN);
D1 = digitalRead(D1_PIN);
D2 = digitalRead(D2_PIN);
D3 = digitalRead(D3_PIN);
// Covierte De Binario A BYTE o ENTERO
// Escribe Los BITS En Una Variable dato
bitWrite(dato,0,D0);
bitWrite(dato,1,D1);
bitWrite(dato,2,D2);
bitWrite(dato,3,D3);
return tabla_key[dato];
}
// Retorna número de comando coincidente con los datos recibidos, o -1 si no hay coincidencias.
int coincide() {
bool coincidencia;
for (int i=0; i<NUMCOMMANDS; i++) {
coincidencia = true;
for (int j=0; j<COMMANDLEN && coincidencia==true; j++) {
if (tabla_comandos[i][j] != key[j]) {
coincidencia = false;
}
}
if (coincidencia==true) {
return (i);
}
}
return(-1);
}
[/b]
Estoy usando un sim900 en el codigo el meollo del asunto es que si el array resibido conside con alguin array en la matriz con un switch case envia un mensaje mi pregunta es como puedo enviar ese array mediante comandos AT por el protolo UDP a una IP/dianamica a un servido
De ante mano gracias a quien me pueda ayudar