查看: 2110|回复: 3
打印 上一主题 下一主题

串口调试用中文输出内容方法

[复制链接] qrcode

38

主题

40

帖子

123

积分

注册会员

Rank: 2

积分
123
楼主
跳转到指定楼层
发表于 2014-9-12 03:38 PM | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

串口输出内容显示为中文需要能识别显示中文编码的串口工具,还要在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字符串要显示什么自己转出来。



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

0

主题

113

帖子

46

积分

新手上路

Rank: 1

积分
46
沙发
发表于 2014-9-12 03:39 PM | 只看该作者

演示

void setup() {



Serial.begin(9600);
}


void loop() {
String val = Event();
if (val != "")
{
_print("BDD3CAD5B5BDA3BA");//接收到 :
Serial.println(val);
_print("D6D0CEC4CAE4B3F6A3ACBADCBCF2B5A5A3AC4368696E6573652074657374A3A1");
//中文输出,很简单,Chinese test!


Serial.println();
}


}


String Event() {
String inputString = "";
while (Serial.available()) {
// get the new byte:
char inChar = (char)Serial.read();
inputString += inChar;
delay(2);
}
return inputString;
}


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);


}

回复 支持 反对

使用道具 举报

0

主题

105

帖子

46

积分

新手上路

Rank: 1

积分
46
板凳
发表于 2014-9-12 03:40 PM | 只看该作者
百度云盘 http://pan.baidu.com/s/1q50Iy
回复 支持 反对

使用道具 举报

0

主题

83

帖子

8

积分

新手上路

Rank: 1

积分
8
地板
发表于 2014-9-12 10:45 PM | 只看该作者
图片被限制了 
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表