Steins;Lab

某团的自留研究所

【学习笔记】Arduino与上位机的串口通讯笔记(一)

Arduino与上位机的串口通讯相关笔记(一) Arduino下位机相关

ArduinoUnoChinese_front

 

 

0.前言

最近在读书籍:《ARDUINO与LABVIEW开发实战》、《Labview虚拟仪器数据采集与串口通信测控应用实战》。

 

看到了许多用arduino作为下位机的测控实例,感觉颇为有趣。

说到底,ARDUINO与LABVIEW等等只是工具,真正项目使用的元件取决于必须满足的要求、精度、成本和开发时间。在作者提供的测控实例中,arduino作为下位机,体现着性价比极高的特点。尤其是采样速率和精度要求不高时,可以胜任一定的需求。labview作为上位机,简单易用,其虚拟仪器的特点令软件设计可视化,同时提供了系列的前面板设计环境,所见即所得。

 

最近攒集的笔记主要是关于arduino与上位机通信的内容

1.ARDUINO中的串口通信函数

1.1 函数

1.2 需要注意的一些事项

  • 串口缓冲区为64B,使用Serial.read时,读取1字节,同时从缓冲区删除
  • 注意:每个数字输出使用的是ASCII字符,浮点类型同样输出的是ASCII字符,默认保留小数点后2位
    byte输出单个字符
    字符和字符串原样输出
    println输出数据自动换行
  • 输出附加指令参照最后的例子

 


2. 下位机编程

2.1 模式选择

一般地,一个下位机可能不工作在单一的模式中,需要初始化时指定其工作模式。工作模式通过如下思路选择

命令监测、执行由receive_data()和test_do_data()负责

首先建立缓冲区数组

byte comdata[3]={0};
char numdata[4]={0,0,0,0};

建立flag

用于缓冲上位机传来的数据

上位机数据具有识别功能。

识别:

设定0x55位有效命令开头,开始读取下一帧

设定0xAA为模式选择开头,进入模式选择

设定各模式十六进制代码,switch选择,用flag标记模式号(1~4,0留给未选择)

最后用maxnum缓存传来的数值

然后再loop中调用函数

 

2.2 数值传递

上位机向下位机发送数值时,按照位传递。这里上位机下位机统一配套,统一传送。如约定传送四位十进制整数“0098”“1368”

下位机对缓冲区数据的处理:

 


3.实验原型

 

对一个脉冲信号进行稀释,比率由上位机传送。

 

比较原始 存在一些问题,随着后来的学习进行改正

 

说点什么

avatar
  Subscribe  
提醒