(1)機(jī)動車道紅綠燈改成點(diǎn)陣(6×6/5×5)顯示成箭頭形狀,采用閃爍或者流水顯示。 (2)箭頭用于指示南北(豎)或東西(橫)方向綠燈,即箭頭會隨著南北或者東西方向綠燈變化而呈90度轉(zhuǎn)向。 (3)增加?xùn)|西方向的人行道紅綠燈控制,常亮紅燈。當(dāng)檢測到有人時(用光敏電阻),人行道的紅綠燈要隨著(下一輪)同向的交通燈變化。 (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); //設(shè)定數(shù)字I/O腳為輸出
- }
- red_close();
-
- MsTimer2::set(5, flash); // 中斷設(shè)置函數(shù),每 5ms 進(jìn)入一次中斷
- 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) //按鍵觸發(fā)后
- {
- if(flag_up==0)
- {
-
-
- digitalWrite(redled_1, LOW);//熄滅東西路紅燈
- digitalWrite(greenled_1, HIGH); //點(diǎn)亮東西路綠燈
- digitalWrite(greenled_3, HIGH); //熄滅人行道綠燈
- digitalWrite(redled_3, LOW);//點(diǎn)亮人行道紅燈(默認(rèn)情況下,是紅燈亮)
- //flag_up++;
- if(flag_led)
- {up();}
- else
- {red_close();}
-
- }
- //delay(2000);//延時12秒
- else
- {
- digitalWrite(greenled_1, LOW); //熄滅東西路綠燈
- digitalWrite(redled_1, HIGH);//點(diǎn)亮東西路紅燈
- digitalWrite(greenled_3, LOW);//熄滅人行道綠燈
- digitalWrite(redled_3, HIGH);//點(diǎn)亮人行道紅燈
- //flag_up=4;
- if(flag_led)
- {right();
- flag_end++;}
- else
- {red_close();}
- }
-
- if(flag_end==1500)
- {
- flag=0;
- flag_end=0;
- }
- // flag=0;//按鍵標(biāo)志清零
-
- }
-
-
-
- else //按鍵未被觸發(fā),默認(rèn)狀態(tài)
- {
-
-
- if(flag_up==0)
- {
-
-
- digitalWrite(redled_1, LOW);//熄滅東西路紅燈
- digitalWrite(greenled_1, HIGH); //點(diǎn)亮東西路綠燈
- digitalWrite(greenled_3, LOW); //熄滅人行道綠燈
- digitalWrite(redled_3, HIGH);//點(diǎn)亮人行道紅燈(默認(rèn)情況下,是紅燈亮)
- //flag_up++;
- if(flag_led)
- {up();}
- else
- {red_close();}
-
- }
- else
- {
- digitalWrite(greenled_1, LOW); //熄滅東西路綠燈
- digitalWrite(redled_1, HIGH);//點(diǎn)亮東西路紅燈
- digitalWrite(greenled_3, LOW);//熄滅人行道綠燈
- digitalWrite(redled_3, HIGH);//點(diǎn)亮人行道紅燈
- 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;
-
- }
- }
- }
復(fù)制代碼
|