极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 207622|回复: 86

SerialChart串口波形描绘_使用说明翻译

  [复制链接]
发表于 2012-2-22 23:34:56 | 显示全部楼层 |阅读模式
本帖最后由 Malc 于 2015-3-10 14:51 编辑

介绍
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.w3.org/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代码:
  1. [_setup_]
  2. port=COM3   
  3. baudrate=9600

  4. width=10000
  5. height=500
  6. background_color = white

  7. grid_h_origin = 0
  8. grid_h_step = 1
  9. grid_h_color = #EEE
  10. grid_h_origin_color = #CCC

  11. grid_v_origin = -100
  12. grid_v_step = 0
  13. grid_v_color = #EEE
  14. grid_v_origin_color=#CCC
  15. [_default_]
  16. min=0
  17. max=500

  18. [pulsetime]
  19. min=0
  20. max=40000
  21. color=bisque

  22. [pulsetime1]
  23. min=0
  24. max=40000
  25. color=gray


  26. [distance1]
  27. color=pink
  28. min=0
  29. max=400



  30. [distance2]
  31. color=gold
  32. min=0
  33. max=400

  34. [distance]
  35. color=red
  36. min=0
  37. max=400
复制代码
arduino代码:
  1. void setup()
  2. {
  3.   pinMode(BeePin,OUTPUT);
  4.   pinMode(UMT,OUTPUT);
  5.   pinMode(UMR,INPUT);
  6.   Serial.begin(9600);
  7.   Serial.println("begin");
  8. }

  9. unsigned long Detect1()
  10. {
  11.   //一坨
  12.   return 10000;
  13. }

  14. unsigned long Detect2()
  15. {
  16.   //两坨
  17.   return 20000;
  18. }
  19. void loop()
  20. {
  21.   distance1=Detect1();
  22.   distance2=Detect2();
  23.   Serial.print(distance1,DEC);
  24.   Serial.print(",");
  25.   Serial.print(distance2,DEC);
  26.   Serial.print(",");*/
  27.    delay(100);
  28. }
复制代码
arduino代码省略了很多。。。写的太烂了。。{:soso_e127:} 大体是这样的
好了,希望这个软件能帮上大家的忙
回复

使用道具 举报

发表于 2015-12-27 12:56:29 | 显示全部楼层
有一个问题,chart的线太细了,有没有办法加粗,要不然观察起来很难啊
回复 支持 1 反对 0

使用道具 举报

发表于 2012-10-28 19:36:15 | 显示全部楼层
显示的波形                        printf("%d",angx);
                        printf(",");
                        printf("%d",angy);
                        printf(",");
                        printf("%d",angz);
                        printf("\n");

本帖子中包含更多资源

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

x
回复 支持 0 反对 1

使用道具 举报

 楼主| 发表于 2012-2-22 23:36:42 | 显示全部楼层
哦 附张前几天的测试图吧

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-2-23 00:34:45 | 显示全部楼层
==!忘记发原文的链接地址了{:soso_e136:}
SerialChart一个串口数据实时生成图形的软件
回复 支持 反对

使用道具 举报

发表于 2012-2-23 09:22:54 | 显示全部楼层
谢谢分享,很实用的小软件.
回复 支持 反对

使用道具 举报

发表于 2012-2-25 14:16:47 | 显示全部楼层
请教个问题,我用串口发送数据的时候发现,Serial.print好像强制以ascii形式发送的,比如说101,其实发送的是字符串“101”的ascii码49、48、49,这样处理数据的话好像效率特别低,有没有什么比较好的办法直接传输数值的?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-2-25 18:09:53 | 显示全部楼层
黑马 发表于 2012-2-25 14:16
请教个问题,我用串口发送数据的时候发现,Serial.print好像强制以ascii形式发送的,比如说101,其实发送的 ...

你可以给他加上格式
具体可以参考一下他的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"//同上
回复 支持 反对

使用道具 举报

发表于 2012-2-26 01:49:51 | 显示全部楼层
黑马 发表于 2012-2-25 14:16
请教个问题,我用串口发送数据的时候发现,Serial.print好像强制以ascii形式发送的,比如说101,其实发送的 ...

Serial发送数字时就是遵循这个规则来的,拆分成单个digital,以字符形式发送。如果你发送的数字在255以内,可以转换成BYTE方式发送。
回复 支持 反对

使用道具 举报

发表于 2012-2-26 19:48:19 | 显示全部楼层
Malc 发表于 2012-2-25 18:09
你可以给他加上格式
具体可以参考一下他的reference
关于Serial_Print

不知道你有没有试过,这样发送的其实还是ascii值
回复 支持 反对

使用道具 举报

发表于 2012-2-26 19:50:15 | 显示全部楼层
ardyPro 发表于 2012-2-26 01:49
Serial发送数字时就是遵循这个规则来的,拆分成单个digital,以字符形式发送。如果你发送的数字在255以内 ...

255以内的话用write更方便了……
我现在是拆成两个7位的,最高位做标志位
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-2-26 20:31:47 | 显示全部楼层
黑马 发表于 2012-2-26 19:48
不知道你有没有试过,这样发送的其实还是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,或者压缩一下数据,呵呵
这个可以讨论一下,但是目前的通信速率已经够我用了
回复 支持 反对

使用道具 举报

发表于 2012-2-26 21:27:50 | 显示全部楼层
黑马 发表于 2012-2-26 19:50
255以内的话用write更方便了……
我现在是拆成两个7位的,最高位做标志位

记不太清了 1.0的write跟其他版本的可能是不太一样,1.0开始推荐使用write
回复 支持 反对

使用道具 举报

发表于 2012-2-26 21:29:02 | 显示全部楼层
Malc 发表于 2012-2-26 20:31
恩,我仔细看了一下他的reference,好像arduino会自动把所有类型转为ASCII码
Numbers are printed using ...

float走到哪里都不怎么受欢迎 ,但是没有它又还不行。
回复 支持 反对

使用道具 举报

发表于 2012-5-23 01:07:41 | 显示全部楼层
谢谢 翻译。
对一些人来说很有用处。
回复 支持 反对

使用道具 举报

发表于 2012-5-31 00:50:21 | 显示全部楼层
黑马 发表于 2012-2-25 14:16
请教个问题,我用串口发送数据的时候发现,Serial.print好像强制以ascii形式发送的,比如说101,其实发送的 ...

效率似乎目前还不是瓶颈,毕竟现在新版的ARDUINO支持的波特率都很高。而且大多数情况下貌似也不需要如此高的采样率绘图
回复 支持 反对

使用道具 举报

发表于 2012-5-31 15:08:02 | 显示全部楼层
这个软件是不是只能在WIN7上运行呀,我的XP的,貌似不行哦
回复 支持 反对

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-27 07:01 , Processed in 0.052081 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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