(1)机动车道红绿灯改成点阵(6×6/5×5)显示成箭头形状,采用闪烁或者流水显示。 (2)箭头用于指示南北(竖)或东西(横)方向绿灯,即箭头会随着南北或者东西方向绿灯变化而呈90度转向。 (3)增加东西方向的人行道红绿灯控制,常亮红灯。当检测到有人时(用光敏电阻),人行道的红绿灯要随着(下一轮)同向的交通灯变化。 (4) 两组的两块面包板并排共用。
源程序在此分享(LiJishao)
Arduino源程序如下:
- #include <MsTimer2.h> //定时器库的 头文件
- int led1=1;
- int led3=11;//本在2
- int led4=3;
- int led8=4;
- int led9=5;
- int led10=6;
- int led12=7;
- int led13=8;
- int led14=9;
- int led6=10;
- int redled_1 =12;
- int greenled_1 =13;
- int redled_3 =0;
- int greenled_3 =2;
- int input=0;
- int val=0;
- int t=1;
- int num=0;
- int flag=0;
- int flag_up=0;
- int flag_led=0;
- int num_flag=0;
- int flag_end=0;
- void setup() {
- pinMode(input,OUTPUT);
- for (int i = 0; i < 14; i ++)
- {
- pinMode(i, OUTPUT); //設定數字I/O腳為輸出
- }
- red_close();
-
- MsTimer2::set(5, flash); // 中断设置函数,每 5ms 进入一次中断
- MsTimer2::start();
- }
- void loop() {
- //up();
- rgb();
- }
- void red_close(){
- digitalWrite(led13, HIGH);
- digitalWrite(led3, HIGH);
- digitalWrite(led4, HIGH);
- digitalWrite(led10, HIGH);
- digitalWrite(led6, HIGH);
- digitalWrite(led9,LOW);
- digitalWrite(led14,LOW);
- digitalWrite(led8,LOW);
- digitalWrite(led12,LOW);
- digitalWrite(led1,LOW);
- }
- void up(){
- digitalWrite(led13,LOW);
- digitalWrite(led8, HIGH);
- delay(t);
- red_close();
- digitalWrite(led3,LOW);
- digitalWrite(led14, HIGH);
- delay(t);
- red_close();
- digitalWrite(led4,LOW);
- digitalWrite(led9, HIGH);
- digitalWrite(led14, HIGH);
- digitalWrite(led8, HIGH);
- digitalWrite(led12, HIGH);
- digitalWrite(led1, HIGH);
- delay(t);
- red_close();
- digitalWrite(led10,LOW);
- digitalWrite(led14, HIGH);
- delay(t);
- red_close();
- digitalWrite(led6,LOW);
- digitalWrite(led8, HIGH);
- delay(t);
- red_close();
- }
- void right()
- {
- digitalWrite(led13,LOW);
- digitalWrite(led8, HIGH);
- delay(t);
- red_close();
- digitalWrite(led3,LOW);
- digitalWrite(led8, HIGH);
- delay(t);
- red_close();
- digitalWrite(led4,LOW);
- digitalWrite(led9, HIGH);
- digitalWrite(led8, HIGH);
- digitalWrite(led1, HIGH);
- delay(t);
- red_close();
- digitalWrite(led10,LOW);
- digitalWrite(led14, HIGH);
- digitalWrite(led8, HIGH);
- digitalWrite(led12, HIGH);
- delay(t);
- red_close();
- digitalWrite(led6,LOW);
- digitalWrite(led8, HIGH);
- delay(t);
- red_close();
- }
- void rgb(){
- {
- if(flag==1) //按键触发后
- {
- if(flag_up==0)
- {
-
-
- digitalWrite(redled_1, LOW);//熄灭东西路红灯
- digitalWrite(greenled_1, HIGH); //点亮东西路绿灯
- digitalWrite(greenled_3, HIGH); //熄灭人行道绿灯
- digitalWrite(redled_3, LOW);//点亮人行道红灯(默认情况下,是红灯亮)
- //flag_up++;
- if(flag_led)
- {up();}
- else
- {red_close();}
-
- }
- //delay(2000);//延时12秒
- else
- {
- digitalWrite(greenled_1, LOW); //熄灭东西路绿灯
- digitalWrite(redled_1, HIGH);//点亮东西路红灯
- digitalWrite(greenled_3, LOW);//熄灭人行道绿灯
- digitalWrite(redled_3, HIGH);//点亮人行道红灯
- //flag_up=4;
- if(flag_led)
- {right();
- flag_end++;}
- else
- {red_close();}
- }
-
- if(flag_end==1500)
- {
- flag=0;
- flag_end=0;
- }
- // flag=0;//按键标志清零
-
- }
-
-
-
- else //按键未被触发,默认状态
- {
-
-
- if(flag_up==0)
- {
-
-
- digitalWrite(redled_1, LOW);//熄灭东西路红灯
- digitalWrite(greenled_1, HIGH); //点亮东西路绿灯
- digitalWrite(greenled_3, LOW); //熄灭人行道绿灯
- digitalWrite(redled_3, HIGH);//点亮人行道红灯(默认情况下,是红灯亮)
- //flag_up++;
- if(flag_led)
- {up();}
- else
- {red_close();}
-
- }
- else
- {
- digitalWrite(greenled_1, LOW); //熄灭东西路绿灯
- digitalWrite(redled_1, HIGH);//点亮东西路红灯
- digitalWrite(greenled_3, LOW);//熄灭人行道绿灯
- digitalWrite(redled_3, HIGH);//点亮人行道红灯
- if(flag_led)
- {right();}
- else
- {red_close();}
- }
- // delay(2000);//延时12秒
-
-
- }
- }
- }
- void flash()
- {
- num++;
- val=analogRead(input);// 读取传感器的模拟值并赋值给val
- if(val>=1000)
- flag=1;
- if(num==100)
- {
- flag_led=~flag_led;
- num=0;
- num_flag++;
- if(num_flag==30)
- {
- num_flag=0;
- flag_up=~flag_up;
-
- }
- }
- }
复制代码
|