关于传感器串口通讯"Serial.available()"使用
前几天买了一个pm2.5灰尘浓度传感器,看到网上有段代码是这样的:void loop(){
while (Serial.available()>0){
data=Serial.read();
if(data == 170){
z=0;
incomeByte=data;
}else{
z++;
incomeByte=data;
}
if(z==6)
{
sum=incomeByte+ incomeByte+ incomeByte + incomeByte;
if(incomeByte==sum && incomeByte==255 )
{
Serial.print("Data OK! ");
Serial.print(" | Vo=");
float vo=(incomeByte*256.0+incomeByte)/1024.0*5.00;
Serial.print(vo,2);
Serial.print("V");
float v1=analogRead(A0)/1024.0*5.00;
Serial.print("/ Ao=");
Serial.print(v1,2);
Serial.print("V| ");
float c=vo*200;
Serial.print(c,2);
Serial.print("ug/m3 | ");
for(int k=0;k<7;k++)
{
Serial.print(incomeByte);
Serial.print("|");
}
Serial.println();
}else{
z=0;
Serial.flush();
data='/0';
for(int m=0;m<7;m++){incomeByte=0;}
error++;
Serial.print(" ### This is ");
Serial.print(error);
Serial.println(" Error ###");
}
z=0;
}
}
}
不太明白为什么要用"while(Serial.available() > 0 )"这条语句,我记得"Serial.available()"这条命令是用来检测pc端发出的数据,而原作者显然是将它当作检测传感器返回数据使用的,求大神帮忙 只是一個 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()), 而且閱讀起來也簡單清楚一點.
本帖最后由 lqh 于 2016-1-12 09:57 编辑
个人对这个问题的理解有三点:一是Serial.available()是函数,不是命令;二是这个函数可用与任何具有标准Serial的端口通信,不一定非得是PC;三是从程序上看,你的arduino串口就是应当接pm2.5灰尘浓度传感器的Serial端口。以上三点,不知道对不对哈?
页:
[1]