上电

 按键开始
按键结束

#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秒
}
 
                    
                     
                    
                 
                    
                 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号