极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13193|回复: 2

关于传感器串口通讯"Serial.available()"使用

[复制链接]
发表于 2015-12-1 18:27:44 | 显示全部楼层 |阅读模式
前几天买了一个pm2.5灰尘浓度传感器,看到网上有段代码是这样的:
  1. void loop(){

  2. while (Serial.available()>0){
  3.    
  4.     data=Serial.read();
  5.         if(data == 170){
  6.              z=0;
  7.           incomeByte[z]=data;
  8.         }else{
  9.              z++;
  10.           incomeByte[z]=data;
  11.         }
  12.         if(z==6)
  13.         {
  14.           sum=incomeByte[1]+ incomeByte[2]+ incomeByte[3] + incomeByte[4];
  15.          
  16.              if(incomeByte[5]==sum && incomeByte[6]==255 )
  17.              {

  18.                Serial.print("Data OK! ");
  19.                 Serial.print(" | Vo=");
  20.                     float vo=(incomeByte[1]*256.0+incomeByte[2])/1024.0*5.00;
  21.                 Serial.print(vo,2);
  22.                 Serial.print("V  ");
  23.                     float v1=analogRead(A0)/1024.0*5.00;
  24.               Serial.print("/ Ao=");
  25.               Serial.print(v1,2);
  26.               Serial.print("V  | ");
  27.                     float c=vo*200;
  28.               Serial.print(c,2);
  29.               Serial.print("ug/m3 | ");

  30.                    for(int k=0;k<7;k++)
  31.                            {
  32.                            Serial.print(incomeByte[k]);
  33.                            Serial.print("|");
  34.                             }
  35.                          Serial.println();
  36.                                  }else{
  37.                             z=0;
  38.                             Serial.flush();
  39.                             data='/0';
  40.                             for(int m=0;m<7;m++){incomeByte[m]=0;}
  41.                             error++;
  42.                       Serial.print(" ### This is ");
  43.                       Serial.print(error);
  44.                       Serial.println(" Error ###");
  45.                        }
  46.                      z=0;
  47.         }
  48. }

  49. }
复制代码


不太明白为什么要用"while(Serial.available() > 0 )"这条语句,我记得"Serial.available()"这条命令是用来检测pc端发出的数据,而原作者显然是将它当作检测传感器返回数据使用的,求大神帮忙
回复

使用道具 举报

发表于 2015-12-1 18:45:26 | 显示全部楼层
只是一個 true/false 的 expression, 因為 available 本來是回傳有多少數據可用.

Returns

the number of bytes available to read


但 c++ 中, 0 是用來代表 false, 任何非 0 的數值都會被看成為 true.
即使 Serial.available() 是回傳 true / false, 也沒有分別, true 一般的值是 1, 也是 > 0 的.

while (Serial.available()) 或者 while (Serial.available() > 0) 結果都是一樣, 兩者均可, 看個人習慣.
我自己比較懶, 所以也偏向用 while (Serial.available()), 而且閱讀起來也簡單清楚一點.
回复 支持 反对

使用道具 举报

发表于 2016-1-12 09:55:49 | 显示全部楼层
本帖最后由 lqh 于 2016-1-12 09:57 编辑

  个人对这个问题的理解有三点:一是Serial.available()是函数,不是命令;二是这个函数可用与任何具有标准Serial的端口通信,不一定非得是PC;三是从程序上看,你的arduino串口就是应当接pm2.5灰尘浓度传感器的Serial端口。以上三点,不知道对不对哈?
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-7 10:28 , Processed in 0.034401 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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