串口输出内容显示为中文需要能识别显示中文编码的串口工具,还要在Arduino程序通过串口输出中文编码后的HEX。
IDE的文件编码方式是UTF8,意味着可以串口输出UTF8中文,据测试虽然UTF8中文能在串口正常输出其HEX,但目前没有找到能识别这个编码中文的串口工具,而支持ANSI编码中文的倒是有,比如 IDE V1.5.6 的串口监视器、AccessPort、和上图这个串口工具,都能识别ANSI中文,但是据测试前两者时常出现识别不正常乱码现象
于是我用AccessPort将编出乱码的HEX复制出来,然后粘贴,居然不会乱码了
得出结论,这两个串口工具虽然支持ANSI中文,但还是不够稳定。
arduino输出ANSI中文编码HEX方法:
由于IDE使用UTF8编码,还不支持中文输入,但可以粘贴中文,用Serial.println(“内容”);必然输出的是UTF8编码的HEX,我们要的是ANSI编码HEX输出。
经过这几天测试,总结出不动IDE又兼容好的方法是中文转ANSI编码HEX字符串,然后把字符串输出为HEX。
转换工具:
arduino上转换部分代码:
char a2x(char ch)
{
switch (ch)
{
case \'1\':
return 1;
case \'2\':
return 2;
case \'3\':
return 3;
case \'4\':
return 4;
case \'5\':
return 5;
case \'6\':
return 6;
case \'7\':
return 7;
case \'8\':
return 8;
case \'9\':
return 9;
case \'A\':
case \'a\':
return 10;
case \'B\':
case \'b\':
return 11;
case \'C\':
case \'c\':
return 12;
case \'D\':
case \'d\':
return 13;
case \'E\':
case \'e\':
return 14;
case \'F\':
case \'f\':
return 15;
default:
break;
}
return 0;
}
void _print(String hex)
{
char str[81];
char ch;
int i = 0;
while (hex)
{
str[i >> 1] = (a2x(hex) << 4) | a2x(hex[i + 1]);
i += 2;
}
str[i >> 1] = \' \';
Serial.print(str);
}
ps:没有做成库,吧友有空把这个优化一下做成库吧!
把上面代码加入程序,类似这样输出中文:
_print("D6D0CEC4CAE4B3F6A3ACBADCBCF2B5A5A3AC4368696E6573652074657374A3A1");
那一大串HEX字符串要显示什么自己转出来。
|