我在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"它不会读成十六进制,是吗?
如何让程序将输入中的字符串读取为十六进制?
不要搞错数据及其格式。你可以访问printf吗?如果是,请使用printf("%x",char)
将字符视为十六进制。
Arduino解决方案串行打印(78,HEX)给出"4E"
参见http://arduino.cc/en/Serial/Print
[编辑]
我需要相反的印刷品。我需要将来自串行终端的令牌字符串解释为十六进制。
要做到这一点,请使用read(),但您必须实现从ascii HEX到数据的转换函数,作为一个字节的HEX数据,需要2个字符,我的函数需要两个字符作为输入)
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;
}
对于每个十六进制读取,调用两次read(读取2个ascii字符),然后调用此函数