Arduino简单实现——按键启动人行交通灯控制

Arduino实现——行人按键控制 人行道与车行道红绿灯

Arduino实验简介:
Arduino实现之——按键启动人行交通灯控制
现代道路交通体系统,通过红绿灯控制系统实现路口人、车有序通行,通常有人行斑马线红绿灯、三 叉路口红绿灯、十字路口红绿灯、智能红绿灯等。本实验通过编程实现斑马线手动红绿灯控制模拟场景, 即在车行道绿灯、人行道显示红灯时,当行人需要过马路时,先按下通行按钮,车行道变黄灯延时一段时 间后显示红灯,同时人行道绿灯亮起,当设定人行通过马路时间剩余很短时间时,人行绿灯闪烁,同时蜂 鸣器声催促提醒,直至人行斑马线红灯亮起,车行道变回绿灯。 在实验中,通过按键启动人行交通灯系统,编程实现人行交通红绿灯变换。

**

源工程实例见网址: https://www.tinkercad.com/things/hUqcgyPhMvG

**

代码如下:

大致思路是:

1、当初始未按下人行道按钮时,人行道红灯,车行道绿
2、按下按钮时:随机音调警示音响起,人行道仍为红灯,车行道黄灯亮起。
3、过时,产生正常通行的 (哆瑞咪发嗦啦西)音乐,这是人行道绿灯亮起,车行道红灯亮起。
4、行人通行快结束时,随机音调的警示音响起伴随着人行道绿灯的闪烁,此时车行道依据红灯亮起(禁止通行)。
5、行人通行结束后,黄绿灯恢复状态,人行道红灯亮起,车行道绿灯亮起,直至下次欲通过行人按下按钮。

经测试代码正常运行。

代码如下:

//
//	2021-10-06 星期三

//  作者:牵着猪猪去跑步
//
//  项目名称:Arduino实现之——按键启动人行交通灯控制

//定义音阶常量  
#define Do 262  
#define Re 294  
#define Mi 330  
#define Fa 349  
#define Sol 392  
#define La 440  
#define Si 494  

//定义音阶数组
int scale[]={Do,Re,Mi,Fa,Sol,La,Si}; 

//定义引脚
const int buzzerPin = 13;	//输出音调的引脚(连接蜂鸣器)
const int buttonPin = 11;	//检测输入的引脚(检测是否按下按钮)
int red_people = 10;		//人行道——红灯
int green_people = 8;
int red_car = 6;			
int yellow_car = 4;
int green_car = 2;

//自定义函数
//产生警示音(提醒行人剩余很短时间)
void alert(){
  int i = random(0,7);
  tone(buzzerPin,scale[i]);  
  delay(200);  
  noTone(buzzerPin);  
  delay(100);
}
//产生正常通行的音乐(哆瑞咪发嗦啦西)
void toneFun(){
  for(int i=0;i<7;i++){         //使用for循环依次播放音阶数组中的元素  
    tone(buzzerPin,scale[i]);  
    delay(500);  
    noTone(buzzerPin);  
    delay(500);
    } 
}

void setup()
{
  pinMode(buzzerPin, OUTPUT);
  pinMode(buttonPin, INPUT);
  pinMode(red_people, OUTPUT);
  pinMode(green_people, OUTPUT);
  pinMode(red_car, OUTPUT);
  pinMode(yellow_car, OUTPUT);
  pinMode(green_car, OUTPUT);
  Serial.begin(9600);
  
  //初始状态(人行道:红亮绿灭; 车行道:红灭黄灭绿亮)
  digitalWrite(red_people, HIGH);
  digitalWrite(green_people, LOW);
  digitalWrite(red_car, LOW);
  digitalWrite(yellow_car, LOW);
  digitalWrite(green_car, HIGH);
}

void loop()
{
  int buttonValue = 0;
  buttonValue = digitalRead(buttonPin);
  Serial.print("buttonValue = ");
  Serial.println(buttonValue);
  
  //行人按下按键(代表行人要过马路)
  if(buttonValue == 1){
    //车行道黄灯亮起,人行道准备通行
    digitalWrite(red_car, LOW);
    digitalWrite(yellow_car, HIGH);
    digitalWrite(green_car, LOW);
    //设定随机音调的声音响起
    for(int i = 0;i <10; i++){
      alert();
      delay(500);
    }
    
    //车行道红灯亮起禁止通行,人行道正常通行
    digitalWrite(red_people, LOW);
    digitalWrite(green_people, HIGH);
    digitalWrite(red_car, HIGH);
    digitalWrite(yellow_car, LOW);
    digitalWrite(green_car, LOW);
    toneFun();
    toneFun();    //小小的音乐
    
    //设定人行通过马路时间剩余很短时间时
    //警示音提醒——人行道绿灯闪烁
    for(int i = 0;i <10; i++){
      digitalWrite(green_people, LOW);
      alert();
      digitalWrite(green_people, HIGH);
      delay(500);
    }
  }
  
  //流程完成,恢复状态
  digitalWrite(red_people, HIGH);
  digitalWrite(green_people, LOW);
  digitalWrite(red_car, LOW);
  digitalWrite(yellow_car, LOW);
  digitalWrite(green_car, HIGH);
  
}

连接图如下:
在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值