接收以十六进制读取的读取消息

时间:2013-09-02 19:27:49

标签: hex arduino

我正在使用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” 它不会读为十六进制,是吗?

如何让程序以十六进制的形式读取输入中的字符串?

1 个答案:

答案 0 :(得分: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字符)然后调用此函数