Follow along with the video below to see how to install our site as a web app on your home screen.
Nota: This feature currently requires accessing the site using the built-in Safari browser.
#include <SSerial2Mobile.h>
#include <NewSoftSerial.h>
#define RXpin 10
#define TXpin 11
#define ACTIVADApin 9 //sirena
#define ARMADApin 8 //boton de panico
int armada = 0;
int returnVal=10;
SSerial2Mobile phone = SSerial2Mobile(RXpin,TXpin);
void setup(){
phone.sendTxt("300xxxxxxxx","Alarma REINICIADA");
phone.sendTxt("31xxxxxxxxx","Alarma REINICIADA");
delay(3000);
pinMode(9, INPUT);
pinMode(8, INPUT);
}
void loop(){
if(ACTIVADApin==0){
phone.sendTxt("300xxxxxxx","Alarma SONANDO!");
phone.sendTxt("317xxxxxxx"," Alarma SONANDO!");
delay(3000);
}
if(ARMADApin==0){
phone.sendTxt("300xxxxxxx","Alarma PANICO!");
phone.sendTxt("317xxxxxxx","Alarma PANICO!");
delay(3000);
}
}
#include <18f2550.h>
#fuses hs,noprotect, mclr,nowdt
#use delay(internal=4M)//delay(clock=4000000)k
#use rs232(baud=9600, xmit=PIN_c6,rcv=PIN_c7,STREAM=MODEM)
#use rs232(baud=9600, xmit=PIN_B5,rcv=PIN_B6,STREAM=DEVICES)
#use rs232(baud=9600, xmit=PIN_c0,rcv=PIN_c1,STREAM=MASTER)
#include <string.h>
#include <math.h>
//#include <input.c>
#define mensaje pin_a0
#define relay pin_a1
#define RESET pin_a2
#define ALARM pin_b3
#define on output_high
#define off output_low
//#priority EXT1,RDA
/////////////////////////////////////////////////////////////////////////////////////////
INT STRING[300]=" ",modo=0,dispositivos[]="\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0",num[]="\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
INT OK[]="OK",ERROR[]="ERROR",RING[]="RING",CMTI[]="+CMTI:",ON[]="ON",OFF[]="OFF",ESTADO[]="DISPOSITIVOS?",VARIABLES[]="VARIABLES?",varis[]="voltaje=0,temperatura=0,pocicion=0";
int1 listo=0,captura_cadena=1;
char a=0,b=0,s0[]="off",s1[]="off",s2[]="off",s3[]="off";
int x,estado_dispositivo,FOCOS=0;
//////////////////////////////////////////////////////////////////////////////////////
const int mensaje_leido=1,RESETEAR=2;
//////////////////////////////////////////////////////////////////////////////////////
int1 verificar_estado(int estados,int disp);
void asignar_estados(char modo);
int1 verificar_falla(int cont);
//////////////////////////////////////////////////////////////////////////////////////
VOID MAIN()
{
enable_interrupts(int_rda);
enable_interrupts(int_ext1);
enable_interrupts(int_ext2);
enable_interrupts(global);
ON(RESET);
for(x=0;x<16;x++)
num
* =read_eeprom(x);
CICLO:
GOTO CICLO;
}
//////////////////////////////////////////////////////////////////////////////////////////
#int_rda
void capturar()
{
if(kbhit()!=0)
fgets(string,modem);
if(strcmp(string,RING)==0)
{
fputs("ATA",modem);
on(relay);
}
else if((strncmp(string,ON,2)==0)||(strncmp(string,OFF,3)==0))
{
if(strncmp(string,ON,2)==0)
dispositivos[0]='A';
else if(strncmp(string,OFF,3)==0)
dispositivos[0]='B';
for(x=1;x<12;x++)
dispositivos
* =0;
for(x=1;x<12;x++)
{
dispositivos
* =string
* ;
}
MODO=MENSAJE_LEIDO;
}
else if(strcmp(string,OK)==0)
{
output_high(pin_b7);
switch(modo)
{
case mensaje_leido:
for(x=0;x<12;x++)
fputc(dispositivos
* ,devices);
delay_ms(610);
/* if(!verificar_falla(11))
goto MEN;*/
fputs("AT+CMGD=1,4",modem);///////////////////////////borra los mensajes leidos
modo=resetear;
off(mensaje);
break;
case RESETEAR:
if(listo==1)
{
modo=0;
captura_cadena=0;
if(focos==1)
asignar_estados(';');
else if(focos==2)
asignar_estados('*');
MEN:
fprintf(modem,"AT+CMGS=\"%s\"%c",num,13);
delay_ms(1000);
if(focos==1)
fprintf(modem,"foco0=%s;\nfoco1=%s;\nfoco2=%s;\nfoco3=%s%c",s0,s1,s2,s3,26);
else if(focos==2)
fprintf(modem,"%s%c",varis,26);
focos=0;
}
delay_ms(300);
listo=0;
off(reset);
break;
}
}
else if(strcmp(string,ERROR)==0)
{
output_low(pin_b7);
off(mensaje);
}
else if(strncmp(string,CMTI,6)==0)
{
a=b=0;
a=string[12];
b=string[13];
fprintf(modem,"AT+CMGR=%c%c%c",a,b,13);
modo=mensaje_leido;
on(mensaje);
}
else if(strcmp(string,ESTADO)==0)
{
listo=1;
FOCOS=1;
}
else if(strcmp(string,VARIABLES)==0)
{
listo=1;
FOCOS=2;
}
}
///////////////////////////////////////////////////////////////////////////////////////////
#INT_EXT1
void alarma()
{
if(input(alarm))
{
fputs("AT",modem);
delay_ms(200);
fprintf(modem,"ATD%s;%c",num,13);
delay_ms(9000);
fputs("ATH",MODEM);
delay_ms(300);
OFF(RESET);
}
}
//////////////////////////////////////////////////////////////////////////////////////////
#INT_EXT2
void actualizar()
{
char comand=0;
comand=fgetc(master);
if(comand==10)
{
fgets(num,master);
for(x=0;x<16;x++)
write_eeprom(x,num
* );
}
if(comand==11)
{
fgets(dispositivos,master);
for(x=0;x<2;x++)
fputc(dispositivos
* ,devices);
}
delay_ms(100);
OFF(RESET);
}
//////////////////////////////////////////////////////////////////////////////////////////
int1 verificar_estado(int estados,int disp)
{
int resultado=0;
int1 bool=0;
int and=0;
resultado=pow(2,disp);
and=estados&resultado;
if(and==resultado)
bool=1;
else
bool=0;
return bool;
}
/////////////////////////////////////////////////////////////////////////////////////////
void asignar_estados(char modo)
{
estado_dispositivo=0;
fputc(modo,devices);
if(modo=='*')
fgets(varis,devices);
else if(modo==';')
{
estado_dispositivo=fgetc(devices);
for(x=0;x<4;x++)
{
switch(x)
{
case 0:if(verificar_estado(estado_dispositivo,x)==1) strcpy (s0,ON);
else strcpy (s0,OFF);
break;
case 1:if(verificar_estado(estado_dispositivo,x)==1) strcpy (s1,ON);
else strcpy (s1,OFF);
break;
case 2:if(verificar_estado(estado_dispositivo,x)==1) strcpy (s2,ON);
else strcpy (s2,OFF);
break;
case 3:if(verificar_estado(estado_dispositivo,x)==1) strcpy (s3,ON);
else strcpy (s3,OFF);
break;
}
}
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int1 verificar_falla(int cont)
{
int1 res=false;
int y;
fputc(';',devices);
estado_dispositivo=fgetc(devices);
for(y=1;y<cont;y++)
{
if((dispositivos[y]>='0')&&(dispositivos[y]<='9'))
{
if(verificar_estado(estado_dispositivo, dispositivos[y]-48)&&dispositivos[0]=='A')
res=true;
else if(!verificar_estado(estado_dispositivo, dispositivos[y]-48)&&dispositivos[0]=='B')
res=true;
else
{
res=false;
goto salir;
}
}
}
SALIR:
return res;
}
Bueno acabo de hacer las pruebas con resultados satisfactorio pero a la vez extraños
http://img17.imageshack.us/i/hyperterminal.jpg/
+CPMS: 0,70,19,20,0,70 que significan esos caracteres ?
void leerSMS(char* cadena)
{
fputs("AT+CPMS=\"ME\",\"ME\",\"ME\"\r\n",modem);//Establezco todas las memorias del telefono, no de la SIM //ok
delay_ms(300);
fputs("AT+CMGF=1\r\n",modem);//configura modo texto
delay_ms(300);
fputs("AT+CMGR=1\r\n",modem);//leo mens de posición 1 modo texto
delay_ms(300);
//Aqui ya me devuelve el mensaje
if(kbhit(modem)!=0){
fgets(cadena,modem); //Aqui se me queda colgado
}
Como pongo el el codigo, en fgets, se me queda colgado, entonces coloque fgetc(), y me devuelve primero una A luego una T(poniendo dos seguidos), y si coloco otro.. se cuelga.
Alquien ha conseguido leer?? En principio no estoy usando interrupciones
En mi desesperación tambien intente con interrupción del siguiente modo:
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, STREAM=modem)
int8 posLCD;
//Defino interrupción
#int_rda
void serial_isr() {
int8 caracter=0x00;
if(kbhit(modem)){
caracter=getc();
if(posLCD==16)
posLCD=1;
lcd_gotoxy(posLCD,2);
printf(Lcd_putc, "%c",caracter);
posLCD++;
}
}
void main(void){
enable_interrupts(global);
enable_interrupts(int_rda);
leerSMS(texto);
while(true){}
}
void leerSMS(char* cadena)
{
fputs("AT\r\n", modem);
}
switch(strValue)
{
case "Value X":
DoThis();
break;
case "Value Y":
DoThat();
break;
case "Value Z";
DoSomethingElse();
break;
default:
DontKnowWhatToDo();
break;
}