关于arduino清空串口缓存(转)

在arduino1.0之前的版本 Serial.flush()的作用是是清空串口缓存( dropping received incoming data)。但在1.0之后的版本 Serial.flush()的作用调整为了等待串口数据传送完毕(Waits for the transmission of outgoing serial data to complete.)(引用自http://arduino.cc/en/Serial/Flush)。

因为我在使用wifibee的过程中,如果既想用Serial.print通过串口向wifi模块发送指令,又想用Serial.print显示出模块通过串口返回的数值,对于只有一组串口的arduino UNO来说,这两次Serial.print的内容都会向模块发送,即我会将指令和模块对指令的返回分别发送到模块上。如果将模块返回的内容print出来,虽然我们可以在串口监视器上看到,但它会同时发送给模块,对模块来说这就是一个错误的指令,肯定无法得到正确的返回。同时周而复始,错误的指令会得到错误的返回同时继续发给模块。

我在百度上找到的答案是这样的:

	如果你还需要清空串口缓存的话,可以使用:while(Serial.read() >= 0){}来代替。

这是一个等待循环,当缓冲区没数据的时候Serial.read() 返回-1,当缓存区有数据时Serial.read() 返回对应的字符(the first byte of incoming serial data available (or -1 if no data is available) )。因此当缓存区没有数据时,不做任何事,保证缓存区不进入数据。函数Serial.available()的功能是返回串口缓冲区中当前剩余的字符个数,按照Arduino提供的该函数的说明,串口缓冲区中最多能缓冲128个字节。

转载:http://blog.csdn.net/opalefire/article/details/10066781

时间: 2024-10-31 18:52:55

关于arduino清空串口缓存(转)的相关文章

[Arduino] 在串口读取多个字符串,并且转换为数字数组

功能如题目.在串口收到逗号分割的6串数字比如100,200,45,4,87,99然后在6个PWM端口3, 5, 6, 9, 10, 11输出对应PWM值代码注释很详细了,就不再说明了. //定义一个comdata字符串变量,赋初值为空值 String comdata = ""; //numdata是分拆之后的数字数组 int numdata[6] = {0}, PWMPin[6] = {3, 5, 6, 9, 10, 11}, mark = 0; void setup() { //定义

asp.net里如何清空页面缓存的后台代码

asp.net里如何清空页面缓存的后台代码(因为只有GET请求会有缓存)   题描述:当使用ajax的时候,很有可能出现同一次请求,这里.比如buttonA修改了数据,而buttonB导出数据,如果两个按钮都采用ajax的技术来做的话,实际上buttonB在第二次点击以后,不会重新从数据库里获得一次数据,而是直接将缓存页发送给客户端.恩-这么做是好的,但是不是我们希望的.所谓使用了Ajax产生了不可预计的结果,有一部分可能也许就在于此.所以我要做的就是每次GET请求的时候都去清空缓存,然后再生成

drop_caches清空系统缓存

针对程序异常终端,缓存中数据并未同步到磁盘上,需要先调用sync同步数据到磁盘,在清空drop_caches缓存. 在清空缓存之前使用sync命令同步数据到磁盘 # cat /proc/sys/vm/drop_caches 默认是0,1表示清空页缓存,2表示清空inode和目录树缓存,3清空所有的缓存 #sync #free -m total       used       free     shared    buffers     cached Mem:         23953    

Arduino通过串口监视器收发数据

在串口监视器中发送数据,板子收到数据并打印出来. 不需要额外电路,但是板子必须连接电脑,Arduino IDE的串口监视器也需要被打开. 代码 /* 串口事件 当新的串口数据到来时,我们会将它添加到一个缓存字符串中.当收到换行符时就将缓存字符串 输出到串口监视器并将字符串清空. 本例程的最好测试方式是使用不断发送NMEA 0183语句的GPS接收器模块 代码公开. */ String inputString = ""; // 缓存字符串 boolean stringComplete =

Visual Stdio 2010中新建WPF与Arduino进行串口通信

C# 使用 System.IO  + System.IO.Ports()使用SerialPort类(调试程序): Skeleton[] skeletons = new Skeleton[0]; //Open Serial.Com SerialPort com; com = new SerialPort(); com.BaudRate = 115200; com.PortName = "COM3"; com.DataBits = 8; com.Open(); while(true) co

如何正确清空cin缓存

关于cin缓存的清空,网上有各种说法.最多的是使用 cin.sync(); 但是,关于这个sync方法在不同的编译器中有不同的实现.VC中确实可以清空cin的缓存,但是在GNU中,不行.因此使用sync方法是没有通用性的. 又有说法是使用 cin.seekg(0, ios_base::end); 但是依旧无法正常工作.以下是一个测试代码: #include <iostream> using namespace std; int main() { int a, b; cin >> a

清空DNS缓存

昨天写了个Python的脚本,功能就是爬取一个网页上的Google ip地址再写入到本机的hosts里面去. 但是写完并且运行完成之后发现上不了Google.于是想到了是不是要清空一下DNS的缓存.不过我只知道win下面清空缓存,在CMD里面打ipconfig /flushdns就行了,Mac用了两个月还不太熟,就上网找了一下,发现Mac下不同的系统竟然需要不同的命令.这里只记一下lion系统往后的命令,之前的也没啥用. Lion.Mountain Lion.Mavericks的命令是sudo

清空IE缓存

1.打开IE Internet选项 点击设置 2.打开临时文件 点击 查看文件 将目录下的 文件全部删除  重新打开网站即可 到此IE缓存就被删除.

清空浏览器缓存,网站登陆界面仍然记住密码

这显然不是啥技术博文啦,只是记载下平时遇到的小问题~ 如题,在FireFox下清空下图选项,登陆淘宝的时候,还是会自动填写账号密码. 然后我就进入工具-选项 看了下,结果在安全里找到了,所有已保存的密码都在这了...