• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
MKT-porter
博客园    首页    新随笔    联系   管理    订阅  订阅
arduino统计一段时间内传感器数据时间

上电

 

 按键开始

 

 按键结束

 

 

#include "DHT.h"

#define DHTPIN 4     // Digital pin connected to the DHT sensor
#define DHTTYPE DHT11   // DHT 11

#define LightPIN A0
#define ViocePIN A1

#define BtnPIN 3


DHT dht(DHTPIN, DHTTYPE);

  

  
// 顺序 0 温度0-100  1 湿度0-100 2 光照0-1023 3 声音0-1023
String sensorName[4]={"TemperatureValue","HumidityValue","LightValue","VioceValue"};
int thresh[4]={30,50,300,80};//阈值 
int btnState=0;
int SensorState[4]={0,0,0,0};;
unsigned int timeALL[4]={0,0,0,0};
unsigned int timeALLOld[4]={0,0,0,0};
unsigned int timeCurStart[4]={0,0,0,0};
unsigned int timeCurEnd[4]={0,0,0,0};

bool timeCostState=0;
  
  
void setup() {
  
  Serial.begin(9600);
  Serial.println(F("go go go!"));

  dht.begin();


  
    //time_cur=millis();
    //time_old=millis();
 
}


void loop() {
  
  float TemperatureValue = dht.readTemperature();
  float HumidityValue = dht.readHumidity();
  int  LightValue=1024-analogRead(LightPIN); 
  int  VioceValue=analogRead(ViocePIN); 

  int  BtnValue=digitalRead(BtnPIN); 

  if (isnan(HumidityValue) || isnan(TemperatureValue) ) {
    Serial.println(F("Failed to read from DHT sensor!"));
    HumidityValue=0;
    TemperatureValue=0;
    return ;
  }
    int curTimeValue[4]={int(TemperatureValue),int(HumidityValue),LightValue,VioceValue};

    if(BtnValue==1&&btnState==0){
      Serial.println("按键初次按下,准备开始");
      btnState=1;
    }
    else if(BtnValue==1&&btnState==1)
    {
      Serial.println("按键按下中,等待释放按键开始....");
      
     }
    else if(BtnValue==0&&btnState==1)
    {
      Serial.println("按键初次释放,计时开始");
      btnState=2;
      timeCostState=1;//开始计时
      }
     else if(BtnValue==0&&btnState==2){    
      Serial.println("计时中...");
      }
     else if(BtnValue==1&&btnState==2){    
      Serial.println("按键再次按下,准备结束");
      btnState=3;
      }
      else if(BtnValue==1&&btnState==3){    
      Serial.println("按键再次按下中,等待释放按键结束...."); 
      }
      else if(BtnValue==0&&btnState==3){    
        Serial.println("按键再次释放,结束计时"); 
      
       btnState=0;
       timeCostState=0;//结束标志位
       for (int i=0;i<=3;i++){

         timeALLOld[i]=timeALL[i];
         SensorState[i]=0;
         timeALL[i]=0;
         timeCurStart[i]=0;
         timeCurEnd[i]=0;
       }
      
    

      }      
      else if(BtnValue==0&&btnState==0){    
      Serial.println("等待按键开始"); 
      }  
      
  unsigned time_cur=millis();
  //time_cost=int((time_cur-time_old)/1000);
  if(timeCostState==1){
    for(int i=0;i<=3;i++)
    {
        if(curTimeValue[i]>thresh[i]){
           if(SensorState[i]==0){
              timeCurStart[i]=millis(); 
              timeCurEnd[i]=millis(); 
              SensorState[i]=1;
              String msgs=String(sensorName[i])+" ,begin cout! ("+String(curTimeValue[i])+">"+String(thresh[i])+")"+  " CurAlltime: "+String(timeALL[i]);
              Serial.println(msgs); 
            }
            else if(SensorState[i]==1){
              timeCurEnd[i]=millis();
              unsigned int timeInterval= int((timeCurEnd[i]-timeCurStart[i])/1000);
              timeALL[i]=timeALL[i]+timeInterval;    
              timeCurStart[i]=millis();
              
              String msgs=String(sensorName[i])+" ,couting...  ("+String(curTimeValue[i])+">"+String(thresh[i])+")"+  " CurAlltime: "+String(timeALL[i]);
              Serial.println(msgs); 
            }
  
            
         }
         else{
            if(SensorState[i]==0){
              timeCurStart[i]=millis(); 
              timeCurEnd[i]=millis(); 
              String msgs=String(sensorName[i])+" not cout   ("+String(curTimeValue[i])+"<"+String(thresh[i])+")"+  " CurAlltime: "+String(timeALL[i]);
              Serial.println(msgs); 
            }
            else if(SensorState[i]==1){
              timeCurEnd[i]=millis();
              unsigned int timeInterval= int((timeCurEnd[i]-timeCurStart[i])/1000);
              timeALL[i]=timeALL[i]+timeInterval;
              timeCurStart[i]=millis();
              SensorState[i]=0;
              String msgs=String(sensorName[i])+" ,cout end!  ("+String(curTimeValue[i])+"<"+String(thresh[i])+")" +  " CurAlltime: "+String(timeALL[i]);
              Serial.println(msgs); 
            }   
          
          }
 
        }

        String ShowMsg=String("")+"==========TOTAL TIME======== \n "
        +"Light-"+String(timeALL[0])+"  Humidity-"+String(timeALL[1])+"  Temperature-"+String(timeALL[2])+"  Vioce-"+String(timeALL[3]);
        Serial.println(ShowMsg);
       
     }//if(timeCostState==1){
     else{//没有开始计时
          String ShowMsg=String("")
                 +"LightValue:" +String(LightValue)+"  "
                 +"Humidity: "+String(HumidityValue)+"%  "
                 +"Temperature: "+String(TemperatureValue)+"C。  "
                 +"VioceValue:" +String(VioceValue)+"  "
                 +"btnState:"+String(BtnValue)+"  " 
                 ;
                      
           Serial.println(ShowMsg);

           
            ShowMsg=String("")+"==========TOTAL TIME======== \n "
            +"Light-"+String(timeALLOld[0])+"  Humidity-"+String(timeALLOld[1])+"  Temperature-"+String(timeALLOld[2])+"  Vioce-"+String(timeALLOld[3]);
            Serial.println(ShowMsg);
      }
   
  



  delay(1*1000);//等待一会 延迟2秒
}

  

posted on 2022-11-29 23:17  MKT-porter  阅读(113)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3