Gracias de nuevo. Perdon, no me fije bien como iba la funcion Respuesta. Entonces esa funcion es capaz de quedarse con los mensajes:
PAIR 0 008098E6A5F4
RING 008098E6A5F
CONNECT 008098E6A5F4,1101 A
Porque veo que se acaba cuando hay un \n. Habria que modificarla no?
Por otro lado, ahora ya solo me aparecen esos errores por lo del espacio. Creo que es porque uso muchos vectores, hechale un vistazo al codigo:
#include <htc.h>
#include <stdlib.h> // para poder usar la funcion itoa
#include <string.h>
#include <stdio.h>
#include <conio.h>
//#conio.h, e #iostream.h
__CONFIG (1, HS & CPUDIV4 & USBPLL & PLLDIV5 & FCMDIS & IESODIS); // Con 20 CPUDIV1
__CONFIG (2, BORDIS & WDTDIS & PWRTDIS);
__CONFIG (3, MCLRDIS); // estoy deshabilitando el pin de MasterClear, tal vez haya que habilitarlo, eso hay que probarlo
__CONFIG (4, LVPDIS & DEBUGEN);
/* =================================================================================
Definitions
================================================================================= */
#define PORTBIT(adr, bit) ( (unsigned)(&adr)*8 + (bit) )
#define Idle_Low 1 // No envia datos
#define Idle_High 2 // Envia datos
#define true 1
#define false 0
#define BAUD 9600 // Configuramos la velocidad, tanto puede ser 19200 o de 9600 kbaud/s pero hay q cambiarlo tb en la simulacion de proteus
#define PIC_CLK 5000000
#define CS RB2
/* =================================================================================
Global variables
================================================================================= */
static bit LED0 @ PORTBIT(PORTD, 0);
static bit LED1 @ PORTBIT(PORTD, 1);
static bit LED2 @ PORTBIT(PORTD, 2);
static bit LED3 @ PORTBIT(PORTD, 3);
char present_state = Idle_Low; // state variable
char future_state = Idle_Low; // state variable
unsigned int valor_potenciometro;
unsigned int valor_sensor_temperatura;
unsigned char pote_buf[6];
unsigned char sensor_buf[10];
char * valor_pote_en_texto; // un puntero para almacenar el numero en texto
char * valor_sensor_en_texto; // un puntero para almacenar el numero en texto
char byte_alto, byte_bajo;
unsigned char caracter_recibido;
unsigned char dummy;
int error_comando=1;
int final=1;
int prueba=1; // PRUEBA PARA SABER DONDE ESTO
char indice=0;
/* =================================================================================
Function prototypes
================================================================================= */
void init_system (void);
void time_delay (unsigned int );
char output_logic(void);
char future_state_logic(void);
void setup_sensor(void);
void setup_adc(void);
void serial_setup(void);
void putst(const char *str);
void putch(unsigned char c);
unsigned char getch(void);
unsigned char UsartReadChar_nonstop(void);
unsigned char getch_available(void);
void clear_usart_errors(void);
unsigned char read_spi (void);
unsigned int read_adc(void);
unsigned char getch(void);
char * LeerRespuesta(char * mensaje);
/* =================================================================================
Main function
================================================================================= */
void main ()
{
valor_potenciometro = 0;
valor_sensor_temperatura = 0;
LED0 = 0;
LED1 = 0;
LED2 = 0;
LED3 = 0;
char Respuesta1[12];
char ok1[3]; // ES FIJO!!
register const char *ComandoRecibido1;
char Respuesta2[13];
char ok2[3]; // ES FIJO!!
register const char *ComandoRecibido2;
char Respuesta3[15];
char ok3[3]; // ES FIJO!!
register const char *ComandoRecibido3;
char Respuesta4[15];
char ok4[3]; // ES FIJO!!
register const char *ComandoRecibido4;
char Respuesta5[15];
char ok5[3]; // ES FIJO!!
register const char *ComandoRecibido5;
char Respuesta6[20];
char ok6[3]; // ES FIJO!!
register const char *ComandoRecibido6;
char Respuesta7[11];
char ok7[3]; // ES FIJO!!
register const char *ComandoRecibido7;
char Respuesta8[10];
char ok8[3]; // ES FIJO!!
register const char *ComandoRecibido8;
char Respuesta9[23];
char ok9[19]; // OJO aqui son 19 caracteres + 4
register const char *ComandoRecibido9;
char Respuesta10[21];
char ok10[17]; // OJO aqui son 19 caracteres + 4
register const char *ComandoRecibido10;
char Respuesta11[31];
char ok11[27]; // OJO aqui son 19 caracteres + 4
register const char *ComandoRecibido11;
register const char *ComandoIdeal = "OK";
int i=0;
int j=0;
int z=0;
int v=0;
int w=0;
int q=0;
int t=0;
int d=0;
init_system();
setup_sensor();
setup_adc();
serial_setup();
/* =================================================================================
Establecer connexion con comandos AT
================================================================================= */
//*****************************************************************************
//PRIMER COMANDO AT
//*****************************************************************************
putst ("AT"); // Desconnectar el echo.
putch ('\r');
Respuesta1[0] = getch();
Respuesta1[1] = getch();
Respuesta1[2] = getch();
Respuesta1[3] = getch();
Respuesta1[4] = getch();
Respuesta1[5] = getch();
Respuesta1[6] = getch();
Respuesta1[7] = getch();
Respuesta1[8] = getch();
while(i<9)
{
if(Respuesta1[i]=='O')
{
ok1[0]=Respuesta1[i];
}
if(Respuesta1[i]=='K')
{
ok1[1]=Respuesta1[i];
}
if(Respuesta1[i-1]=='K')
{
ok1[2]='\0';
}
i++;
}
ComandoRecibido1=ok1;
if (strcmp(ComandoRecibido1,"OK") == 0){ // Todo a ido bien
// while(1);
LED0=1;
error_comando=0;
}
else{ // No es el comando bueno
// while(1);
error_comando=1;
}
//*****************************************************************************
//SEGUNDO COMANDO AT
//*****************************************************************************
putst ("ATS0=1"); // Desconnectar el echo.
putch ('\r');
Respuesta2[0] = getch();
Respuesta2[1] = getch();
Respuesta2[2] = getch();
Respuesta2[3] = getch();
Respuesta2[4] = getch();
Respuesta2[5] = getch();
Respuesta2[6] = getch();
Respuesta2[7] = getch();
Respuesta2[8] = getch();
Respuesta2[9] = getch();
Respuesta2[10] = getch();
Respuesta2[11] = getch();
Respuesta2[12] = getch();
while(j<13) // OJO CAMBIAR ESTO DE UN COMANDO A OTRO. SINO SE QUEDA Y NO ACABA
{
if(Respuesta2[j]=='O')
{
ok2[0]=Respuesta2[j];
}
if(Respuesta2[j]=='K')
{
ok2[1]=Respuesta2[j];
}
if(Respuesta2[j-1]=='K')
{
ok2[2]='\0';
}
j++;
}
//while(1);
ComandoRecibido2=ok2;
if (strcmp(ComandoRecibido2,"OK") == 0){ // Todo a ido bien
// while(1);
LED1=1;
error_comando=0;
}
else{ // No es el comando bueno
// while(1);
error_comando=1;
}
//*****************************************************************************
//TERCER COMANDO AT
//*****************************************************************************
putst ("ATS512=4"); // Desconnectar el echo.
putch ('\r');
Respuesta3[0] = getch();
Respuesta3[1] = getch();
Respuesta3[2] = getch();
Respuesta3[3] = getch();
Respuesta3[4] = getch();
Respuesta3[5] = getch();
Respuesta3[6] = getch();
Respuesta3[7] = getch();
Respuesta3[8] = getch();
Respuesta3[9] = getch();
Respuesta3[10] = getch();
Respuesta3[11] = getch();
Respuesta3[12] = getch();
Respuesta3[13] = getch();
Respuesta3[14] = getch();
while(z<15)
{
if(Respuesta3[z]=='O')
{
ok3[0]=Respuesta3[z];
}
if(Respuesta3[z]=='K')
{
ok3[1]=Respuesta3[z];
}
if(Respuesta3[z-1]=='K')
{
ok3[2]='\0';
}
z++; // CAMBIAR
}
//while(1);
ComandoRecibido3=ok3;
if (strcmp(ComandoRecibido3,"OK") == 0){ // Todo a ido bien
//while(1);
LED2=1;
error_comando=0;
}
else{ // No es el comando bueno
//while(1);
error_comando=1;
}
//*****************************************************************************
//QUARTO COMANDO AT
//*****************************************************************************
putst ("ATS502=1"); // Desconnectar el echo.
putch ('\r');
Respuesta4[0] = getch();
Respuesta4[1] = getch();
Respuesta4[2] = getch();
Respuesta4[3] = getch();
Respuesta4[4] = getch();
Respuesta4[5] = getch();
Respuesta4[6] = getch();
Respuesta4[7] = getch();
Respuesta4[8] = getch();
Respuesta4[9] = getch();
Respuesta4[10] = getch();
Respuesta4[11] = getch();
Respuesta4[12] = getch();
Respuesta4[13] = getch();
Respuesta4[14] = getch();
while(v<15) // OJO CAMBIAR ESTO DE UN COMANDO A OTRO. SINO SE QUEDA Y NO ACABA
{
if(Respuesta4[v]=='O')
{
ok4[0]=Respuesta4[v];
}
if(Respuesta4[v]=='K')
{
ok4[1]=Respuesta4[v];
}
if(Respuesta4[v-1]=='K')
{
ok4[2]='\0';
}
v++; // CAMBIAR
}
//while(1);
ComandoRecibido4=ok4;
if (strcmp(ComandoRecibido4,"OK") == 0){ // Todo a ido bien
// while(1);
LED3=1;
error_comando=0;
}
else{ // No es el comando bueno
// while(1);
error_comando=1;
}
//*****************************************************************************
//QUINTO COMANDO AT
//*****************************************************************************
putst ("ATS536=1"); // Desconnectar el echo.
putch ('\r');
Respuesta5[0] = getch();
Respuesta5[1] = getch();
Respuesta5[2] = getch();
Respuesta5[3] = getch();
Respuesta5[4] = getch();
Respuesta5[5] = getch();
Respuesta5[6] = getch();
Respuesta5[7] = getch();
Respuesta5[8] = getch();
Respuesta5[9] = getch();
Respuesta5[10] = getch();
Respuesta5[11] = getch();
Respuesta5[12] = getch();
Respuesta5[13] = getch();
Respuesta5[14] = getch();
while(w<15) // OJO CAMBIAR ESTO DE UN COMANDO A OTRO. SINO SE QUEDA Y NO ACABA
{
if(Respuesta5[w]=='O')
{
ok5[0]=Respuesta5[w];
}
if(Respuesta5[w]=='K')
{
ok5[1]=Respuesta5[w];
}
if(Respuesta5[w-1]=='K')
{
ok5[2]='\0';
}
w++; // CAMBIAR
}
//while(1);
ComandoRecibido5=ok5;
if (strcmp(ComandoRecibido5,"OK") == 0){ // Todo a ido bien
// while(1);
error_comando=0;
LED0=0;
}
else{ // No es el comando bueno
// while(1);
error_comando=1;
}
//*****************************************************************************
//SEXTO COMANDO AT
//*****************************************************************************
putst ("AT+BTK=\"1234\"");
putch ('\r');
Respuesta6[0] = getch();
Respuesta6[1] = getch();
Respuesta6[2] = getch();
Respuesta6[3] = getch();
Respuesta6[4] = getch();
Respuesta6[5] = getch();
Respuesta6[6] = getch();
Respuesta6[7] = getch();
Respuesta6[8] = getch();
Respuesta6[9] = getch();
Respuesta6[10] = getch();
Respuesta6[11] = getch();
Respuesta6[12] = getch();
Respuesta6[13] = getch();
Respuesta6[14] = getch();
Respuesta6[15] = getch();
Respuesta6[16] = getch();
Respuesta6[17] = getch();
Respuesta6[18] = getch();
Respuesta6[19] = getch();
//while(1);
while(q<20) // OJO CAMBIAR ESTO DE UN COMANDO A OTRO. SINO SE QUEDA Y NO ACABA
{
if(Respuesta6[q]=='O')
{
ok6[0]=Respuesta6[q];
}
if(Respuesta6[q]=='K')
{
ok6[1]=Respuesta6[q];
}
if(Respuesta6[q-1]=='K')
{
ok6[2]='\0';
}
q++; // CAMBIAR
}
//while(1);
ComandoRecibido6=ok6;
if (strcmp(ComandoRecibido6,"OK") == 0){ // Todo a ido bien
// while(1);
LED1=0;
error_comando=0;
}
else{ // No es el comando bueno
// while(1);
error_comando=1;
}
//*****************************************************************************
//SEPTIMO COMANDO AT
//*****************************************************************************
putst ("AT&W");
putch ('\r');
Respuesta7[0] = getch();
Respuesta7[1] = getch();
Respuesta7[2] = getch();
Respuesta7[3] = getch();
Respuesta7[4] = getch();
Respuesta7[5] = getch();
Respuesta7[6] = getch();
Respuesta7[7] = getch();
Respuesta7[8] = getch();
Respuesta7[9] = getch();
Respuesta7[10] = getch();
while(t<11) // OJO CAMBIAR ESTO DE UN COMANDO A OTRO. SINO SE QUEDA Y NO ACABA
{
if(Respuesta7[t]=='O')
{
ok7[0]=Respuesta7[t];
}
if(Respuesta7[t]=='K')
{
ok7[1]=Respuesta7[t];
}
if(Respuesta7[t-1]=='K')
{
ok7[2]='\0';
}
t++;
}
//while(1);
ComandoRecibido7=ok7;
if (strcmp(ComandoRecibido7,"OK") == 0){ // Todo a ido bien
// while(1);
LED2=0;
error_comando=0;
}
else{ // No es el comando bueno
// while(1);
error_comando=1;
}
//*****************************************************************************
//OCTAVO COMANDO AT
//*****************************************************************************
putst ("ATZ");
putch ('\r');
Respuesta8[0] = getch();
Respuesta8[1] = getch();
Respuesta8[2] = getch();
Respuesta8[3] = getch();
Respuesta8[4] = getch();
Respuesta8[5] = getch();
Respuesta8[6] = getch();
Respuesta8[7] = getch();
Respuesta8[8] = getch();
Respuesta8[9] = getch();
while(d<10) // OJO CAMBIAR ESTO DE UN COMANDO A OTRO. SINO SE QUEDA Y NO ACABA
{
if(Respuesta8[d]=='O')
{
ok8[0]=Respuesta8[d];
}
if(Respuesta8[d]=='K')
{
ok8[1]=Respuesta8[d];
}
if(Respuesta8[d-1]=='K')
{
ok8[2]='\0';
}
d++;
}
//while(1);
ComandoRecibido8=ok8;
if (strcmp(ComandoRecibido8,"OK") == 0){ // Todo a ido bien
// while(1);
error_comando=0;
final=0;
LED3=0;
}
else{ // No es el comando bueno
// while(1);
error_comando=1;
}
//Una condicion para saber que ya ha acabado de hacer los comandos AT
// Hay que esperar a recibir los mensajes y para eso hay que ir leyendo el buffer
// El otro dispositivo se quiere connectar con nosotros.
//Mensaje de aparejamiento : "PAIR 0 008098E6A5F4" (19 caracteres) + 4 =23
//*****************************************************************************
//MENSAJE DE APAREJAMIENTO: "PAIR 0 008098E6A5F4" (19 caracteres) + 4 =23
//*****************************************************************************
ComandoRecibido9=ok9;
LeerRespuesta(ok9);
//while(1);
if (strcmp(ComandoRecibido9,"PAIR 0 008098E6A5F4") == 0){ // Todo a ido bien
// while(1);
error_comando=0;
final=0;
}
else{ // No es el comando bueno
// while(1);
error_comando=1;
}
//*****************************************************************************
//MENSAJE DE LLAMADA: "RING 008098E6A5F4 (17 caracteres)" +4 =21
//*****************************************************************************
ComandoRecibido10=ok10;
LeerRespuesta(ok10);
//while(1);
if (strcmp(ComandoRecibido10,"RING 008098E6A5F4") == 0){ // Todo a ido bien
// while(1);
error_comando=0;
final=0;
}
else{ // No es el comando bueno
// while(1);
error_comando=1;
}
//*****************************************************************************
//MENSAJE DE CONEXION: CONNECT 008098E6A5F4,1101 A (27 caracteres) + 4
//*****************************************************************************
ComandoRecibido11=ok11;
LeerRespuesta(ok11);
//while(1);
if (strcmp(ComandoRecibido11,"CONNECT 008098E6A5F4,1101 A") == 0){ // Todo a ido bien
// while(1);
error_comando=0;
final=0;
}
else{ // No es el comando bueno
// while(1);
error_comando=1;
}
Desinstalo el compilador y me bajo ese programa y limpio los registros?