1

我在 lunix/windows 中使用 arduino 1.0.5 编程

使用这段代码:

void readSerialString () {
    char buffer[8];
    if(Serial.available()) {
        while (Serial.available()){
            sb = Serial.read();
            buffer[indexB] = sb;
            indexB++;
        }
      }
        Serial.println(buffer);

}

我正在尝试(通过串行终端)发送可以以十六进制显示的消息。

例如,如果我写: "\xaa\x22\xa1" 它不会读取为十六进制,对吗?

如何让程序将输入中的字符串读取为十六进制?

4

1 回答 1

1

不要误会数据及其格式。您可以访问 printf 吗?如果是这样,请使用printf("%x",char)将 char 视为十六进制。

Arduino 解决方案 Serial.print(78, HEX) 给出“4E”

http://arduino.cc/en/Serial/Print

[编辑]

我需要相反的印刷品。我需要将来自串行终端的令牌字符串解释为十六进制。

为此,请使用 read(),但您必须实现从 ascii HEX 到数据的转换函数,作为 2 个字符上一个字节的 HEX 数据,我的函数将两个字符作为输入)

char hex_ascii_to_databyte(char c1, char c2){
    char res=0;
    if(c1>=48 && c1<=57) res = c1-48;
    else if(c1>=65&& c1<=70) res = c1 - 65 + 0xa;
    else if(c1>=97&& c1<=102) res = c1 - 97 + 0xa;
    else{//error
    }
    //idem c2 in res2
    res=res<<4;
    res+=res2;
    return res;
}

对于每个十六进制读取,调用两次读取(读取 2 个 ascii 字符)然后调用这个函数

于 2013-09-02T19:30:49.200 回答