我正在使用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” 它不会读为十六进制,是吗?
如何让程序以十六进制的形式读取输入中的字符串?
答案 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字符)然后调用此函数