【Arduino UNO】利用三个按键制作简易火灾报警器

简述
利用Arduino UNO板制作火灾报警器。三个按键代替烟感传感器,温感传感器和紫外线传感器。三个不同颜色的灯代表三个传感器的检测状态。如果检测到有烟,温度过高或紫外线过强,则灯亮。为了防止误判,只有当两个及以上的传感器检测到火灾状态时才报警。

期待结果
按下相应按键后相应灯亮,如果同时按下两个及以上,则相应灯亮且蜂鸣器报警。

代码



int smoke = 8;//烟感检测器

int temperature=9;//温感检测器

int uv=10;//紫外线检测器

 

int smokeLight=3;//烟感报警灯

int temperatureLight=4;//温感报警灯

int uvLight=5;//紫外线报警灯

 

int beep=2;//蜂鸣器

 

int counter=0;//计数已经检测到的探测器个数

 

 

int smokeLastState = 1;//烟感前次状态

int temperatureLastState=1;//温感前次状态

int uvLastState=1;//紫外线前次状态

 

int smokeState = 0;//烟感实时状态

int temperatureState=0;//温感实时状态

int uvState=0;//紫外线实时状态

 

 

void setup() {

  

  // 把三个检测器的模式设为输入,拉上模式,实践检测出PULLUP时按钮的状态会是1

 
pinMode(smoke,INPUT_PULLUP);

 
pinMode(temperature,INPUT_PULLUP);

 
pinMode(uv,INPUT_PULLUP);

  

  //三个灯 输出模式

 
pinMode(smokeLight, OUTPUT);

 
pinMode(temperatureLight,OUTPUT);

 
pinMode(uvLight,OUTPUT);

  

  //蜂鸣器 输出模式

 
pinMode(beep,OUTPUT);

  

 
Serial.begin(9600);

 

}

void loop() {

  

//先把三个灯和蜂鸣器灭掉

 
digitalWrite(beep,LOW);

 
digitalWrite(smokeLight,LOW);  

 
digitalWrite(temperatureLight,LOW); 


 
digitalWrite(uvLight,LOW);  

 

 
Serial.println("======Start,请按按钮======"); 

  

//给人反应时间的缓冲时间

 
delay(5000);

 

//读取三个按钮的状态

 
smokeState = digitalRead(8);

 
temperatureState=digitalRead(9);

 
uvState=digitalRead(10);

 

//分别比对三个检测器现在状态和前次状态。如果不同,串口监视器输出该灯的颜色,计数器加一

 
if(smokeState!=smokeLastState)

  {

     
digitalWrite(smokeLight,HIGH);  

     
counter+=1;

     
Serial.println("red");  

 

 

    }

 

 
if(temperatureState!=temperatureLastState)

  {

     
digitalWrite(temperatureLight,HIGH); 


     
counter+=1;

     
Serial.println("green"); 


 

    }

 

 
if(uvState!=uvLastState)

  {

      
digitalWrite(uvLight,HIGH);  

      
counter+=1;

      
Serial.println("blue"); 


 

    }

    

//判断计数器是否》=2,如果是,蜂鸣器报警,串口输出“报警!”

 

   
if(counter>=2)

    {

      
digitalWrite(beep,HIGH);

       
Serial.println("报警!");  

 

    }

//如果计数器<2,蜂鸣器不报警,串口输出“不达到报警标准”

   
else

      
Serial.println("不达到报警标准"); 

       


//让实验效果呈现的缓冲时间

delay(3000);    

 

 

//用于debug的

//Serial.println(smokeLastState); 

//Serial.println(temperatureLastState);

// Serial.println(uvLastState);

//

// Serial.println(smokeState); 

// Serial.println(temperatureState);

// Serial.println(uvState);

 

 

//将LastState恢复为1

//将counter的值还原为0

counter=0;

smokeLastState = 1;

temperatureLastState=1;

uvLastState=1;

 

 

//将三个灯灭掉

digitalWrite(‘smokeLight,LOW);  

digitalWrite(temperatureLight,LOW);  

digitalWrite(uvLight,LOW);

 

Serial.println("=====End=====");  

 

}

参考文档
按键状态变化检测:https://www.yiboard.com/thread-594-1-1.html
按下点亮,再次按下熄灭:https://blog.csdn.net/u011303443/article/details/77415929
按下按键,LED灯点亮。放开按键,LED灯熄灭:https://www.china-scratch.com/news/1405

  • 1
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值