上电

按键开始
按键结束

#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号