【Arduino 项目篇】智能窗户控制系统(附录:简单红绿灯制作)

第一阶段:

  • 硬件
    – DHT温湿度传感器(GND VCC Outdata接入A0)
    –雨滴传感器
    –光线传感器
    – 二氧化碳传感器(EV4-CCS811
    – LCD1602液晶屏幕
    – arduino nano 单片机

  • 实验代码:
    传感器用法分析: dht.h头文件点击这里下载,温湿度传感器的用法与一般的传感器不同,它需要库文件的支持。先要将 dht 库文件(包
    含 dht.h 和 dht.app)复制到 Arduino 软件根目录下的 libraries 内。之后程序中调用相应的库函数即可。引脚 DATA 需要连接一个模拟端口,本课题实验中连接在 A0 端口。要使用 dht 库,首先要将其头文件包含进来 #include <dht.h> 。要读出温度和湿度,需要调用 DHT 库中的内部变量 DHT.humidity(湿度)DHT.temperature(温度)。可以将这两个变量打印到串口监视器中查看数据。

    读取DHT11温度传感器的参数 :
    LCD1602液晶屏显示温度:

    SDA(数据行)和SCI(时钟线):
    Arduino Board:I2C / TWI pins
    Arduino Uno/Ethernet:A4 (SDA), A5 (SCL)
    Arduino Mega2560:20 (SDA), 21 (SCL)
    Arduino Leonardo:2 (SDA), 3 (SCL)
    Arduino Due:20 (SDA), 21 (SCL), SDA1, SCL1


(06/27)


#include <CCS811.h>    //CCS811二氧化碳传感器头文件

#include <dht.h>       //温湿度传感器头文件
#include <Wire.h>      //I2C头文件
                   
#include <LCD.h>        //LCD液晶屏// for 16 x 2 LCD module
#include <LiquidCrystal_I2C.h>//LCD液晶屏
LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7); // 0x27 is the I2C bus address for an unmodified backpack

/******************IO引脚定义******************/

#define DHT11_PIN A0//定义温湿传感器数据引脚DHT11_PIN  为 A0

#define LIGHT_PIN A1//定义光线传感器数据引脚LIGHT_PIN  为 A1

#define WATER_A7PIN A7//定义水滴传感器数据引脚WATER_PIN  为 A7
//#define WATER_D3PIN 4//

#define SwitchB_D12PIN 12//手动模式切换按钮 为 D12
unsigned int LED  = 13;//手动模式状态指示灯 为 D13

boolean buttonUp = true;//flag旗标-之前被按下过为true,按钮又弹起来。

//电机PWM引脚定义

#define  Speed   255   //电机pwm速度 为 255
#define  DelayTime  5000//自动模式下,关窗、开窗的时间

unsigned int CL_MOTOR_10PIN = 10;//窗帘-电机
unsigned int CL_MOTOR_11PIN = 11;//窗帘-电机

boolean windostate = false;        //窗户初始状态为"关闭":打开 true  关闭 false
boolean curtainstate = false;      //窗帘初始状态为“关闭”:打开 true 关闭 false
  
unsigned int WINDOW1_MOTOR_6PIN = 6;//窗户1-电机
unsigned int WINDOW1_MOTOR_9PIN = 9;//窗户1-电机

unsigned int WINDOW2_MOTOR_3PIN = 3;//窗户2-电机
unsigned int WINDOW2_MOTOR_5PIN = 5;//窗户2-电机




//按钮引脚定义
unsigned int CL_UP_BUTTON_D7PIN = 7;//窗帘-上升
unsigned int CL_DOWN_BUTTON_D8PIN = 8;//窗帘-下降

unsigned int WINDOW1_UP_BUTTON_D2PIN = 2;//窗户1-上升
unsigned int WINDOW1_DOWN_BUTTON_D4PIN = 4;//窗户1-下降

//unsigned int WINDOW2_UP_BUTTON_D0PIN = 0;//窗户2-上升
//unsigned int WINDOW2_DOWN_BUTTON_D1PIN = 1;//窗户2-下降


/******************类******************/

CCS811 ccs = CCS811();//CCS811 CO2气体传感器
dht DHT; //dht类

/******************传感器数据采集参数初始化******************/
unsigned int temperature = 0;//定义温度 存储变量
unsigned int humidity = 0;//定义湿度 无符号整形存储变量 
unsigned int light = 0;  //定义光线 无符号整形存储变量
unsigned int water_A7 = 0; //定义水滴模拟存储变量初始化为“0” 
unsigned int water_D3 = 0; //定义水滴数字存储变量

/******************函数声明******************/

void sensor_handle();//温湿度函数声明
void sensor_light();//光线函数声明
void  window();
void sensor_water();//雨滴检测函数声明
void sensor_CO2();//二氧化碳检测函数声明

void Choose_ ();//模式选择函数声明

void  CL_BUTTON_function();//窗帘上升函数声明 
//void  CL_DOWN_BUTTON_function();//窗帘下降函数声明

void  WINDOW1_BUTTON_function();//窗户1上升函数声明
//void  WINDOW1_DOWN_BUTTON_function();//窗户1下降函数声明

//void  WINDOW2_UP_BUTTON_function();//窗户1上升函数声明
//void  WINDOW2_DOWN_BUTTON_function();//窗户1下降函数声明

/******************初始化******************/

void setup() {
  Serial.begin(9600);
  Serial.print("Temp Test Code:");
  Serial.println("OK");

  lcd.begin (16,2); // for 16 x 2 LCD module
  lcd.setBacklightPin(3,POSITIVE);
  lcd.setBacklight(HIGH);
  lcd.setCursor(0,0);
  lcd.print("Intelligent ");
  lcd.setCursor(0,1);
  lcd.print("Window System");
  for(int i = 3;i > 0;i--)
  {
    lcd.setCursor(14,0);
    lcd.print(i);
    delay(1000);
    
    }
  lcd.clear();//清屏

  //pinMode(WATER_D3PIN,INPUT);//水滴感应引脚

  /******************二氧化碳感应器初始化处理设置******************/
//  if (!ccs.begin(0x5A))     //CCS811 CO2气体感应模块初始化
//    Serial.println("Not found the CCS811");
//  while(!ccs.DataReady());
//  double temp=ccs.Temperature();
//  ccs.tempoffset=temp - 25.0;

  /******************模式切换按钮设置******************/
  pinMode(SwitchB_D12PIN,INPUT);//D12 手动模式切换
  pinMode(LED,OUTPUT);//
  digitalWrite(LED,LOW);//LED_13_PIN 关闭状态
  
  /******************上升下降-按钮-控制引脚设置******************/
  pinMode(CL_UP_BUTTON_D7PIN,INPUT);//
  pinMode(CL_DOWN_BUTTON_D8PIN,INPUT);//
  
  pinMode(WINDOW1_UP_BUTTON_D2PIN,INPUT);//
  pinMode(WINDOW1_DOWN_BUTTON_D4PIN,INPUT);//
  
//  pinMode(WINDOW2_UP_BUTTON_D0PIN,INPUT);//
//  pinMode(WINDOW2_DOWN_BUTTON_D1PIN,INPUT);//
  
  /******************上升下降-电机-控制引脚设置******************/
  pinMode(CL_MOTOR_10PIN,OUTPUT);//
  pinMode(CL_MOTOR_11PIN,OUTPUT);//

  pinMode(WINDOW1_MOTOR_6PIN,OUTPUT);//
  pinMode(WINDOW1_MOTOR_9PIN,OUTPUT);//

  pinMode(WINDOW2_MOTOR_3PIN,OUTPUT);//
  pinMode(WINDOW2_MOTOR_5PIN,OUTPUT);//

 
}

void loop() {
  
      lcd.home (); // set cursor to 0,0 
      
      Choose_ ();//函数调用,SwitchB_D12PIN选择模式
   
     if(digitalRead(LED) == HIGH)//手动模式
    {

       Serial.println("\n");
       Serial.println("模式一:手动模式");

       CL_BUTTON_function();
       WINDOW1_BUTTON_function();
            
       
       Choose_ ();//函数调用,SwitchB_D12PIN选择模式
   
      
      }
      else if(digitalRead(LED) == LOW)//自动模式
    {
      Serial.println("\n");
      Serial.println("模式二:自动模式");

      sensor_handle();
      sensor_light();
      window();
      sensor_water();
      //sensor_CO2(); 
      
      Choose_ ();  //函数调用,SwitchB_D12PIN选择模式      
      
      }
  
    
    
    delay(200);
}

/**********************************************************
                          控制窗户1&2函数:手动模式
                       
                          功能描述:手动模式-控制窗户-下
                                   D0  - 0
                                   D1 - 1

                                   D2 - 0(LOW)
                                   D4 - 1(HIGH)
                                   
                                   D3 & D6 - LOW
                                   D5 & D9 - Speed                                  
**********************************************************/
void  WINDOW1_BUTTON_function()
{

  
    //窗户打开
  if(digitalRead(WINDOW1_UP_BUTTON_D2PIN) == HIGH && digitalRead(WINDOW1_DOWN_BUTTON_D4PIN) == LOW )
    
  {
      digitalWrite(WINDOW2_MOTOR_3PIN,Speed);  
      digitalWrite(WINDOW2_MOTOR_5PIN,LOW); 
       
      digitalWrite(WINDOW1_MOTOR_6PIN,Speed);  
      digitalWrite(WINDOW1_MOTOR_9PIN,LOW);  
              
  
    
  }
  

    else if(digitalRead(WINDOW1_UP_BUTTON_D2PIN) == LOW && digitalRead(WINDOW1_DOWN_BUTTON_D4PIN) == HIGH )
  {

      digitalWrite(WINDOW2_MOTOR_3PIN,LOW);  
      digitalWrite(WINDOW2_MOTOR_5PIN,Speed); 
       
      digitalWrite(WINDOW1_MOTOR_6PIN,LOW);  
      digitalWrite(WINDOW1_MOTOR_9PIN,Speed); 

      
  }

  else
  {
      
      digitalWrite(WINDOW2_MOTOR_3PIN,LOW);  
      digitalWrite(WINDOW2_MOTOR_5PIN,LOW); 
       
      digitalWrite(WINDOW1_MOTOR_6PIN,LOW);  
      digitalWrite(WINDOW1_MOTOR_9PIN,LOW);  
              
    }
    
  }


/**********************************************************
                          控制窗帘函数:手动模式
                       
                          功能描述:手动模式-控制窗帘-下-上
                                      D7  - 0
                                      D8  - 1
                                      D10 - LOW 
                                      
                                      D11 - Speed

                                  
**********************************************************/
void  CL_BUTTON_function()
{

  //窗帘上升
  if(digitalRead(CL_UP_BUTTON_D7PIN) == HIGH && digitalRead(CL_DOWN_BUTTON_D8PIN) == LOW)
    
  {
      digitalWrite(CL_MOTOR_10PIN,Speed);  //
      digitalWrite(CL_MOTOR_11PIN,LOW);  //
    
  }
  //窗帘下降
  else if(digitalRead(CL_UP_BUTTON_D7PIN) == LOW && digitalRead(CL_DOWN_BUTTON_D8PIN) == HIGH)
  {

      digitalWrite(CL_MOTOR_10PIN,LOW);  //
      digitalWrite(CL_MOTOR_11PIN,Speed);  //
    
    }
      else
  {

    digitalWrite(CL_MOTOR_10PIN,LOW);  //
    digitalWrite(CL_MOTOR_11PIN,LOW);  //关闭
   
  }


    
  }


/**********************************************************
                          模式函数:自动模式与手动模式
                       
                          功能描述:SwitchB_D12PIN读取按键状态“1”“0”,
                                  状态“1”==“手动模式"且"13_PIN_LED==HIGH”;
                                  状态“0”==“自动模式”且"13_PIN_LED==LOW”。
**********************************************************/
void Choose_ ()
{

  Serial.print("SwitchB_D12PIN:");
  Serial.println(digitalRead(SwitchB_D12PIN));

  if(digitalRead(SwitchB_D12PIN) == HIGH && buttonUp == true)//按钮按下的一瞬间"1"
    //digitalRead(B_Switch)!= LOW && buttonUp ==true
  {
    
  digitalWrite(LED,!digitalRead(LED));         //测试点亮_13_PIN_LED灯 HIGH & LOW
  buttonUp = false;
  }
  else if(digitalRead(SwitchB_D12PIN)== LOW && buttonUp == false)//按钮没有按下"0"
    //digitalRead(B_Switch)== HIGH && buttonUp !=true
  {
    buttonUp = true;
  }

  Serial.print("LED:");
  Serial.println(digitalRead(LED));
  }

/**********************************************************
                       温湿度传感器处理函数
**********************************************************/
void sensor_handle(){   
  
    int chk = DHT.read11(DHT11_PIN);//A0
    temperature = DHT.temperature - 5; //将温度赋值
    humidity = DHT.humidity - 10;//将湿度赋值 

    //Serial.println("************************************");
    Serial.print("Temp : ");
    Serial.print(temperature);
    Serial.println("   ℃");

    Serial.print("Humi : ");
    Serial.print(humidity);
    Serial.println("   %");
  
    lcd.setCursor(0,0); // LCD液晶屏,“1”是第2行 ”9“第9个开始
    lcd.print("Temp:");
    lcd.print(temperature);//lcd.print(millis());
    //lcd.print("°");
    lcd.print((char)223);//温度符号"°"
    lcd.print("C");

    
    lcd.setCursor(0,1); // LCD液晶屏,“1”是第2行 ”9“第9个开始
    lcd.print("Humi:");
    lcd.print(humidity);//lcd.print(millis());
    lcd.print("%");
      
      
    if(temperature > 29 or humidity > 89){//如果温度或湿度达到阈值
         Serial.println("温湿度:不正常!");
         delay(50);


          
                   
    }else 
    {        
        Serial.println("温湿度:正常");
        delay(50);
    }
}
/**********************************************************
                       光线传感器处理函数
                       功能:光敏电阻受到光线的照射阻值会迅速变小。因此:light变量-大-无光;light变量-小-有光
**********************************************************/

void sensor_light()
{

  
  light = analogRead(LIGHT_PIN);
  
  Serial.print("Light : ");
  Serial.println(light);

  if(light<=300)  
  {
    //light<=300 有光-光敏电阻值变小-光线亮
    //lcd.clear();//清屏
    lcd.setCursor(11,0); // LCD液晶屏,“0”是第1行 ”12“第12个开始
    //lcd.print("LG:");
    lcd.print("Light");
    
    Serial.println("光线:正常!");    
    }

  else
  {
    //光线暗-阻值大-暗
    lcd.setCursor(11,0); // LCD液晶屏,“0”是第1行 ”11“第11个开始
    //lcd.print("LG:");
    lcd.print("Dark");
    lcd.setCursor(15,0);
    lcd.print(" ");
           
    Serial.println("光线:不正常!");
    }
  }

  /**********************************************************
                       窗户状态处理函数
                       功能:控制电机打开、关闭窗户
**********************************************************/


/**********************************************************
                       函数名:检测水滴感应函数
                       功能:检测数字、模拟信号数据
**********************************************************/
void sensor_water()
{
  water_A7 = analogRead(WATER_A7PIN);
  //water_D3 = digitalRead(WATER_D3PIN);

  //if(water_A7 <= 500 && water_D3 == 0)//判断有水时:WATER_A7PIN读取的数值变小 、WATER_D3PIN数值为“0”
  
  if(water_A7 <= 500 )
  {

    Serial.println("水滴:有雨水!");  
    }
  else
  {
    
    }
  Serial.print("水滴:无雨水!");
//  Serial.println(water_A7);  
//  Serial.print("WATER_D3PIN : ");
//  Serial.println(water_D3); 

  
  }

/**********************************************************
                       函数名:CO2气体感应函数
                       功能:检测二氧化碳浓度 ppm
**********************************************************/
//void sensor_CO2()
//{
//
//  //Serial.println("this is a CCS811_Sensor!");
//  
//  if(ccs.DataReady())
//  {
//    uint16_t eCO2,TVOC;
//    ccs.ReadResult(&eCO2, &TVOC);
//    Serial.print("CO2:");
//    Serial.print(eCO2);
//    
//    Serial.print("ppm\r\nTVOC:");
//    Serial.print(TVOC);
//    
//    Serial.print("ppb\r\nTemp:");
//    double temp=ccs.Temperature();
//    Serial.println(temp);
//  }
//  delay(5000);
//  Serial.println(" ");
//}

void  window()
{



  //温度太高、湿度太重、无水滴得情况下-打开窗户
  if((temperature > 29 || humidity > 89 || water_A7 >= 500 ) && windostate == false )
  {
    lcd.setCursor(11,1); // LCD液晶屏,“1”是第2行 ”9“第9个开始
    lcd.print("Open");
    
    digitalWrite(WINDOW1_MOTOR_6PIN,Speed);  //打开窗户中...
    digitalWrite(WINDOW1_MOTOR_9PIN,LOW);  //
    digitalWrite(WINDOW2_MOTOR_3PIN,Speed);  //打开窗户...
    digitalWrite(WINDOW2_MOTOR_5PIN,LOW);  //

    delay(DelayTime);//这里添加一个延时,是给电机打开窗户时间 为 5秒,5秒后停止。
    
    digitalWrite(WINDOW1_MOTOR_6PIN,LOW);  //打开完毕,停止
    digitalWrite(WINDOW1_MOTOR_9PIN,LOW);  //
    digitalWrite(WINDOW2_MOTOR_3PIN,LOW);  //
    digitalWrite(WINDOW2_MOTOR_5PIN,LOW);  //
     
    
    windostate = true;   
    }

    else if((temperature <= 16 || humidity <= 50 || water_A7 <= 330) && windostate == true)
    { 
      
      lcd.setCursor(11,1); // LCD液晶屏,“1”是第2行 ”9“第9个开始
      lcd.print("...");
      
      digitalWrite(WINDOW1_MOTOR_6PIN,LOW);  //关闭窗户中...
      digitalWrite(WINDOW1_MOTOR_9PIN,Speed);//
      digitalWrite(WINDOW2_MOTOR_3PIN,LOW);  //关闭窗户...
      digitalWrite(WINDOW2_MOTOR_5PIN,Speed);//
  
      delay(DelayTime);//这里添加一个延时,是给电机打开窗户时间 为 5秒,5秒后停止。
      
      digitalWrite(WINDOW1_MOTOR_6PIN,LOW);  //停止关闭
      digitalWrite(WINDOW1_MOTOR_9PIN,LOW);  //
      digitalWrite(WINDOW2_MOTOR_3PIN,LOW);  //
      digitalWrite(WINDOW2_MOTOR_5PIN,LOW);  //

      windostate = false;      
      }
      
    /*******************光线感应器控制窗帘判断*******************/
     else if(light>=300 && curtainstate == false)//光线太暗
    {
      
      digitalWrite(CL_MOTOR_10PIN,Speed);  //打开窗帘中...
      digitalWrite(CL_MOTOR_11PIN,LOW);  //

      delay(DelayTime);

      digitalWrite(CL_MOTOR_10PIN,LOW);  //停止打开
      digitalWrite(CL_MOTOR_11PIN,LOW);  //
      
      
      curtainstate = true;
      }
      else if(light<=100 && curtainstate == true) //光线亮
    {
      
      digitalWrite(CL_MOTOR_10PIN,LOW);  //
      digitalWrite(CL_MOTOR_11PIN,Speed);  //关闭窗帘中...

      delay(DelayTime);

      digitalWrite(CL_MOTOR_10PIN,LOW);  //
      digitalWrite(CL_MOTOR_11PIN,LOW);  //停止关闭

      curtainstate = false;     
      
      }
      
  }

  

窗户第一版代码:


/**********************************************************
*程序课题:温湿度传感器应用 
*程序功能:读取DHT11传感器的温度
*编写:Naiva
**********************************************************/
#include <dht.h>       //温湿度传感器头文件
#include <Wire.h>      //I2C头文件

#define DHT11_PIN A0//定义传感器数据引脚DHT11_PIN  为  A0


dht DHT; //dht类
unsigned int temperature = 0;//定义温度 存储变量
unsigned int humidity = 0;//定义湿度 无符号整形存储变量 

void sensor_handle();//函数声明


void setup() {
  Serial.begin(115200);
  Serial.print("Temp Test Code:");
  Serial.println("OK");

}

void loop() {
  
  sensor_handle();

}

/**********************************************************
                       传感器处理函数
**********************************************************/
void sensor_handle(){   
  
    int chk = DHT.read11(DHT11_PIN);//A0
    temperature = DHT.temperature; //将温度赋值
    humidity = DHT.humidity;//将湿度赋值 

    Serial.println("************************************");
    Serial.print("Temp : ");
    Serial.print(temperature);
    Serial.println("   ℃");

    Serial.print("Humi : ");
    Serial.print(humidity);
    Serial.println("   %");
      
    if(temperature > 29 or humidity > 89){//如果温度或湿度达到阈值
         Serial.println(" error ");
         delay(1000);
    }else 
    {        
        Serial.println(" It is OK");
        delay(1000);
    }
}

LCD1602液晶屏显示温度:

#include <dht.h>       //温湿度传感器头文件
#include <Wire.h>      //I2C头文件

                         
#include <LCD.h>        //LCD液晶屏// for 16 x 2 LCD module
#include <LiquidCrystal_I2C.h>//LCD液晶屏
LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7); // 0x27 is the I2C bus address for an unmodified backpack

#define DHT11_PIN A0//定义传感器数据引脚DHT11_PIN  为  A0


dht DHT; //dht类
unsigned int temperature = 0;//定义温度 存储变量
unsigned int humidity = 0;//定义湿度 无符号整形存储变量 

void sensor_handle();//函数声明


void setup() {
  Serial.begin(115200);
  Serial.print("Temp Test Code:");
  Serial.println("OK");

  lcd.begin (16,2); // for 16 x 2 LCD module
  lcd.setBacklightPin(3,POSITIVE);
  lcd.setBacklight(HIGH);
 

}

void loop() {
  
  lcd.home (); // set cursor to 0,0 
  
  sensor_handle();

  lcd.clear();//清屏
 

}

/**********************************************************
                       传感器处理函数
**********************************************************/
void sensor_handle(){   
  
    int chk = DHT.read11(DHT11_PIN);//A0
    temperature = DHT.temperature; //将温度赋值
    humidity = DHT.humidity;//将湿度赋值 

    Serial.println("************************************");
    Serial.print("Temp : ");
    Serial.print(temperature);
    Serial.println("   ℃");

    Serial.print("Humi : ");
    Serial.print(humidity);
    Serial.println("   %");
  
    lcd.setCursor(0,0); // LCD液晶屏,“1”是第2行 ”9“第9个开始
    lcd.print("Temp:");
    lcd.print(temperature);//lcd.print(millis());
    lcd.print((char)223);//显示温度“°”符号
    lcd.print("C");      //显示温度“C{“符号

    
    lcd.setCursor(0,1); // LCD液晶屏,“1”是第2行 ”9“第9个开始
    lcd.print("Humi:");
    lcd.print(humidity);//lcd.print(millis());
    lcd.print("%");
      
      
    if(temperature > 29 or humidity > 89){//如果温度或湿度达到阈值
         Serial.println(" error ");
         delay(1000);
    }else 
    {        
        Serial.println(" It is OK");
        delay(1000);
    }
}

第二阶段:

功能:定义光线传感器数据引脚LIGHT_PIN 为 A1,并在LCD1602液晶屏幕上显示,有光线显示“OK”,无光线显示“Error”,
代码01:

#include <dht.h>       //温湿度传感器头文件
#include <Wire.h>      //I2C头文件
                   
#include <LCD.h>        //LCD液晶屏// for 16 x 2 LCD module
#include <LiquidCrystal_I2C.h>//LCD液晶屏
LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7); // 0x27 is the I2C bus address for an unmodified backpack

#define DHT11_PIN A0//定义温湿传感器数据引脚DHT11_PIN  为  A0
#define LIGHT_PIN A1//定义光线传感器数据引脚LIGHT_PIN  为 A1


dht DHT; //dht类
unsigned int temperature = 0;//定义温度 存储变量
unsigned int humidity = 0;//定义湿度 无符号整形存储变量 
unsigned int light = 0;   //定义光线 无符号整形存储变量 

void sensor_handle();//函数声明
void sensor_light();


void setup() {
  Serial.begin(115200);
  Serial.print("Temp Test Code:");
  Serial.println("OK");

  lcd.begin (16,2); // for 16 x 2 LCD module
  lcd.setBacklightPin(3,POSITIVE);
  lcd.setBacklight(HIGH);
  lcd.clear();//清屏
 

}

void loop() {
  
  lcd.home (); // set cursor to 0,0 
  //lcd.clear();//清屏
  
  sensor_handle();
  sensor_light();
 

}

/**********************************************************
                       温湿度传感器处理函数
**********************************************************/
void sensor_handle(){   
  
    int chk = DHT.read11(DHT11_PIN);//A0
    temperature = DHT.temperature; //将温度赋值
    humidity = DHT.humidity;//将湿度赋值 

    //Serial.println("************************************");
    Serial.print("Temp : ");
    Serial.print(temperature);
    Serial.println("   ℃");

    Serial.print("Humi : ");
    Serial.print(humidity);
    Serial.println("   %");
  
    lcd.setCursor(0,0); // LCD液晶屏,“1”是第2行 ”9“第9个开始
    lcd.print("Temp:");
    lcd.print(temperature);//lcd.print(millis());
    //lcd.print("°");
    lcd.print((char)223);//温度符号"°"
    lcd.print("C");

    
    lcd.setCursor(0,1); // LCD液晶屏,“1”是第2行 ”9“第9个开始
    lcd.print("Humi:");
    lcd.print(humidity);//lcd.print(millis());
    lcd.print("%");
      
      
    if(temperature > 29 or humidity > 89){//如果温度或湿度达到阈值
         Serial.println(" DHT_11  is error ");
         delay(1000);
    }else 
    {        
        Serial.println(" DHT_11  is OK");
        delay(1000);
    }
}
/**********************************************************
                       光线传感器处理函数
                       功能:光敏电阻受到光线的照射阻值会迅速变小。因此:light变量-大-无光;light变量-小-有光
**********************************************************/

void sensor_light()
{

  lcd.clear();//清屏
  light = analogRead(LIGHT_PIN);
  
  Serial.print("Light : ");
  Serial.println(light);

  if(light>=600)//光线暗
  {
    
    lcd.setCursor(11,0); // LCD液晶屏,“0”是第1行 ”11“第11个开始
    //lcd.print("LG:");
    lcd.print("Error");
    
        
    Serial.println(" Light is error ");
    
    }

  else//light<=600 有光-光敏电阻值变小-光线亮
  {
    
    lcd.setCursor(12,0); // LCD液晶屏,“0”是第1行 ”12“第12个开始
    //lcd.print("LG:");
    lcd.print("OK");
    Serial.println(" Light is ok");
    }

  
  
  }

代码02:

#include <dht.h>       //温湿度传感器头文件
#include <Wire.h>      //I2C头文件
                   
#include <LCD.h>        //LCD液晶屏// for 16 x 2 LCD module
#include <LiquidCrystal_I2C.h>//LCD液晶屏
LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7); // 0x27 is the I2C bus address for an unmodified backpack

#define DHT11_PIN A0//定义温湿传感器数据引脚DHT11_PIN  为  A0
#define LIGHT_PIN A1//定义光线传感器数据引脚LIGHT_PIN  为 A1


dht DHT; //dht类
unsigned int temperature = 0;//定义温度 存储变量
unsigned int humidity = 0;//定义湿度 无符号整形存储变量 
unsigned int light = 0;   //定义光线 无符号整形存储变量 

void sensor_handle();//温湿度函数声明
void sensor_light();//光线函数声明


void setup() {
  Serial.begin(115200);
  Serial.print("Temp Test Code:");
  Serial.println("OK");

  lcd.begin (16,2); // for 16 x 2 LCD module
  lcd.setBacklightPin(3,POSITIVE);
  lcd.setBacklight(HIGH);
  lcd.setCursor(0,0);
  lcd.print("Intelligent ");
  lcd.setCursor(0,1);
  lcd.print("Window System");
  delay(5000);
  lcd.clear();//清屏
 

}

void loop() {
  
  lcd.home (); // set cursor to 0,0 
  //lcd.clear();//清屏
  
  sensor_handle();
  sensor_light();


  delay(200);
}

/**********************************************************
                       温湿度传感器处理函数
**********************************************************/
void sensor_handle(){   
  
    int chk = DHT.read11(DHT11_PIN);//A0
    temperature = DHT.temperature; //将温度赋值
    humidity = DHT.humidity;//将湿度赋值 

    //Serial.println("************************************");
    Serial.print("Temp : ");
    Serial.print(temperature);
    Serial.println("   ℃");

    Serial.print("Humi : ");
    Serial.print(humidity);
    Serial.println("   %");
  
    lcd.setCursor(0,0); // LCD液晶屏,“1”是第2行 ”9“第9个开始
    lcd.print("Temp:");
    lcd.print(temperature);//lcd.print(millis());
    //lcd.print("°");
    lcd.print((char)223);//温度符号"°"
    lcd.print("C");

    
    lcd.setCursor(0,1); // LCD液晶屏,“1”是第2行 ”9“第9个开始
    lcd.print("Humi:");
    lcd.print(humidity);//lcd.print(millis());
    lcd.print("%");
      
      
    if(temperature > 29 or humidity > 89){//如果温度或湿度达到阈值
         Serial.println(" DHT_11  is error ");
         delay(500);
    }else 
    {        
        Serial.println(" DHT_11  is OK");
        delay(500);
    }
}
/**********************************************************
                       光线传感器处理函数
                       功能:光敏电阻受到光线的照射阻值会迅速变小。因此:light变量-大-无光;light变量-小-有光
**********************************************************/

void sensor_light()
{

  
  light = analogRead(LIGHT_PIN);
  
  Serial.print("Light : ");
  Serial.println(light);

  if(light<=300)  
  {
    //light<=300 有光-光敏电阻值变小-光线亮
    //lcd.clear();//清屏
    lcd.setCursor(11,0); // LCD液晶屏,“0”是第1行 ”12“第12个开始
    //lcd.print("LG:");
    lcd.print("Light");
    Serial.println(" Light is ok");
    
   
    
    }

  else
  {
    //光线暗-阻值大-暗
    lcd.setCursor(11,0); // LCD液晶屏,“0”是第1行 ”11“第11个开始
    //lcd.print("LG:");
    lcd.print("Dark");
    lcd.setCursor(15,0);
    lcd.print(" ");
    
        
    Serial.println(" Light is error ");
    }

  
  
  }

智能窗户0620:
功能:
1、温湿度
2、光线
3、雨滴传感器

#include <dht.h>       //温湿度传感器头文件
#include <Wire.h>      //I2C头文件
                   
#include <LCD.h>        //LCD液晶屏// for 16 x 2 LCD module
#include <LiquidCrystal_I2C.h>//LCD液晶屏
LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7); // 0x27 is the I2C bus address for an unmodified backpack

#define DHT11_PIN A0//定义温湿传感器数据引脚DHT11_PIN  为 A0
#define LIGHT_PIN A1//定义光线传感器数据引脚LIGHT_PIN  为 A1
#define WATER_A7PIN A7//定义水滴传感器数据引脚WATER_PIN  为 A7
#define WATER_D3PIN 3


dht DHT; //dht类
unsigned int temperature = 0;//定义温度 存储变量
unsigned int humidity = 0;//定义湿度 无符号整形存储变量 
unsigned int light = 0;  //定义光线 无符号整形存储变量
unsigned int water_A7 = 0; //定义水滴模拟存储变量初始化为“0” 
unsigned int water_D3 = 0; //定义水滴数字存储变量

void sensor_handle();//温湿度函数声明
void sensor_light();//光线函数声明
void  window();
void sensor_water();


void setup() {
  Serial.begin(9600);
  Serial.print("Temp Test Code:");
  Serial.println("OK");

  lcd.begin (16,2); // for 16 x 2 LCD module
  lcd.setBacklightPin(3,POSITIVE);
  lcd.setBacklight(HIGH);
  lcd.setCursor(0,0);
  lcd.print("Intelligent ");
  lcd.setCursor(0,1);
  lcd.print("Window System");
  for(int i = 5;i > 0;i--)
  {
    lcd.setCursor(14,0);
    lcd.print(i);
    delay(1000);
    
    }
  lcd.clear();//清屏

  pinMode(WATER_D3PIN,INPUT);
 

}

void loop() {
  
  lcd.home (); // set cursor to 0,0 
  //lcd.clear();//清屏
  
  sensor_handle();
  sensor_light();
  window();
  sensor_water();


  delay(2000);
}

/**********************************************************
                       温湿度传感器处理函数
**********************************************************/
void sensor_handle(){   
  
    int chk = DHT.read11(DHT11_PIN);//A0
    temperature = DHT.temperature - 5; //将温度赋值
    humidity = DHT.humidity - 10;//将湿度赋值 

    //Serial.println("************************************");
    Serial.print("Temp : ");
    Serial.print(temperature);
    Serial.println("   ℃");

    Serial.print("Humi : ");
    Serial.print(humidity);
    Serial.println("   %");
  
    lcd.setCursor(0,0); // LCD液晶屏,“1”是第2行 ”9“第9个开始
    lcd.print("Temp:");
    lcd.print(temperature);//lcd.print(millis());
    //lcd.print("°");
    lcd.print((char)223);//温度符号"°"
    lcd.print("C");

    
    lcd.setCursor(0,1); // LCD液晶屏,“1”是第2行 ”9“第9个开始
    lcd.print("Humi:");
    lcd.print(humidity);//lcd.print(millis());
    lcd.print("%");
      
      
    if(temperature > 29 or humidity > 89){//如果温度或湿度达到阈值
         Serial.println(" DHT_11  is error ");
         delay(500);


          
                   
    }else 
    {        
        Serial.println(" DHT_11  is OK");
        delay(500);
    }
}
/**********************************************************
                       光线传感器处理函数
                       功能:光敏电阻受到光线的照射阻值会迅速变小。因此:light变量-大-无光;light变量-小-有光
**********************************************************/

void sensor_light()
{

  
  light = analogRead(LIGHT_PIN);
  
  Serial.print("Light : ");
  Serial.println(light);

  if(light<=300)  
  {
    //light<=300 有光-光敏电阻值变小-光线亮
    //lcd.clear();//清屏
    lcd.setCursor(11,0); // LCD液晶屏,“0”是第1行 ”12“第12个开始
    //lcd.print("LG:");
    lcd.print("Light");
    
    Serial.println(" Light is ok");    
    }

  else
  {
    //光线暗-阻值大-暗
    lcd.setCursor(11,0); // LCD液晶屏,“0”是第1行 ”11“第11个开始
    //lcd.print("LG:");
    lcd.print("Dark");
    lcd.setCursor(15,0);
    lcd.print(" ");
           
    Serial.println(" Light is error ");
    }
  }

  /**********************************************************
                       窗户状态处理函数
                       功能:控制电机打开、关闭窗户
**********************************************************/

void  window()
{
  if(temperature > 29 || humidity > 89 || light>=300  )
  {
    lcd.setCursor(11,1); // LCD液晶屏,“1”是第2行 ”9“第9个开始
    lcd.print("Open");
    }
  else
  { 
    
    lcd.setCursor(11,1); // LCD液晶屏,“1”是第2行 ”9“第9个开始
    lcd.print("    ");
    
    }
  
  
  }

void sensor_water()
{
  water_A7 = analogRead(WATER_A7PIN);
  water_D3 = digitalRead(WATER_D3PIN);

  if(water_A7 <= 500 && water_D3 == 0)//判断有水时:WATER_A7PIN读取的数值变小 、WATER_D3PIN数值为“0”
  {
    
    }
  else
  {
    
    }
  Serial.print("WATER_A7PIN : ");
  Serial.println(water_A7);  
  Serial.print("WATER_D3PIN : ");
  Serial.println(water_D3); 

  
  
  
  }

红绿灯项目06/25最终版本:


#include <Servo.h>

Servo myservo;
/******************红绿灯******************/
unsigned int  G1_LIGHT = 13;//绿灯
unsigned int  Y1_LIGHT = 2;//黄灯
unsigned int  R1_LIGHT = 3;//红灯

unsigned int  G2_LIGHT = 4;//绿灯
unsigned int  Y2_LIGHT = 5;//黄灯                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
unsigned int  R2_LIGHT = 6;//红灯

unsigned int  G3_LIGHT = 8;//绿灯
unsigned int  Y3_LIGHT = 9;//黄灯
unsigned int  R3_LIGHT = 10;//红灯

unsigned int  G4_LIGHT = 11;//绿灯
//unsigned int  Y4_LIGHT = 8;//黄灯人行道红绿灯
unsigned int  R4_LIGHT = 12;//红灯

/******************延时时间******************/
unsigned int  G_Time = 20;//绿灯倒计时“20”秒
unsigned int  Y_Time = 5;
unsigned int  R_Time = 10;

//unsigned int  count = 30;//计数变量初始化为 0


/******************函数声明******************/
void RYG_light ();


void setup() {
  
  Serial.begin(9600);

  pinMode(R1_LIGHT,OUTPUT);//输出模式
  pinMode(Y1_LIGHT,OUTPUT);
  pinMode(G1_LIGHT,OUTPUT); 
  
  pinMode(R2_LIGHT,OUTPUT);//输出模式
  pinMode(Y2_LIGHT,OUTPUT);
  pinMode(G2_LIGHT,OUTPUT); 

  pinMode(R3_LIGHT,OUTPUT);//输出模式
  pinMode(Y3_LIGHT,OUTPUT);
  pinMode(G3_LIGHT,OUTPUT); 

  pinMode(R4_LIGHT,OUTPUT);//输出模式人行道12
  //pinMode(Y4_LIGHT,OUTPUT);
  pinMode(G4_LIGHT,OUTPUT); //11
  
  for(int i=0;i > 0; i++)
  {
    digitalWrite(i,LOW);
  }
  
   myservo.attach(9);//Servo PIN

}

void loop() {


    RYG_light ();


}

void RYG_light ()
  {

//    R_random = random(0, 1);//随机数
//    Y_random = random(0, 1);
//    G_random = random(0, 1);
//    

//     digitalWrite((random(1,3)),HIGH);//1
//     digitalWrite((random(0, 1)),HIGH);//1
//    
     for(int count = 30 ;count > -15 && count <= 30;count--)//car time : 0-30      human time :-15 - 0
    {

          if(20 < count && count <= 30)
          {
          
          digitalWrite(G1_LIGHT,HIGH);//
          digitalWrite(Y1_LIGHT,LOW);
          digitalWrite(R1_LIGHT,LOW);

          digitalWrite(G2_LIGHT,HIGH);
          digitalWrite(Y2_LIGHT,LOW);//
          digitalWrite(R2_LIGHT,LOW);

          digitalWrite(G3_LIGHT,HIGH);
          digitalWrite(Y3_LIGHT,LOW);
          digitalWrite(R3_LIGHT,LOW);//
      
          Serial.print("Green-YELLOW-RED- LIGHT");
          Serial.println(count);
      
          delay(500);//
      }
      
       if(15 < count && count <= 20)
          {
                  
          digitalWrite(G2_LIGHT,HIGH);
          digitalWrite(Y2_LIGHT,LOW);//
          digitalWrite(R2_LIGHT,LOW);

          digitalWrite(G3_LIGHT,HIGH);
          digitalWrite(Y3_LIGHT,LOW);
          digitalWrite(R3_LIGHT,LOW);//
          
          digitalWrite(G1_LIGHT,LOW);
          digitalWrite(Y1_LIGHT,HIGH);//********11111111
          digitalWrite(R1_LIGHT,LOW);
          
          delay(500);//
          
          digitalWrite(G1_LIGHT,LOW);
          digitalWrite(Y1_LIGHT,LOW);//*********1111111111
          digitalWrite(R1_LIGHT,LOW);
      
          Serial.print("Green-YELLOW-RED- LIGHT");
          Serial.println(count);
      
          //delay(500);//
      }
      
       if(10 < count && count <= 15)
          {
          
          digitalWrite(G1_LIGHT,LOW);
          digitalWrite(Y1_LIGHT,LOW);
          digitalWrite(R1_LIGHT,HIGH); //  
                 

          digitalWrite(G3_LIGHT,HIGH);
          digitalWrite(Y3_LIGHT,LOW);
          digitalWrite(R3_LIGHT,LOW);//
          
           digitalWrite(G2_LIGHT,LOW);
          digitalWrite(Y2_LIGHT,HIGH);//*******2222222
          digitalWrite(R2_LIGHT,LOW);
          
          delay(500);//
          
          digitalWrite(G2_LIGHT,LOW);
          digitalWrite(Y2_LIGHT,LOW);//******22222222
          digitalWrite(R2_LIGHT,LOW);
      
          Serial.print("Green-YELLOW-RED- LIGHT");
          Serial.println(count);
      
          //delay(500);//
      }
      
      if(5 < count && count <= 10)
          {
          
          digitalWrite(G1_LIGHT,LOW);
          digitalWrite(Y1_LIGHT,LOW);
          digitalWrite(R1_LIGHT,HIGH); // 
         
          digitalWrite(G2_LIGHT,LOW);
          digitalWrite(Y2_LIGHT,LOW);//
          digitalWrite(R2_LIGHT,HIGH); 
                 

          digitalWrite(G3_LIGHT,LOW);
          digitalWrite(Y3_LIGHT,HIGH);//33333333333333
          digitalWrite(R3_LIGHT,LOW);
          
                
          delay(500);//
          
          digitalWrite(G3_LIGHT,LOW);
          digitalWrite(Y3_LIGHT,LOW);//333333333
          digitalWrite(R3_LIGHT,LOW);
      
          Serial.print("Green-YELLOW-RED- LIGHT");
          Serial.println(count);
      
          //delay(500);//
      }
      
      if(count <= 5)
          {
          
          digitalWrite(G1_LIGHT,LOW);
          digitalWrite(Y1_LIGHT,LOW);
          digitalWrite(R1_LIGHT,HIGH); // 
         
          digitalWrite(G2_LIGHT,LOW);
          digitalWrite(Y2_LIGHT,LOW);//
          digitalWrite(R2_LIGHT,HIGH); 
                 

          digitalWrite(G3_LIGHT,LOW);
          digitalWrite(Y3_LIGHT,LOW);//
          digitalWrite(R3_LIGHT,HIGH);                
             
      
          delay(500);//
      }
        if(digitalRead(R3_LIGHT) == HIGH && digitalRead(R2_LIGHT) == HIGH && digitalRead(R1_LIGHT) == HIGH)
        {
          Serial.println("HUMAN STREET :Green light!\n");
          
          digitalWrite(G4_LIGHT,HIGH);
          digitalWrite(R4_LIGHT,LOW);
          
          myservo.write(0); //Servo  0
          
          
        
        
        }
        
        else
        {
          
          Serial.println("HUMAN STREET :Red light!\n");

          digitalWrite(G4_LIGHT,LOW);
          digitalWrite(R4_LIGHT,HIGH);
          
          myservo.write(90); //Servo  90

        }
        
      
      
          delay(500);//
    }
  
  
  }
    


交通灯项目0620:

功能描述:

  • 实现灯柱红、黄、绿交通灯与地面的交通灯信号同时亮灭,且车辆通行时行人斑马线的栅栏放下(舵机);
  • 模式切换。默认状态下为自动模式,按下(D12)按钮将模式切换为手动模式。


/**********************************************************
*程序课题:交通灯 
*程序功能:地面交通信号灯与交通灯柱上信号灯一致,且人行道红灯时打开栅栏,防止行人闯红灯
*编写:Naiva
**********************************************************/
#include <Servo.h>

unsigned int  G_LIGHT = 8;//绿灯引脚定义为“8”
unsigned int  Y_LIGHT = 9;//黄灯
unsigned int  R_LIGHT = 10;//红灯

unsigned int  B_Switch = 12;//手动模式按钮
unsigned int      LED  = 13;
boolean buttonUp = true;//flag旗标-之前被按下过为true,按钮又弹起来。
unsigned int  R_BUTTON = 11;//手动模式_红灯_按钮
unsigned int  Y_BUTTON = 4;
unsigned int  G_BUTTON = 3;

unsigned int  G_Time = 20;//绿灯倒计时“20”秒
unsigned int  Y_Time = 5;
unsigned int  R_Time = 10;

Servo myservo;//定义一个myservo

unsigned int  count = 0;//计数变量初始化为 0
unsigned int  i = 0;//计数变量初始化为 0

void RYG_light2();//函数声明
void Choose_ (); //模式选择
void R_LIGHT_BUTTON();//自动模式:红色按钮
void Y_LIGHT_BUTTON();
void G_LIGHT_BUTTON();

void setup() {
  Serial.begin(9600);

  pinMode(R_LIGHT,OUTPUT);//输出模式
  pinMode(Y_LIGHT,OUTPUT);
  pinMode(G_LIGHT,OUTPUT);

  pinMode(B_Switch,INPUT);//读取Pin_11引脚,读取输入模式
  //digitalWrite(HIGH);//初始化为HIGH,上拉电阻为“1”
  pinMode(13,OUTPUT);
  digitalWrite(13,LOW);//LED_13_PIN 关闭状态

  pinMode(R_BUTTON,INPUT);//红色按钮,设置为输入
  pinMode(Y_BUTTON,INPUT);
  pinMode(G_BUTTON,INPUT);

  myservo.attach(5);//舵机
  
  //digitalWrite();

}

void loop() {


   Choose_ ();//函数调用,B_Switch选择模式
 
  if(digitalRead(13) == HIGH)//手动模式
  {
     Serial.println("模式一:手动模式");



      R_LIGHT_BUTTON();//红灯
      Y_LIGHT_BUTTON();//
      G_LIGHT_BUTTON();//
        
    
    }
    else if(digitalRead(13) == LOW)//自动模式
  {
    Serial.println("模式二:自动模式");
    RYG_light2();//
    
    }

  
  //RYG_light1();
  //RYG_light2();
  delay(200);

}

/**********************************************************
                          模式函数:自动模式与手动模式
                       
                          功能描述:B_Switch读取按键状态“1”“0”,
                                  状态“1”==“手动模式"且"13_PIN_LED==HIGH”;
                                  状态“0”==“自动模式”且"13_PIN_LED==LOW”
**********************************************************/

void Choose_ ()
{
  Serial.println(digitalRead(B_Switch));

  if(digitalRead(B_Switch) == HIGH && buttonUp == true)//按钮按下的一瞬间"1"
    //digitalRead(B_Switch)!= LOW && buttonUp ==true
  {
    
  digitalWrite(13,!digitalRead(13));         //测试点亮_13_PIN_LED灯 HIGH & LOW
  buttonUp = false;
  }
  else if(digitalRead(B_Switch)== LOW && buttonUp == false)//按钮没有按下"0"
    //digitalRead(B_Switch)== HIGH && buttonUp !=true
  {
    buttonUp = true;
  }

  }

/**********************************************************
                          手动控制红灯函数:手动模式-控制红灯亮
                       
                          功能描述:手动模式-控制红灯亮
**********************************************************/
void  R_LIGHT_BUTTON()
{

  Serial.println(digitalRead(R_BUTTON));

  if(digitalRead(R_BUTTON) == HIGH && buttonUp == true)//按钮按下的一瞬间"1"
    //digitalRead(B_Switch)!= LOW && buttonUp ==true
  {

          digitalWrite(G_LIGHT,LOW);//
          digitalWrite(Y_LIGHT,LOW);
          digitalWrite(R_LIGHT,!digitalRead(R_LIGHT));
          

    
    //digitalWrite(13,!digitalRead(13));         //测试点亮_13_PIN_LED灯 HIGH & LOW
    buttonUp = false;
  }
  else if(digitalRead(R_BUTTON)== LOW && buttonUp == false)//按钮没有按下"0"
    //digitalRead(B_Switch)== HIGH && buttonUp !=true
  {
    buttonUp = true;
  }


    if(digitalRead(R_LIGHT) == HIGH)
    {
      myservo.write(90); //舵机上拉围栏90°
      
      }
      else
      {
        myservo.write(0); //舵机上拉围栏0°
        }
    
  }

  
/**********************************************************
                          手动控制黄灯函数:手动模式-控制黄灯亮
                       
                          功能描述:手动模式-控制黄灯亮
**********************************************************/
void  Y_LIGHT_BUTTON()
{

  Serial.println(digitalRead(Y_BUTTON));

  if(digitalRead(Y_BUTTON) == HIGH && buttonUp == true)//按钮按下的一瞬间"1"
    //digitalRead(B_Switch)!= LOW && buttonUp ==true
  {

          digitalWrite(G_LIGHT,LOW);//
          digitalWrite(R_LIGHT,LOW);
          digitalWrite(Y_LIGHT,!digitalRead(Y_LIGHT));
          

    
    //digitalWrite(13,!digitalRead(13));         //测试点亮_13_PIN_LED灯 HIGH & LOW
    buttonUp = false;
  }
  else if(digitalRead(R_BUTTON)== LOW && buttonUp == false)//按钮没有按下"0"
    //digitalRead(B_Switch)== HIGH && buttonUp !=true
  {
    buttonUp = true;
  }


    
  }
/**********************************************************
                          手动控制绿灯函数:手动模式-控制绿灯亮
                       
                          功能描述:手动模式-控制绿灯亮
**********************************************************/
void  G_LIGHT_BUTTON()
{

  Serial.println(digitalRead(G_BUTTON));

  if(digitalRead(G_BUTTON) == HIGH && buttonUp == true)//按钮按下的一瞬间"1"
    //digitalRead(B_Switch)!= LOW && buttonUp ==true
  {

          digitalWrite(Y_LIGHT,LOW);//
          digitalWrite(R_LIGHT,LOW);
          digitalWrite(G_LIGHT,!digitalRead(G_LIGHT));
          

    
    //digitalWrite(13,!digitalRead(13));         //测试点亮_13_PIN_LED灯 HIGH & LOW
    buttonUp = false;
  }
  else if(digitalRead(G_BUTTON)== LOW && buttonUp == false)//按钮没有按下"0"
    //digitalRead(B_Switch)== HIGH && buttonUp !=true
  {
    buttonUp = true;
  }


    
  }
  

/**********************************************************
                       自动模式-红绿灯函数2:三色红绿灯计时
                       
                       功能:红45秒、黄5秒、绿10秒  三色交通灯
**********************************************************/

  void RYG_light2 ()
  {
     for(int G_count = G_Time;digitalRead(13) == LOW&&G_count > 0;G_count--)
    {

          Choose_ ();//检查是否为“自动模式状态”
    
          myservo.write(0); //舵机下放围栏90°
          digitalWrite(G_LIGHT,HIGH);//
          digitalWrite(Y_LIGHT,LOW);
          digitalWrite(R_LIGHT,LOW);
      
          Serial.print("Green LIGHT:");
          Serial.println(G_count);
      
          delay(1000);
      }

      for( int Y_count = Y_Time;digitalRead(13) == LOW&&Y_count > 0;Y_count--)
    {


          Choose_ ();//检查是否为“自动模式状态”
          
          digitalWrite(R_LIGHT,LOW);
          digitalWrite(G_LIGHT,LOW);
          
          digitalWrite(Y_LIGHT,HIGH);//
          delay(500);
          digitalWrite(Y_LIGHT,LOW);//
          delay(500);
      
          
          Serial.print("Yellow LIGHT:");
          Serial.println(Y_count);
      
      }
      
      for(int R_count = R_Time;digitalRead(13) == LOW&&R_count > 0;R_count--)
    {

          Choose_ ();//检查是否为“自动模式状态”
          
          myservo.write(90); //舵机上拉围栏0°
          digitalWrite(G_LIGHT,LOW);
          digitalWrite(Y_LIGHT,LOW);
          digitalWrite(R_LIGHT,HIGH);//


          Serial.print("Red LIGHT:");
          Serial.println(R_count);

          delay(1000);
      
      }


    
    }


    
发布了75 篇原创文章 · 获赞 58 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/Naiva/article/details/91981111