#include "GSM_18f14k50_v2.h"
#define PIN_ON output_high
#define PIN_OFF output_low
#define RELAY1 PIN_C0
#define RELAY2 PIN_C1
#define PULSADOR1 PIN_C2
#define PULSADOR2 PIN_C3
#define PULSADOR3 PIN_B6
#define PWM_LED PIN_C5
#define LED1 PIN_C6
#define LED2 PIN_C7
#define TEMP PIN_B4
#define POWERKEYGSM PIN_C4
//#define char lista[177][10]={{'3','8','0','4','4','1','5','6','2','2'}}
const int8 lista[177][10]={{'x','x','x','x','x','x','x','x','x','x'},{'x','x','x','x','x','x','x','x','x','x'},{'x','x','x','x','x','x','x','x','x','x'},{'x','x','x','x','x','x','x','x','x','x'},{'x','x','x','x','x','x','x','x','x','x'},{'x','x','x','x','x','x','x','x','x','x'},{'x','x','x','x','x','x','x','x','x','x'},{'x','x','x','x','x','x','x','x','x','x'},{'x','x','x','x','x','x','x','x','x','x'},{'x','x','x','x','x','x','x','x','x','x'}};
//*************************************************************************************************************************************
//--------------------------------------variables globales
//*************************************************************************************************************************************
//char lista[178][10];
int d,numok=0,i,j,numcorr,iniciorecpnum;
int const lenbuff=6; // Tamaño del buffer de recepción
int8 cbuff[lenbuff]; // Buffer de recepcion de datos serie
int const num=10;
int8 numrec[num];
//*************************************************************************************************************************************
//--------------------------------------Interrupcion serie
//*************************************************************************************************************************************
#int_RDA //En esta interrupcion es cuando cargo el valor que obtengo del puerto y lo guardo en un vector char.
void RDA_isr(void)
{
d=0;
if (d=='"') //Pregunto si entro un " del modulo gsm caso afirmativo incrementa un contador
{iniciorecpnum=iniciorecpnum+1;
}
if (iniciorecpnum>0 && iniciorecpnum<2) // como el numero llega precedido por comillas "xxxxxxxxxx", pregunto por las comillas despues de que la detecta por 2da vez y acumulo en un vector
{ numrec[0]=numrec[1];
numrec[1]=numrec[2];
numrec[2]=numrec[3];
numrec[3]=numrec[4];
numrec[4]=numrec[5];
numrec[5]=numrec[6];
numrec[6]=numrec[7];
numrec[7]=numrec[8];
numrec[8]=numrec[9];
numrec[9]=d;
}
cbuff[0]=cbuff[1];
cbuff[1]=cbuff[2];
cbuff[2]=cbuff[3];
cbuff[3]=cbuff[4];
cbuff[4]=cbuff[5];
cbuff[5]=d;
}
//*************************************************************************************************************************************
//--------------------------------------Funciones
//*************************************************************************************************************************************
void inicializacionSIM900(void)
{
int cont;
delay_ms(1000);
puts("A",SERIAL_SIM900
); //para sincronizar el baudrate del SIM 900 delay_ms(300);
delay_ms(1000);
for(cont=0;cont<5;cont++) // mando varios AT para el autobauding
{
puts("AT",SERIAL_SIM900
); delay_ms(200);
delay_ms(200);
PIN_ON(LED1);
delay_ms(200);
PIN_OFF(LED1);
}
//-----------------------------------seteos de configuracion del SIM900------------------------
puts("AT+CMGF=1\r",SERIAL_SIM900
); // configuro para que trabaje en modo texto y no PDU delay_ms(200);
delay_ms(200);
puts("AT+CNMI=2,2,0,0,0\r",SERIAL_SIM900
); // configuro para que en cuanto llegue un mensaje lo envie el modulo gsm por el puerto serie delay_ms(200);
delay_ms(200);
return;
}
//*************************************************************************************************************************************
//*************************************************************************************************************************************
//------------------------------------Programa Principal
//*************************************************************************************************************************************
void main()
{
setup_adc_ports(sAN10|VSS_VDD);
setup_adc(ADC_CLOCK_DIV_2|ADC_TAD_MUL_0);
setup_spi(SPI_SS_DISABLED);
setup_wdt(WDT_OFF);
setup_timer_0(RTCC_INTERNAL);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
//------------------------------------------------MI PROGRAMA!!-------------------------------------------------------------------
set_tris_b(0b00001100);
set_tris_c(0b01110000);
PIN_OFF(RELAY1);
PIN_OFF(RELAY2);
PIN_OFF(LED1);
PIN_OFF(LED2);
PIN_OFF(POWERKEYGSM); //Enciendo modulo GSM
delay_ms(1200);
PIN_ON(POWERKEYGSM);
inicializacionSIM900(); //Inicializo el SIM900
while (true) // bucle infinito
{
for (i=0;i<178;i++) //Recorro la matriz preguntando si alguno de los numeros cargados se corresponde con el que envio el sms
{if(numok==10) //Si tengo las 10 coincidencias el numero es correcto, caso contrario tendria valor 0. Si alguno de los numeros es correcto habilito la marca para avisar que el numero esta habilitado
{numcorr=1;
for (j=0;j<10;j++)
{ if (lista[i][j]==numrec[j]) //Comparo caracter a caracter los vectores
numok=numok+1;
else
numok=0;
}
}
if(i==178)
iniciorecpnum=0;//Una vez que ya compare todos los valores habilito una nueva recepcion
}
if(cbuff[0]=='p' && cbuff[1]=='o' && cbuff[2]=='r'&& cbuff[3]=='t'&& cbuff[4]=='o' &&cbuff[5]=='n'&&numcorr==1 ) //Pregunto por la palabra habilitada y si el numero se encuentra en la lista habilitada
{
cbuff[0]=0; //Salidas del sistema
PIN_ON(LED1);
PIN_ON(RELAY1);
delay_ms(2000);
PIN_OFF(LED1);
PIN_OFF(RELAY1);
numcorr=0;
}
}
}