Muchas gracias por estos ejemplos. Ya lo he preparado todo para cuando mañana lo pruebe en el lab.
De esta manera el programa se quedara esperando a los tres mensajes o hay que poner algun while para que este por alli y vaya mirandolo todo? Crees que de esta forma funcionara?
Adjunto el codigo entero de esta parte de comandos AT que es como lo tengo actualmente:
#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
/* =================================================================================
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 indice;
register const char *ComandoIdeal = "OK";
char Respuesta[32];
char ok[3]; // ES FIJO!!
char aparejamiento[23];
char ring[21];
char connexion[31];
register const char *ComandoRecibido;
int i=9;
init_system();
setup_sensor();
setup_adc();
serial_setup();
//*****************************************************************************
// Establecer connexion con comandos AT
//*****************************************************************************
//*****************************************************************************
//PRIMER COMANDO AT
//*****************************************************************************
putst ("AT"); // Desconnectar el echo.
putch ('\r');
Respuesta[0] = getch();
Respuesta[1] = getch();
Respuesta[2] = getch();
Respuesta[3] = getch();
Respuesta[4] = getch();
Respuesta[5] = getch();
Respuesta[6] = getch();
Respuesta[7] = getch();
Respuesta[8] = getch();
Respuesta[9]='\0';
Respuesta[10]='\0';
Respuesta[11]='\0';
Respuesta[12]='\0';
Respuesta[13]='\0';
Respuesta[14]='\0';
Respuesta[15]='\0';
Respuesta[16]='\0';
Respuesta[17]='\0';
Respuesta[18]='\0';
Respuesta[19]='\0';
Respuesta[20]='\0';
Respuesta[21]='\0';
Respuesta[22]='\0';
Respuesta[23]='\0';
Respuesta[24]='\0';
Respuesta[25]='\0';
Respuesta[26]='\0';
Respuesta[27]='\0';
Respuesta[28]='\0';
Respuesta[29]='\0';
Respuesta[30]='\0';
Respuesta[31]= '\0';
indice = 0;
//while(1);
while (Respuesta[indice] != '\0')
{
if ((Respuesta[indice] == 'O') && (Respuesta[indice + 1] == 'K'))
{
ok[0] = Respuesta[indice];
ok[1] = Respuesta[indice + 1];
}
indice++;
ok[2] = '\0';
}
//while(1);
ComandoRecibido=ok;
if (strcmp(ComandoRecibido,"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");
putch ('\r');
Respuesta[0] = getch();
Respuesta[1] = getch();
Respuesta[2] = getch();
Respuesta[3] = getch();
Respuesta[4] = getch();
Respuesta[5] = getch();
Respuesta[6] = getch();
Respuesta[7] = getch();
Respuesta[8] = getch();
Respuesta[9]= getch();
Respuesta[10]= getch();
Respuesta[11]= getch();
Respuesta[12]= getch();
Respuesta[13]='\0';
Respuesta[14]='\0';
Respuesta[15]='\0';
Respuesta[16]='\0';
Respuesta[17]='\0';
Respuesta[18]='\0';
Respuesta[19]='\0';
Respuesta[20]='\0';
Respuesta[21]='\0';
Respuesta[22]='\0';
Respuesta[23]='\0';
Respuesta[24]='\0';
Respuesta[25]='\0';
Respuesta[26]='\0';
Respuesta[27]='\0';
Respuesta[28]='\0';
Respuesta[29]='\0';
Respuesta[30]='\0';
Respuesta[31]= '\0';
indice = 0;
//while(1);
while (Respuesta[indice] != '\0')
{
if ((Respuesta[indice] == 'O') && (Respuesta[indice + 1] == 'K'))
{
ok[0] = Respuesta[indice];
ok[1] = Respuesta[indice + 1];
}
indice++;
ok[2] = '\0';
}
//while(1);
ComandoRecibido=ok;
if (strcmp(ComandoRecibido,"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");
putch ('\r');
Respuesta[0] = getch();
Respuesta[1] = getch();
Respuesta[2] = getch();
Respuesta[3] = getch();
Respuesta[4] = getch();
Respuesta[5] = getch();
Respuesta[6] = getch();
Respuesta[7] = getch();
Respuesta[8] = getch();
Respuesta[9]= getch();
Respuesta[10]= getch();
Respuesta[11]= getch();
Respuesta[12]= getch();
Respuesta[13]= getch();
Respuesta[14]= getch();
Respuesta[15]='\0';
Respuesta[16]='\0';
Respuesta[17]='\0';
Respuesta[18]='\0';
Respuesta[19]='\0';
Respuesta[20]='\0';
Respuesta[21]='\0';
Respuesta[22]='\0';
Respuesta[23]='\0';
Respuesta[24]='\0';
Respuesta[25]='\0';
Respuesta[26]='\0';
Respuesta[27]='\0';
Respuesta[28]='\0';
Respuesta[29]='\0';
Respuesta[30]='\0';
Respuesta[31]= '\0';
indice = 0;
//while(1);
while (Respuesta[indice] != '\0')
{
if ((Respuesta[indice] == 'O') && (Respuesta[indice + 1] == 'K'))
{
ok[0] = Respuesta[indice];
ok[1] = Respuesta[indice + 1];
}
indice++;
ok[2] = '\0';
}
//while(1);
ComandoRecibido=ok;
if (strcmp(ComandoRecibido,"OK") == 0){ // Todo a ido bien
// while(1);
LED2=1;
error_comando=0;
}
else{ // No es el comando bueno
// while(1);
error_comando=1;
}
//*****************************************************************************
//CUARTO COMANDO AT
//*****************************************************************************
putst ("ATS502=1");
putch ('\r');
Respuesta[0] = getch();
Respuesta[1] = getch();
Respuesta[2] = getch();
Respuesta[3] = getch();
Respuesta[4] = getch();
Respuesta[5] = getch();
Respuesta[6] = getch();
Respuesta[7] = getch();
Respuesta[8] = getch();
Respuesta[9]= getch();
Respuesta[10]= getch();
Respuesta[11]= getch();
Respuesta[12]= getch();
Respuesta[13]= getch();
Respuesta[14]= getch();
Respuesta[15]='\0';
Respuesta[16]='\0';
Respuesta[17]='\0';
Respuesta[18]='\0';
Respuesta[19]='\0';
Respuesta[20]='\0';
Respuesta[21]='\0';
Respuesta[22]='\0';
Respuesta[23]='\0';
Respuesta[24]='\0';
Respuesta[25]='\0';
Respuesta[26]='\0';
Respuesta[27]='\0';
Respuesta[28]='\0';
Respuesta[29]='\0';
Respuesta[30]='\0';
Respuesta[31]= '\0';
indice = 0;
//while(1);
while (Respuesta[indice] != '\0')
{
if ((Respuesta[indice] == 'O') && (Respuesta[indice + 1] == 'K'))
{
ok[0] = Respuesta[indice];
ok[1] = Respuesta[indice + 1];
}
indice++;
ok[2] = '\0';
}
//while(1);
ComandoRecibido=ok;
if (strcmp(ComandoRecibido,"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");
putch ('\r');
Respuesta[0] = getch();
Respuesta[1] = getch();
Respuesta[2] = getch();
Respuesta[3] = getch();
Respuesta[4] = getch();
Respuesta[5] = getch();
Respuesta[6] = getch();
Respuesta[7] = getch();
Respuesta[8] = getch();
Respuesta[9]= getch();
Respuesta[10]= getch();
Respuesta[11]= getch();
Respuesta[12]= getch();
Respuesta[13]= getch();
Respuesta[14]= getch();
Respuesta[15]='\0';
Respuesta[16]='\0';
Respuesta[17]='\0';
Respuesta[18]='\0';
Respuesta[19]='\0';
Respuesta[20]='\0';
Respuesta[21]='\0';
Respuesta[22]='\0';
Respuesta[23]='\0';
Respuesta[24]='\0';
Respuesta[25]='\0';
Respuesta[26]='\0';
Respuesta[27]='\0';
Respuesta[28]='\0';
Respuesta[29]='\0';
Respuesta[30]='\0';
Respuesta[31]= '\0';
indice = 0;
//while(1);
while (Respuesta[indice] != '\0')
{
if ((Respuesta[indice] == 'O') && (Respuesta[indice + 1] == 'K'))
{
ok[0] = Respuesta[indice];
ok[1] = Respuesta[indice + 1];
}
indice++;
ok[2] = '\0';
}
//while(1);
ComandoRecibido=ok;
if (strcmp(ComandoRecibido,"OK") == 0){ // Todo a ido bien
// while(1);
LED0=0;
error_comando=0;
}
else{ // No es el comando bueno
// while(1);
error_comando=1;
}
//*****************************************************************************
//SEXTO COMANDO AT
//*****************************************************************************
putst ("AT+BTK=\"1234\"");
putch ('\r');
Respuesta[0] = getch();
Respuesta[1] = getch();
Respuesta[2] = getch();
Respuesta[3] = getch();
Respuesta[4] = getch();
Respuesta[5] = getch();
Respuesta[6] = getch();
Respuesta[7] = getch();
Respuesta[8] = getch();
Respuesta[9]= getch();
Respuesta[10]= getch();
Respuesta[11]= getch();
Respuesta[12]= getch();
Respuesta[13]= getch();
Respuesta[14]= getch();
Respuesta[15]= getch();
Respuesta[16]= getch();
Respuesta[17]= getch();
Respuesta[18]= getch();
Respuesta[19]= getch();
Respuesta[20]='\0';
Respuesta[21]='\0';
Respuesta[22]='\0';
Respuesta[23]='\0';
Respuesta[24]='\0';
Respuesta[25]='\0';
Respuesta[26]='\0';
Respuesta[27]='\0';
Respuesta[28]='\0';
Respuesta[29]='\0';
Respuesta[30]='\0';
Respuesta[31]= '\0';
indice = 0;
//while(1);
while (Respuesta[indice] != '\0')
{
if ((Respuesta[indice] == 'O') && (Respuesta[indice + 1] == 'K'))
{
ok[0] = Respuesta[indice];
ok[1] = Respuesta[indice + 1];
}
indice++;
ok[2] = '\0';
}
//while(1);
ComandoRecibido=ok;
if (strcmp(ComandoRecibido,"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');
Respuesta[0] = getch();
Respuesta[1] = getch();
Respuesta[2] = getch();
Respuesta[3] = getch();
Respuesta[4] = getch();
Respuesta[5] = getch();
Respuesta[6] = getch();
Respuesta[7] = getch();
Respuesta[8] = getch();
Respuesta[9]= getch();
Respuesta[10]= getch();
Respuesta[11]= '\0';
Respuesta[12]= '\0';
Respuesta[13]= '\0';
Respuesta[14]= '\0';
Respuesta[15]= '\0';
Respuesta[16]= '\0';
Respuesta[17]= '\0';
Respuesta[18]= '\0';
Respuesta[19]= '\0';
Respuesta[20]='\0';
Respuesta[21]='\0';
Respuesta[22]='\0';
Respuesta[23]='\0';
Respuesta[24]='\0';
Respuesta[25]='\0';
Respuesta[26]='\0';
Respuesta[27]='\0';
Respuesta[28]='\0';
Respuesta[29]='\0';
Respuesta[30]='\0';
Respuesta[31]= '\0';
indice = 0;
//while(1);
while (Respuesta[indice] != '\0')
{
if ((Respuesta[indice] == 'O') && (Respuesta[indice + 1] == 'K'))
{
ok[0] = Respuesta[indice];
ok[1] = Respuesta[indice + 1];
}
indice++;
ok[2] = '\0';
}
//while(1);
ComandoRecibido=ok;
if (strcmp(ComandoRecibido,"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');
Respuesta[0] = getch();
Respuesta[1] = getch();
Respuesta[2] = getch();
Respuesta[3] = getch();
Respuesta[4] = getch();
Respuesta[5] = getch();
Respuesta[6] = getch();
Respuesta[7] = getch();
Respuesta[8] = getch();
Respuesta[9]= getch();
Respuesta[10]= '\0';
Respuesta[11]= '\0';
Respuesta[12]= '\0';
Respuesta[13]= '\0';
Respuesta[14]= '\0';
Respuesta[15]= '\0';
Respuesta[16]= '\0';
Respuesta[17]= '\0';
Respuesta[18]= '\0';
Respuesta[19]= '\0';
Respuesta[20]='\0';
Respuesta[21]='\0';
Respuesta[22]='\0';
Respuesta[23]='\0';
Respuesta[24]='\0';
Respuesta[25]='\0';
Respuesta[26]='\0';
Respuesta[27]='\0';
Respuesta[28]='\0';
Respuesta[29]='\0';
Respuesta[30]='\0';
Respuesta[31]= '\0';
indice = 0;
//while(1);
while (Respuesta[indice] != '\0')
{
if ((Respuesta[indice] == 'O') && (Respuesta[indice + 1] == 'K'))
{
ok[0] = Respuesta[indice];
ok[1] = Respuesta[indice + 1];
}
indice++;
ok[2] = '\0';
}
//while(1);
ComandoRecibido=ok;
if (strcmp(ComandoRecibido,"OK") == 0){ // Todo a ido bien
// while(1);
LED3=0;
error_comando=0;
}
else{ // No es el comando bueno
// while(1);
error_comando=1;
}
//***********************************************************//
//ESPERAR A QUE UN DISPOSITIVO SE QUIERA CONNECTAR AL NUESTRO//
//***********************************************************//
//*****************************************************************************
//MENSAJE DE APAREJAMIENTO: "PAIR 0 008098E6A5F4" (19 caracteres) + 4 =23
//*****************************************************************************
LeerRespuesta(aparejamiento);
if (strcmp(ComandoRecibido,"PAIR 0 008098E6A5F4") == 0){ // Todo a ido bien
// while(1);
LED0=1;
error_comando=0;
}
else{ // No es el comando bueno
// while(1);
error_comando=1;
}
//*****************************************************************************
//MENSAJE DE LLAMADA: "RING 008098E6A5F4 (17 caracteres)" +4 =21
//*****************************************************************************
LeerRespuesta(ring);
ComandoRecibido=ring;
if (strcmp(ComandoRecibido,"RING 008098E6A5F4") == 0){ // Todo a ido bien
// while(1);
LED0=1;
error_comando=0;
}
else{ // No es el comando bueno
// while(1);
error_comando=1;
}
//*****************************************************************************
//MENSAJE DE CONEXION: CONNECT 008098E6A5F4,1101 A (27 caracteres) + 4=31
//*****************************************************************************
LeerRespuesta(connexion);
ComandoRecibido=connexion;
if (strcmp(ComandoRecibido,"CONNECT 008098E6A5F4,1101 A") == 0){ // Todo a ido bien
// while(1);
LED0=1;
error_comando=0;
}
else{ // No es el comando bueno
// while(1);
error_comando=1;
}
Muchas gracias otra vez amigo