在做PID调试,还有卡尔曼滤波融合的时候,如果有一个能把数据实时传回电脑进行分析,并且生成图形的软件,会对调试过程起到事半功倍的效果。 软件的SVN地址是http://code.google.com/p/serialchart/ 配置方法介绍地址是http://code.google.com/p/serialchart/wiki/ConfigurationFileSyntax ![]() ![]() 软件下载: ![]() 下面介绍下这个软件的使用:
介绍 SerialChart通过一个文本来进行配置。通常的格式如下: [section1] param1 = value param2 = value ... [section2] param1 = value param2 = value Setup 部分 每个配置文件由[_setup_]部分开始,这里你能设置全局参数比如: [_setup_] port=COM3 baudrate=57600 width=1000 height=201 background_color = white grid_h_origin = 100 grid_h_step = 10 grid_h_color = #EEE grid_h_origin_color = #CCC grid_v_origin = 0 grid_v_step = 10 grid_v_color = #EEE grid_v_origin_color = transparent 下面是在[_setup_]部分能够使用的参数: port 这就是软件进行串口通讯的接口啦,比如COM1,COM2.。。 baudrate 波特率,目前只支持以下几种波特率: 110,300,600,1200,2400,9600,19200,38400,57600,115200. 请注意目前的版本不支持流量控制的参数设置,默认设置为“无”,停 止位默认为1,采用最常用的设置 width,height chart区域的象素宽度和高度 background_color chart的背景颜色 关于颜色的一些提醒 请注意在.SCC文件中(也就是此软件的配置文件)颜色可以用16进制来表示(如 #FFF,#FFFFFF) 或者用一些已命名的颜色(白色,蓝色,品红,粉红,灰色) 更多颜色请参考 http://www./TR/SVG/types.html#ColorKeywords 请注意特殊的 颜色“透明”代表“没有颜色”。如果你不想让一些元素被绘制出来你可以使用它 grid_h_origin, grid_v_origin 水平方向和竖直方向都有一条原始的轴线,一般和普通的格点线(每条曲线都是由一个个像素组成的,所以叫格点线)颜色不同这两个参数确定了轴线在图表中距离顶点、左侧边界的位移,单位为像素 grid_h_origin_color, grid_v_origin_color 原始轴线的颜色 grid_h_step, grid_v_step 这两个参数确定了每次画线的长度(我也搞不懂这句话。。) grid_h_color, grid_v_color 普通格点线的颜色 Default and Field Sections (默认设置和区域设置)SerialChart能识别CSV(逗号分隔数据)的数据包(将来可能会支持更多的格式)。每一行传送一份数据包,每一份数据包中的不同数据用逗号来分隔。下面的例子是SerialChart能识别的格式: 100,0.50,0.70 101,0.30,0.50 102,0.25,0.35 在配置文件中,下面的部分为每份数据包中的不同数据设定了参数比如: [_default_] min=-1 max=1 [Field1] color=gray min=0 max=255 [Field2] color=blue [Field3] color=red 通过[_default_]你可以对所有区域进行一个默认设置。这些参数对所有的数据区都有效除非在[Field]区域中他们被相同的名字覆盖在上面的例子中,[Field2]和[Field3]将继承[_default_]区的默认设置 min=-1,max=1,但[Field1]中的参数把值改为了min=0 and max=255 在你设置了默认设置后你应该为数据包中每个区域进行新的设置。设置顺序应根据他们在数据包中的先后而设置[field]部分的名字可以随意命名但不能和[_setup_],[_default_]相同,也不能以'_'开头和结尾,比如可以命名为[distance],[time],但不能命名为[_setup],[_time_]下面的参数是[default]和[field]区能识别的参数min,max这两个值是对应曲线在图中的上下界。换句话说,如果你设定min=-1,max=1,那数据“1”将会被描绘在图中的顶端,数据“-1”将被描绘在图中的底端,而“0”将会描绘在图的正中间。数据会从[min,max]映射到图中的[0,height],height就是曲线图的高度,在开始的[_setup_]中可以设置(这有点像arduino中的map()函数) color 设置数据所对应曲线的颜色。如果你不想让某个数据被绘制出来可以设置为transparent(透明) dash 可将曲线变成一条虚线,如,当dash=3,软件会将3个数据绘制出来,再停止绘制3个数据,再绘制3个数据,如此反复。。 翻译完毕,加入一些个人使用心得 1、串口只能同时被一个程序使用,当你要更新程序时,要点 SerialChart中的stop 2、刚下完程序打开SerialChart可能没反应,按一下复位再等个几秒应 该就好了,bootloader的启动速度,你懂得。。。 3、[field]的名字千万不能相同,否则有些曲线是绘制不出来的 发个我测试超声波的例子吧 Serial Chart代码:
arduino代码:
arduino代码省略了很多。。。写的太烂了。。 大体是这样的 好了,希望这个软件能帮上大家的忙 问:请教个问题,我用串口发送数据的时候发现,Serial.print好像强制以ascii形式发送的,比如说101,其实发送的是字符串“101”的ascii码49、48、49,这样处理数据的话好像效率特别低,有没有什么比较好的办法直接传输数值的? 答: 你可以给他加上格式 具体可以参考一下他的reference 关于Serial_Print 他的原文是这样的: Serial.print(78, BIN) gives "1001110"//输出二进制 Serial.print(78, OCT) gives "116"//输出8进制 Serial.print(78, DEC) gives "78"//输出10进制 Serial.print(78, HEX) gives "4E"//输出16进制 Serial.println(1.23456, 0) gives "1"//输出浮点,后面的数字代表小数位数 Serial.println(1.23456, 2) gives "1.23"//同上 Serial.println(1.23456, 4) gives "1.2346"//同上 问: 不知道你有没有试过,这样发送的其实还是ascii值 答: 恩,我仔细看了一下他的reference,好像arduino会自动把所有类型转为ASCII码 Numbers are printed using an ASCII character for each digit. Floats are similarly printed as ASCII digits, defaulting to two decimal places. Bytes are sent as a single character. Characters and strings are sent as is. 我现在也想不到什么好办法 可以提高波特率吧,在一定范围内 还有,避免使用float,或者压缩一下数据,呵呵 这个可以讨论一下,但是目前的通信速率已经够我用了 |
|