En mi pregunta anterior en este enlace , hice una pregunta sobre cómo usar minicom en linux para comunicarse entre dos Xbee's in API mode
y obtuve la respuesta. Mientras intenté lo mismo con XCTU en Windows un lado y AVR + Xbee
en el otro lado, pude comunicarme entre 2 Xbee
.
En el lado de AVR, había escrito este código para recibir el char y almacenarlo en una cadena.
#include <yuktix.h>
#include <debug.h>
#include <uart2560.h>
#include <util/delay.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <debug.h>
/*for sensor readings*/
#include <AVRI2C.h>
#include <spi.h>
//char Id;
//char cmd;
static char ch;
static char *frame;
static uint8_t index = 0;
int main(){
init_processor();
uart_init(0,B9600);
uart_init(1,B9600);
uart_init(2,B9600);
for(int j = 0; j < 1000 ; j++)
_delay_ms(1);
uart_puts(0, " \r \nstarting Xbee Test \r \n");
while(1){
while(uart_available(2) > 0){
KDEBUG("Inside uart_available");
KDEBUG("\n");
ch = uart_getc(2);
uart_putc(0,ch);
KDEBUG("Saving it in frame \n");
*frame++ = ch;
KDEBUG("saved in frame \n");
//if(ch == '\');
}
KDEBUG("COming out of While loop");
*frame = '#include <yuktix.h>
#include <debug.h>
#include <uart2560.h>
#include <util/delay.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <debug.h>
/*for sensor readings*/
#include <AVRI2C.h>
#include <spi.h>
//char Id;
//char cmd;
static char ch;
static char *frame;
static uint8_t index = 0;
int main(){
init_processor();
uart_init(0,B9600);
uart_init(1,B9600);
uart_init(2,B9600);
for(int j = 0; j < 1000 ; j++)
_delay_ms(1);
uart_puts(0, " \r \nstarting Xbee Test \r \n");
while(1){
while(uart_available(2) > 0){
KDEBUG("Inside uart_available");
KDEBUG("\n");
ch = uart_getc(2);
uart_putc(0,ch);
KDEBUG("Saving it in frame \n");
*frame++ = ch;
KDEBUG("saved in frame \n");
//if(ch == '\');
}
KDEBUG("COming out of While loop");
*frame = '%pre%';
KDEBUG(frame);
}
}
';
KDEBUG(frame);
}
}
Según mi respuesta a la última pregunta, recibo un char en el lado AVR. Como cada fotograma del modo API XBEE comienza con 7E
, donde 7E
es equivalente a ~
, lo estoy recibiendo, pero algunos de los caracteres eran ilegibles y los datos que envío en el marco API son totalmente legibles. Mi pregunta es
- ¿Cómo puedo almacenar el marco de API recibido en una cadena ya que mi código no parece funcionar?
- ¿Debería convertir la cadena en HEX a través de algún código
binary_to_hex
y luego analizarla, ya que necesito saber de qué dirección provienen estos datos, qué tipo de trama es, cuál es el número de bytes en el marco, de modo que después de excluir la dirección de origen, puedo sacar los datos. - me estoy perdiendo algo. Los datos en el lado AVR siempre estarán en binario, pero ¿cómo puedo procesar los datos?