【问题标题】:Read an incoming HEX packet from Serial从 Serial 读取传入的 HEX 数据包
【发布时间】:2019-04-03 14:00:50
【问题描述】:

我正在一个 arduino 上编写 a 代码,并且正在与另一个 HEX 设备进行通信。我想知道如何读取他发给我的数据。

我正在发送一个 HEX 数据包(这里一切正常,没问题)

//Ask for Data
Serial.write(askData, sizeof(askData));

之后我会收到数据(十六进制)。我需要将其全部存储起来以备后用。我唯一知道的是它将以“16”结尾。我事先不知道数据包的长度。 这是我可以收到的示例或数据包:

68   4E   4E   68   08   09   72   90   90   85   45   68   50   49   06   19   00   00   00   
0C   14   02   00   00   00   8C   10   12   35   02   00   00   0B   3B   00   00   00   8C   
20   14   02   00   00   00   8C   30   14   00   00   00   00   04   6D   2F   09   61   24   
4C   14   02   00   00   00   42   6C   5F   2C   42   EC   7E   7F   2C   0A   92   2A   00   
10   0A   92   2B   00   10   39   16

有人可以帮帮我吗?

【问题讨论】:

  • 我认为说您正在发送“十六进制”数据是不正确的 - 看起来您正在发送/接收以十六进制表示形式打印的二进制数据。如果您要发送十六进制数据,您将发送“16” - 即 ascii “1”,然后是 ascii “6” - 用于该完成标记,而不是“\x16”,它是单个(二进制)字节。

标签: arduino serial-port hex


【解决方案1】:

Thisarduino 示例稍作修改:

/* reserve 200 bytes for the inputString:
 * assuming a maximum of 200 bytes
 */
uint8_t inputString[200];  // a String to hold incoming data
int countInput = 0;
bool stringComplete = false;  // whether the string is complete

void setup() {
  // initialize serial:
  Serial.begin(115200);
}

void loop() {
  // print the string when 0x16 arrives:
  if (stringComplete) {
    for (int i=0; i<countInput; i++) {
      Serial.print(inputString[i], HEX);
      Serial.print(" ");
    }
    // clear the string:
    countInput = 0;
    stringComplete = false;
  }
}
/*
  SerialEvent occurs whenever a new data comes in the hardware serial RX. This
  routine is run between each time loop() runs, so using delay inside loop can
  delay response. Multiple bytes of data may be available.
*/
void serialEvent() {
  while (Serial.available()) {
    // get the new byte:
    inputString[countInput] = (uint8_t)Serial.read();

    // if the incoming character is '0x16', set a flag so the main loop can
    // do something about it:
    if (inputString[countInput] == 0x16) {
      stringComplete = true;
    }
    countInput++;
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多