Help with Serial Hex Data
hi,
i'm working on reading 5 byte hex code that's being sent digi connectport x4 via serial mega adk. data being sent every 30 seconds. format of data : 0xaa, 0x"", 0x"", 0x"ffff", 0xaa header, 2 bytes contain voltage value remote xbee has been parsed , packed, 0x"ffff" crc value.
my general input comes in 0xaa 0x03, 0xbc, 0xa1, 0x50.
what i'm having trouble pulling packed value out of data stream. loose part of packet , don't know how fix that.. , have trouble crc calculation. i've commented out of xmodem crc stuff i've seen online moment.
code follows:
#include <crc16.h>
byte data[5]; //for holding id receive
int val = 0;
int voltage = 0;
unsigned char mess[5] = {data[5]};
void setup()
{
// start serial port 19200 bps
uint16_t crc_out; //crc call
serial.begin(9600); //start serial
serial1.begin(9600); //start serial1
// crc_out = calc_crc(mess,10,0xffff); //calcs crc on fly
// serial.println(crc_out, hex); //expecting 0xffff
// delay(500);
// serial.flush();
// serial.println();
// serial.println("rfid module started in auto read mode, waiting card...");
}
void loop()
{
val = serial1.read();
while (val != 0xaa)
{
val = serial1.read();
delay(2000);
}
//we read header (0xaa)
data[0] = serial1.read(); // lo-hex
data[1] = serial1.read(); // high-hex
data[2] = serial1.read(); // checksum
data[3] = serial1.read(); // checksum
// hex voltage value
delay(50);
serial.print("data input: ");
(int = 0; < 2; i++)
{
if (data == 4);
serial.print(data, hex);
//delay(100);
//serial.println();
voltage = map(data[0,1], 0, 1023, 0, 255);
//serial.println();
serial.print(voltage);
}
serial.println();
//crc_out = calc_crc(mess,10,0xffff); //calcs crc on fly
// serial.println(crc_out, hex); //expecting 0xffff
}
// uint16_t calc_crc(unsigned char *msg,int n,uint16_t init)
//{
// uint16_t x = init;
// while(n--)
// {
// x = crc_xmodem_update(x, (uint16_t)*msg++);
// }
// return(x);
//}
//uint16_t crc_xmodem_update (uint16_t crc, uint8_t data)
//{
// int i;
// crc = crc ^ ((uint16_t)data <<
;
//for (i=0; i<8; i++)
//{
// if (crc & 0x8000)
// crc = (crc << 1) ^ 0x1021; //(polynomial = 0x1021)
//else
// crc <<= 1;
//}
// return crc;
//}
my current output : 3bc
i'm working on reading 5 byte hex code that's being sent digi connectport x4 via serial mega adk. data being sent every 30 seconds. format of data : 0xaa, 0x"", 0x"", 0x"ffff", 0xaa header, 2 bytes contain voltage value remote xbee has been parsed , packed, 0x"ffff" crc value.
my general input comes in 0xaa 0x03, 0xbc, 0xa1, 0x50.
what i'm having trouble pulling packed value out of data stream. loose part of packet , don't know how fix that.. , have trouble crc calculation. i've commented out of xmodem crc stuff i've seen online moment.
code follows:
#include <crc16.h>
byte data[5]; //for holding id receive
int val = 0;
int voltage = 0;
unsigned char mess[5] = {data[5]};
void setup()
{
// start serial port 19200 bps
uint16_t crc_out; //crc call
serial.begin(9600); //start serial
serial1.begin(9600); //start serial1
// crc_out = calc_crc(mess,10,0xffff); //calcs crc on fly
// serial.println(crc_out, hex); //expecting 0xffff
// delay(500);
// serial.flush();
// serial.println();
// serial.println("rfid module started in auto read mode, waiting card...");
}
void loop()
{
val = serial1.read();
while (val != 0xaa)
{
val = serial1.read();
delay(2000);
}
//we read header (0xaa)
data[0] = serial1.read(); // lo-hex
data[1] = serial1.read(); // high-hex
data[2] = serial1.read(); // checksum
data[3] = serial1.read(); // checksum
// hex voltage value
delay(50);
serial.print("data input: ");
(int = 0; < 2; i++)
{
if (data == 4);
serial.print(data, hex);
//delay(100);
//serial.println();
voltage = map(data[0,1], 0, 1023, 0, 255);
//serial.println();
serial.print(voltage);
}
serial.println();
//crc_out = calc_crc(mess,10,0xffff); //calcs crc on fly
// serial.println(crc_out, hex); //expecting 0xffff
}
// uint16_t calc_crc(unsigned char *msg,int n,uint16_t init)
//{
// uint16_t x = init;
// while(n--)
// {
// x = crc_xmodem_update(x, (uint16_t)*msg++);
// }
// return(x);
//}
//uint16_t crc_xmodem_update (uint16_t crc, uint8_t data)
//{
// int i;
// crc = crc ^ ((uint16_t)data <<

//for (i=0; i<8; i++)
//{
// if (crc & 0x8000)
// crc = (crc << 1) ^ 0x1021; //(polynomial = 0x1021)
//else
// crc <<= 1;
//}
// return crc;
//}
my current output : 3bc
1.
code: [select]
unsigned char mess[5] = {data[5]};
thing doing here!!!!2.
code: [select]
void loop()
{
val = serial1.read();
have no right assume there data available!..3.
code: [select]
data[0] = serial1.read(); // lo-hex
data[1] = serial1.read(); // high-hex
data[2] = serial1.read(); // checksum
data[3] = serial1.read(); // checksum
again have no right assume data avaliable let alone 5 (or 6) bytes.over score 0/1000.
mark
Arduino Forum > Using Arduino > Programming Questions > Help with Serial Hex Data
arduino
Comments
Post a Comment