[英]arduino read hex from serial rs232 in
我從 rs232 Tx RX 讀取串行數據時遇到問題
我的代碼是
uint8_t cc;
char rtx[MAX_LEN] = { 0 };
int ii, lenn = 0;
Serial.print("recv (HEX): ");
Serial.println();
while (mySerial.available())
{
cc = mySerial.read();
if (cc < 0x10) Serial.print("0");
Serial.print(cc, HEX);
rtx[lenn] = cc; lenn++;
Serial.print("");
}
Serial.println();
在這里我可以看到我的輸出沒有問題
例如 output
recv (HEX):
030039094C80703470326421A5713DFE01EA6B79AE8D9DBD94F523F95340217C739BCB3B75DE1D1EF09CF03D2F916AB390E92136074A41BBA4E95ACB
我想從外面打印 rtx 的問題
例如我用過這段代碼
char buffer[MAX_LEN] = { 0 };
sprintf(buffer, "%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",rtx[0],rtx[1],rtx[2],rtx[3],rtx[4],rtx[5],rtx[6],rtx[7],rtx[8],rtx[9],rtx[10],rtx[11],rtx[12],rtx[13],rtx[14],rtx[15],rtx[16],rtx[17],rtx[18],rtx[19],rtx[20]);
Serial.println(buffer);
它只給出有限的錯誤數據
我懂了
0300FF39094FFFC807034FFF70326421A571
問題是在 out 中添加 FFF,我無法獲取所有 rtx[21]、rtx[22]、rtx[23]、rtx[23]、rtx[24]......
您的緩沖區需要兩倍大加上一個尾隨零字節:
uint8_t buffer[MAX_LEN*2 + 1] = { 0 };
sprintf(buffer, "%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",rtx[0],rtx[1],rtx[2],rtx[3],rtx[4],rtx[5],rtx[6],rtx[7],rtx[8],rtx[9],rtx[10],rtx[11],rtx[12],rtx[13],rtx[14],rtx[15],rtx[16],rtx[17],rtx[18],rtx[19],rtx[20]);
Serial.println(buffer);
這些值以字節存儲,但要將它們轉換為十六進制字符串,每個值需要 2 個字節/字符。
參數個數與格式字符串不匹配(21 個參數,20 個格式字符串)。
閱讀時,您必須檢查 MAX_LEN 以避免緩沖區溢出。
下面是一些讀取和顯示緩沖區的示例代碼:
#define MAX_LEN 100
uint8_t rtx[MAX_LEN] = { 0 };
ReadData();
PrintBuffer(20);
int ReadData()
{
int lenn = 0;
Serial.println("recv (HEX): ");
while (mySerial.available()) {
if (lenn >= MAX_LEN) {
Serial.println();
Serial.println("Buffer overflow");
return(-1);
}
uint8_t cc = mySerial.read();
PrintHexByte(cc);
rtx[lenn++] = cc;
}
Serial.println();
return(0);
}
void PrintBuffer(int len)
{
if (len < 0 || len > MAX_LEN)
len = MAX_LEN;
for (int i = 0; i < len; ++i) {
PrintHexByte(rtx[i]);
}
Serial.println();
}
void PrintHexByte(uint8_t cc)
{
if (cc < 0x10)
Serial.print("0");
Serial.print(cc, HEX);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.