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;
}
}
}

留言
張貼留言