2
« en: Lunes 28 de Diciembre de 2009, 01:14 »
Buenas tardes compañeros de solocodigo. Agradecemos todos sus aportes, ya que gracias a ellos hemos avanzado bastante en nuestro proyecto, y ademas hemos comprobado que todo lo que en este foro se menciona para el nokia 3220, también funciona para el nokia 6070. Quisiéramos pedirle el favor a quien pueda colaborarnos, que nos ayude con el tema de leer un msj desde el pic16f877a, ya que intentamos hacerlo de la misma manera que enviamos msj pero obviamente con los comandos at correspondientes a lectura pero no funciona. La idea, es si recibimos un determinado msj desde el celular como abrir, o cerrar, podamos activar un switch con el microcontrolador. No estamos seguros si se debe a la velocidad en la transmisión de datos del celular que el pic no alcanza a tomarlos. Realmente dudamos entre si será un problema de compatibilidad entres los votlajes del pic o del celular o si es problema del código dentro del microcontrolador con el que estamos intentando recibir del celular. Agradecemos cualquier aporte con respecto a este tema. A continuación, colocamos el código con el intentamos leer el msj del celular para recibir. Ya que consideramos que el problema se puede deber a la velocidad, hacemos una especie de maquina de estados, comparando que lo recibido, sea lo que queremos recibir.
#include<pic.h>
#include "delay.c"
#include "lcd.c"
#include "stdlib.h"
#include "stdio.h"
#include "usart.c"
__CONFIG(0x3f32);//palabra de configuracion para crystal de 20Mhz
void inicializa()void{
//en esta función inicializamos el celular, y sabemos que funciona, ya que podemos enviar los msj desde el pic.
}
void leemsj(void){
char i;
printf("AT+CMGF=1");
//maqest();
putch(0x0D);//printf("nr");//putch(0x0D);
putch(0x0A);
DelayMs(250);
DelayMs(250);
DelayMs(250);
printf("AT+CSCA="+573103150030"");
putch(0x0D);//printf("nr");//putch(0x0D);
putch(0x0A);
DelayMs(250);
DelayMs(250);
DelayMs(250);
printf("AT+CMGR=1");
putch(0x0D);//printf("nr");//putch(0x0D);
putch(0x0A);
DelayMs(250);
DelayMs(250);
contcarac=0;
while(caracteres<=28){
//putch((contcarac+98));
maqest();
}
lcd_clear();
lcd_puts(" Leido");
for(a=0;a<=4;a++){
DelayMs(255);
}
}
void maqest(void){
switch(caracteres){
case 0: if(RCREG=='A'){
recibido[caracteres]=RCREG;
caracteres++;
}
recibido[caracteres]=RCREG;
break;
case 1: if(RCREG=='T'){
recibido[caracteres]=RCREG;
caracteres++;
}
recibido[caracteres]=RCREG;
break;
case 2: if(RCREG=='+') {
recibido[caracteres]=RCREG;
caracteres++;
}
recibido[caracteres]=RCREG;
break;
case 3: if(RCREG=='C'){
recibido[caracteres]=RCREG;
caracteres++;
}
recibido[caracteres]=RCREG;
break;
case 4: if(RCREG=='M'){
recibido[caracteres]=RCREG;
caracteres++;
}
recibido[caracteres]=RCREG;
break;
case 5: if(RCREG=='G'){
recibido[caracteres]=RCREG;
caracteres++;
}
recibido[caracteres]=RCREG;
break;
...............
//Aqui tenemos otros case, (una gran cantidad, ya que estamos comparando bit a bit lo que recibimos del celular)
}
contcarac++;
}