Arduino:基本紅綠燈控制電路






電路接線圖

如圖一所示:


圖一  基本紅綠燈控制電路接線圖



程式碼

 C/C++
long previousTime;          /* 存放系統時間的變數 */
long nowTime;                 /* 存放系統時間的變數 */
int second = 0;                
int GreenLight_1 = 2;      /* 第 2 腳輸出控制縱向的綠色 LED 的亮滅 */
int YellowLight_1 = 3;      /* 第 3 腳輸出控制縱向黃色 LED 的亮滅 */
int RedLight_1 = 4;         /* 第 4 腳輸出控制縱向紅色 LED 的亮滅 */

int GreenLight_2 = 5;       /* 第 5 腳輸出控制橫向綠色 LED 的亮滅 */
int YellowLight_2 = 6;       /* 第 6 腳輸出控制橫向綠色 LED 的亮滅 */
int RedLight_2 = 7;          /* 第 7 腳輸出控制橫向綠色 LED 的亮滅 */

/* GreenLightLastingSecond + YellowLightLastingSecond = RedLightLastingSecond */
int RedLightLastingSecond = 10;     /* 色 LED 的亮的持續時間 */
int GreenLightLastingSecond = 7;    /* 色 LED 的亮的持續時間 */
int YellowLightLastingSecond = 3;    /* 色 LED 的亮的持續時間 */

void setup() {
  pinMode(GreenLight_1, OUTPUT);     /* 規劃第 2 腳為輸出 */
  pinMode(YellowLight_1, OUTPUT);    /* 規劃第 3 腳為輸出 */
  pinMode(RedLight_1, OUTPUT);         /* 規劃第 4 腳為輸出 */
  pinMode(GreenLight_2, OUTPUT);      /* 規劃第 5 腳為輸出 */
  pinMode(YellowLight_2, OUTPUT);     /* 規劃第 6 腳為輸出 */
  pinMode(RedLight_2, OUTPUT);          /* 規劃第 7 腳為輸出 */

  digitalWrite(RedLight_1, HIGH);          /* 初始狀態:縱向紅色 LED 亮 */
  digitalWrite(YellowLight_1, LOW);      /* 初始狀態:縱向黃色 LED 熄 */
  digitalWrite(GreenLight_1, LOW);        /* 初始狀態:縱向綠色 LED 熄 */
  digitalWrite(RedLight_2, LOW);           /* 初始狀態:橫向紅色 LED 熄 */
  digitalWrite(YellowLight_2, LOW);       /* 初始狀態:橫向黃色 LED 熄 */
  digitalWrite(GreenLight_2, HIGH);        /* 初始狀態:橫向綠色 LED 亮 */
 
  previousTime = millis();                         /* 取得系統從開始至目前的時間 (單位毫秒) */

}

void loop() {
  nowTime = millis();                               /* 取得系統從開始至目前的時間 (單位毫秒) */
  if ((nowTime - previousTime) >= 1000 ){  /* 若已歷經 1 秒 */
    previousTime = nowTime;
    second++;                                                   /* 秒數遞加一 */
    if (second == GreenLightLastingSecond ){
      digitalWrite(YellowLight_2, HIGH);                /*  Y2 亮  */
      digitalWrite(GreenLight_2, LOW);                    /* G2 熄  */
    }
    else if (second == (GreenLightLastingSecond + YellowLightLastingSecond)){
      digitalWrite(YellowLight_2, LOW);  /* Y2 熄 */
      digitalWrite(RedLight_2, HIGH);   /* R2 亮 */
      digitalWrite(GreenLight_1, HIGH);  /* G1 亮 */
      digitalWrite(RedLight_1, LOW);     /* R1 熄 */
    }
    else if (second == (2*GreenLightLastingSecond + YellowLightLastingSecond)){
     
      digitalWrite(YellowLight_1, HIGH);  /* Y1 亮 */
      digitalWrite(GreenLight_1, LOW);  /* G1 熄  */
    }
    else if (second == (2*(GreenLightLastingSecond + YellowLightLastingSecond))){
      digitalWrite(RedLight_1, HIGH);
      digitalWrite(YellowLight_1, LOW);
      digitalWrite(RedLight_2, LOW);
      digitalWrite(GreenLight_2, HIGH);
      second =0;
    }  
  }
}







留言

這個網誌中的熱門文章

三段式電子開關電路

陣列 (C++)

首數、尾數與位數

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

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

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

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