Arduino:簡易行人穿越道號誌控制器

 A Simple Pedestrian Crossing Safety System Using Arduino

先前的一篇文章簡易行人穿越道號誌控制電路,是採硬體的方式設計出來的電路。本篇文章則是介紹以微控器靭體的方式撰寫程式來完成此簡單系統。


功能

平時路口閃黃燈,但當行人要安全地穿越車道,行人可按下「通行」按鈕,讓路口原本閃爍的黃燈熄滅,且另外的紅燈變亮,讓看到紅燈亮的車輛停下來等待行人通過。當行人穿越車道後,按下「回復」按鈕,則紅燈變熄滅,黃燈恢復閃爍。


電路接線圖


如圖一所示。

Arduino: 簡易行人穿越道控制電路
圖一    Arduino: 簡易行人穿越道號誌控制電路


程式碼


const int yellowLED = 9;   /* 黃色 LED */
const int crossingBtn = 6;  /* 通行按鈕 */
const int restoreBtn = 7;    /* 復原按鈕 */
const int redLED = 8;        /* 紅色 LED */
bool crossingBtn_pressed = false;  /* 通行按鈕狀態旗標 */
bool restoreBtn_pressed = false;    /* 回復按鈕狀態旗標 */
void pulseOutput();           /* 輸出脈波函數 */

void setup() {
  pinMode(crossingBtn, INPUT); 
  pinMode(restoreBtn, INPUT); 
  pinMode(yellowLED, OUTPUT);
  pinMode(redLED, OUTPUT);
}

void loop() { 
    if (!digitalRead(crossingBtn)){  /* 若通行按鈕按下 */
        crossingBtn_pressed = true;   /* 通行按鈕狀態標註為已按下 */
        restoreBtn_pressed = false;    /* 回復按鈕狀態標註為未按下 */
   }
   if (!digitalRead(restoreBtn)){     /* 若回復按鈕按下 */
        restoreBtn_pressed = true;      /* 回復按鈕狀態標註為已按下 */
        crossingBtn_pressed = false;  /* 通行按鈕狀態標註為未按下 */
  }
  /* 若 (通行按鈕與回復按鈕均未按下) 或 (回復按鈕按下) */
  if ((!crossingBtn_pressed && !restoreBtn_pressed) || restoreBtn_pressed){
        digitalWrite(redLED, 1);   /* 紅色 LED 熄滅 */ 
        pulseOutput();                   /* 黃色 LED 閃爍 */ 
  } 
  else if (crossingBtn_pressed)   /* 若通行按鈕按下 */ 
        digitalWrite(redLED, 0);    /* 紅色 LED 亮 */ 
}

void pulseOutput(){
      digitalWrite(yellowLED, 0);   /* 黃色 LED 亮 */ 
      delay(500);                              /* 延遲 0.5 秒 */ 
      digitalWrite(yellowLED, 1);   /* 黃色 LED 熄 */ 
      delay(500);
}



眞趣盎然集相關文章


留言

這個網誌中的熱門文章

三段式電子開關電路

陣列 (C++)

首數、尾數與位數

分壓偏壓 BJT 放大電路的直流分析及其近似解的條件

MOSFET 共汲極放大電路 (源極隨耦器) 小訊號分析

為什麼理想的 OPA 電壓放大器有虛短路與虛斷路現象

具有倒數計時自動回復功能的行人穿越道號誌控制電路