我有一個來自WiringPi的用於DHT11傳感器的庫,我需要修改檢查從傳感器讀取的值是否良好的條件。只檢查傳感器輸出的最後3位數
有時候庫讀取錯誤值這是255.255,255.255或55,255.255等
有一個在庫中的條件:
if(counter==255)
break;
但它不工作,如果該值是例如55,255.255
如何修改此條件,檢查輸出的最後3位數字? 如果輸出錯誤,則值的末尾總是有「255」。 我嘗試添加條件像
if(counter==255)
break;
else if(counter==255.255)
break;
但它並不能解決所有可能的情況,我真的不知道任何有關C/C++
這裏是全庫:
#include <wiringPi.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#define MAX_TIME 85
#define DHT11PIN 7
#define ATTEMPTS 5
int dht11_val[5]={0,0,0,0,0};
int dht11_read_val()
{
uint8_t lststate=HIGH;
uint8_t counter=0;
uint8_t j=0,i;
for(i=0;i<5;i++)
dht11_val[i]=0;
pinMode(DHT11PIN,OUTPUT);
digitalWrite(DHT11PIN,LOW);
delay(18);
digitalWrite(DHT11PIN,HIGH);
delayMicroseconds(40);
pinMode(DHT11PIN,INPUT);
for(i=0;i<MAX_TIME;i++)
{
counter=0;
while(digitalRead(DHT11PIN)==lststate){
counter++;
delayMicroseconds(1);
if(counter==255)
break;
}
lststate=digitalRead(DHT11PIN);
if(counter==255)
break;
// top 3 transistions are ignored
if((i>=4)&&(i%2==0)){
dht11_val[j/8]<<=1;
if(counter>16)
dht11_val[j/8]|=1;
j++;
}
}
// verify checksum and print the verified data
if((j>=40)&&(dht11_val[4]==((dht11_val[0]+dht11_val[1]+dht11_val[2]+dht11_val[3])& 0xFF)))
{
printf("%d.%d,%d.%d\n",dht11_val[0],dht11_val[1],dht11_val[2],dht11_val[3]);
return 1;
}
else
return 0;
}
int main(void)
{
int attempts=ATTEMPTS;
if(wiringPiSetup()==-1)
exit(1);
while(attempts)
{
int success = dht11_read_val();
if (success) {
break;
}
attempts--;
delay(500);
}
return 0;
}
計數器是uint8,它永遠不會包含「255.255」。 – Yunnosch
我建議你學習C,不要忽略,C++標籤是不必要的。 – eyllanesc
@Yunnosch - 請看看我添加的屏幕 – joeedit