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);
}
连接图如下: