Buena noche,
Desde hace un tiempo he intentado poner a funcionar una placa TrackME de MCElectronics sin mucho éxito.
Lo que deseo hacer es enviar la trama NMEA por SMS a mi movil cuando presiono un pulsador, pero no funciona. He tomado programas de ejemplo que brinda MCElectronics para adecuar la placa a lo que necesito hacer. Descubrí que el programa no está entrando al SWICH porque la variable "e" no tiene la información necesaria y he allí el problema, porque no se como solucionar esto. Se que es un tema viejo, pero no he dado con la info suficiente para sacar adelante lo que pretendo hacer. Sé que el módulo GPS funciona porque si le cargo el .HEX que trae el TrackME cuando lo venden, se pueden ver las diferentes tramas mediante Hercules en mi PC. Y se que el módulo GSM tambien funciona porque si anulo la condicional SWITCH, la placa me envía un mensaje... pero vacío
Por esta razón les pido ayuda!
De antemano les agradezco en el alma!
Dejo el código por acá:
#include <main.h>
#include <string.h>
#INCLUDE <stdlib.h>
#pin_select U2TX=PIN_A1
#pin_select U2RX=PIN_A0
#use rs232(UART2, BAUD=9600, PARITY=N, BITS=8, stream=SERIAL_GSM)
#use rs232(UART, baud=4800,parity=N,rcv=PIN_B0,xmit=PIN_B1, bits=8,stream=SERIAL_GPS)
#FUSES HSPLL, NOWDT, PLL3, NOXINST, NOCPUDIV, NOFCMEN, NOIESO, NOIOL1WAY
#use delay(clock=12MHz)
#define PIN_ON output_high
#define PIN_OFF output_low
#define POWERKEYGSM PIN_C1
#define PANIC PIN_C0
#define LED PIN_B2
char e;
char xbuff;
int const lenbuffGPS=90;
int8 cbuffGPS[lenbuffGPS];
int8 cbuffGPS2[lenbuffGPS];
void inicializacionSIM900(void)
{
int cont;
delay_ms(1000);
puts("A",SERIAL_GSM);
delay_ms(300);
putchar(0x0d,SERIAL_GSM);
delay_ms(3000);
for(cont=0;cont<5;cont++)
{
puts("AT",SERIAL_GSM);
delay_ms(300);
putchar(0x0d,SERIAL_GSM);
delay_ms(200);
output_high(LED);
delay_ms(200);
output_low(LED);
}
puts("AT+CMGF=1\r",SERIAL_GSM);
delay_ms(100);
putchar(0x0d,SERIAL_GSM);
delay_ms(100);
puts("AT+CSTT=internet.comcel.com.co",SERIAL_GSM);
delay_ms(100);
puts("AT\r",SERIAL_GPS);
delay_ms(1000);
puts("AT+CGPSPWR=1\r",SERIAL_GPS);
delay_ms(300);
puts("AT+CGPSRST=0\r",SERIAL_GPS);
delay_ms(30300);
return;
}
void RX_GPS_GPRMC (void)
{
puts("AT+CGPSINF=32\r",SERIAL_GPS);
delay_ms(300);
int flag=1;
while (flag==1)
{
if ( kbhit (SERIAL_GPS)==1 )
{
e=0;
e=fgetc(SERIAL_GPS);
switch(e)
{
case 10:
if(cbuffGPS[0]=='$' && cbuffGPS[1]=='G' && cbuffGPS[2]=='P' && cbuffGPS[3]=='R' && cbuffGPS[4]=='M' && cbuffGPS[5]=='C')
{
PIN_ON(LED);
strcpy(cbuffGPS2,cbuffGPS);
}
xbuff=0;
flag=0;
break;
default:
cbuffGPS[xbuff++]=e;
if(xbuff>(lenbuffGPS-1))
xbuff=lenbuffGPS;
}
}
}
return;
}
void main() {
setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_OFF|ADC_TAD_MUL_0);
setup_wdt(WDT_OFF);
// set_tris_a(0b00101101);
// set_tris_b(0b00000101);
// set_tris_c(0b01000101);
setup_adc(ADC_OFF);
PIN_ON(POWERKEYGSM);
inicializacionSIM900();
PIN_OFF(LED);
while(true)
{
RX_GPS_GPRMC();
if(input(PANIC)==0)
{
PIN_ON(LED);
delay_ms(300);
fprintf(SERIAL_GSM,"AT+CMGS=\"3113200202\"\r");
delay_ms(300);
puts(cbuffGPS2,SERIAL_GSM);
delay_ms(300);
fprintf(SERIAL_GSM,"%c",0x1a);
PIN_OFF(LED);
}
}
}