Buenas como estan?
Segui trabajando sobre este desarrollo complejizandolo un poco mas, el siguiente paso que di despues de poder ver la cadena que me enviaba el micro que se comporta como el sensor, es poder seleccionar determinados elementos de esa cadena
Les recuerdo que la cadena era asi, y los datois utiles eran:
004+26.2,+79.1,+0.217,+0.944,+0.034,+13.218,+13.552,+12.478,+12.273,+0.035,+26.2,
HUM RD
La idea era asi, tomar los datos que me devuelve el sensor en esa cadena de caracteres, para ello implemente las siguientes funciones de cadenas de CCS o mejor dicho de C++, aunque esto implico que cambie un micro de 4K de flash por uno de 8K
strncpy : Esta funcion lo que hace es copiar n caracteres de una cadena en otra cadena
sintaxis: strncpy( cad1, cad2, 5) ---------> Lo que hace aca es copiar los 5 primeros caracteres de cad2 en cad1
strchr : Esta funcion lo que hace es localizar el primer caracter especificado en una cadena
sintaxis: strchr ( cad1, ',') ------------> localiza la primer coma dentro de la cadena cad1 y devuelve esa posicion dentro de la cadena.
yo implemente asi:
1- strncpy (cad_hum, strchr(cadena, ',')+1, 31);
lo que hago aqui es buscar una coma y copiar la cadena en cad_hum a partir de esa coma incluida.
2- strncpy (humedad, strchr(cad_hum, ',')+2, 5);
lo que hago aqui es tomar la cadena auxiliar y desde la coma mas dos caracteres (de esta forma elimino el +) copio los 5 caracteres siguientes.
Esto funciono muy bien para la humedad que esta en la posición tres de la cadena que me devuelve el sensor, pero no logro hacerlo funcionar para la posición 5 de la cadena, sigo probando con estas funciones de cadenas, me parece que voy a tener que revisar el Deitel&Deitel.
En el programa ejemplo que dejo, muestro la posicion 2 y 3 de la cadena, pero la que necesito mostrar es la 2 y la 5...
Saludos, por lo menos algo anduvo de lo que quiero hacer jeje
************************************************************************************************
#include <16F873.h>
#device adc=10
#FUSES XT,NOWDT
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=pin_c6, rcv=pin_c7))
#include <string.h>
#include <LCD420.C>
char cadena[50];
int1 flag=0;
#int_rda
void serial_isr()
{
gets(cadena);
flag=1;
}
void main()
{
int16 q;
int i,j;
float p;
char humedad[7], RD[8], cad_hum[31], cad_RD[25];
setup_adc_ports(AN0); //Canal 0 analógico
setup_adc(ADC_CLOCK_INTERNAL); //Fuente de reloj RC
enable_interrupts(global);
enable_interrupts(int_rda);
lcd_init();
/*printf(lcd_putc,"\f HERACLES V1.0");
delay_ms(300);
printf(lcd_putc,"\f");*/
set_adc_channel(0); //Habilitación canal0
while(true)
{
if (flag == 1)
{
strncpy (cad_hum, strchr(cadena, ',')+1, 31);
strncpy (humedad, strchr(cad_hum, ',')+2, 5);
strncpy (cad_RD, strchr(cad_hum ',')+3, 20);
strncpy (RD, strchr(cad_RD, ',')+2, 5);
//strncpy (cad_hum, strchr(cad_RD, ',')+3, 10);
//strncpy (RD, strchr(cad_hum, ',')+2, 5);
delay_ms(500);
printf(lcd_putc, "\fHumedad = %s ", humedad);
printf(lcd_putc, "\nRD = %s", RD);
flag = 0;
}
}
}