Osoyoo Arduino タクトスイッチを使って、交通信号の制御

Prev:可変抵抗でマイクロサーボモータ制御

懲りもせず第三弾です。

今回は、タクトスイッチを使った信号機の制御です。

まず、Arduinoの接続図

ちなみに、LEDの向きを変えれないので極性反対についてます。

慣れてない方は気を付けてください。

あと、本家ではダイオードの抵抗を1kΩにしていますが、自分は200Ωにしています。

ちょっと暗かったので、好みです。

接続が済んだら、いつものようにパクッたソースをArduinoに転送します。

/* imitation cross pedestrian traffic light control with push button switch
 * copyright Yi Lun Yu
 * project tutorial see https://osoyoo.com/?p=239
 */
int mainRoadRed = 3;  
int mainRoadYellow = 4;
int mainRoadGreen = 5;
int crossRed = 8;  
int crossGreen = 9;
int button = 13; 
int crossTime = 4000;   
unsigned long buttonGap ; // collects the time since the button was last pressed

void setup () {
  pinMode(mainRoadRed, OUTPUT);
  pinMode(mainRoadYellow, OUTPUT);
  pinMode(mainRoadGreen, OUTPUT);
  pinMode(crossRed, OUTPUT);
  pinMode(crossGreen, OUTPUT);
  pinMode(button, INPUT);
 
  digitalWrite(mainRoadGreen,HIGH); //start with green car light on
  digitalWrite(crossRed, HIGH); //start with red ped light on
}

void loop(){
  // check if button is pressed
  int state = digitalRead(button);
  
   // check if it is over 5 sec since last button press
  if(state==HIGH && (millis() - buttonGap) > 5000) {
    switchLights();   
  }
}

void switchLights() {
  digitalWrite(mainRoadGreen,LOW);  //turn off green light in main road
  digitalWrite(mainRoadYellow,HIGH); // turn on yellow light in main road
  delay(2000); //wait 2 seconds

  digitalWrite(mainRoadYellow,LOW); // turn off yellow light in main road
  digitalWrite(mainRoadRed,HIGH); //turn on red light in main road
  delay(1000); //wait 1s before turning on cross pedestrian green light

  digitalWrite(crossRed,LOW); //turn off red  pedestrian light
  digitalWrite(crossGreen,HIGH); //turn on green  pedestrian light
  delay(crossTime); //delay preset time of 4 seconds
  //flashing of green cross pedestrian light
  for (int x=0; x<10; x++){
    digitalWrite(crossGreen,HIGH);
    delay(250);
    digitalWrite(crossGreen,LOW);
    delay(250);
  }
 
  digitalWrite(crossRed, HIGH); //turn on red  pedestrian light
  delay(100);
 
  digitalWrite(mainRoadGreen,HIGH); //turn on green light in main road
  digitalWrite(mainRoadRed,LOW); //turn off red light in main road
 
  buttonGap = millis(); //remember time since recent light switch
 
}

5秒経過しないとSWのチェックをしないようにしてるみたいですね。

一応動画も撮ってみたので見てねー。

Next:温度センサープロジェクト

シェアする

  • このエントリーをはてなブックマークに追加

フォローする