Menu
CoddyTech

Yaya Sinyali ve Buzzer

Coddy'nin Arduino Journey'sinin Projeler bölümünün bir parçası. Ders 4 / 24.

Yayalar için de kendi ışıkları vardır: 7 numaralı pine bağlı kırmızı ışık (bekle) ve 6 numaralı pine bağlı yeşil ışık (yürü). Arabalar için kırmızı ışık yanarken yayalar yeşil ışığı görür; geri kalan zamanda kırmızı ışığı görürler.

Yürü sinyali yalnızca iki anda değişir: arabalar için kırmızı ışık yandığında ve söndüğünde. Yürü ışıkları için bir işlev yaz ve bu iki noktada çağır:

void showWalk(bool walk) {
  if (walk) {
    digitalWrite(walkRedPin, LOW);
    digitalWrite(walkGreenPin, HIGH);
  } else {
    digitalWrite(walkGreenPin, LOW);
    digitalWrite(walkRedPin, HIGH);
  }
}

Geçitlerde, ışıkları göremeyen kişiler için karşıdan karşıya geçmenin güvenli olduğu süre boyunca bip sesi de verilir. tone() üçüncü bir sayı alabilir; bu sayı sesin ne kadar süreyle çalacağını belirtir: tone(buzzerPin, 1000, 100), 1000 Hz sesini 100 ms boyunca çalar ve kendiliğinden durur. Taslak bunun için beklemez.

Yalnızca kırmızı ışık yanarken her 500 ms'de bir bip sesi vermek için, case RED: içine üçüncü bir millis() zamanlayıcısı ekle.

challenge icon

Görev

Orta

Yaya sinyalini ve sesli uyarıcısını ekle:

  • yaya kırmızısı 7 numaralı pine, yaya yeşili 6 numaralı pine bağlı; ikisi de çıkış
  • arabalar için kırmızı ışık yanarken: yaya yeşili açık, yaya kırmızısı kapalı ve 8 numaralı pinde her 500 ms'de bir 1000 Hz frekansında 100 ms'lik bir bip sesi
  • geri kalan zamanlarda: yaya kırmızısı açık, yaya yeşili kapalı, ses yok

Run'a, ardından Check'e bas.

Kendin dene

// Araç trafik ışıkları
const int redPin = 12;
const int yellowPin = 11;
const int greenPin = 10;
// Kartın kendi LED'i: denetleyicinin durum ışığı
const int statusPin = 13;
// Yaya geçidi düğmesi
const int buttonPin = 2;

enum Light { GREEN, YELLOW, RED };
Light light = GREEN;
unsigned long lightStart = 0;  // mevcut ışığın yandığı an

bool statusOn = false;
unsigned long lastBlink = 0;

// Bir ışığı yak, diğer ikisini söndür.
void showLight(int pin) {
  digitalWrite(redPin, LOW);
  digitalWrite(yellowPin, LOW);
  digitalWrite(greenPin, LOW);
  digitalWrite(pin, HIGH);
}

void setup() {
  pinMode(redPin, OUTPUT);
  pinMode(yellowPin, OUTPUT);
  pinMode(greenPin, OUTPUT);
  pinMode(statusPin, OUTPUT);
  pinMode(buttonPin, INPUT_PULLUP);
  showLight(greenPin);
}

void loop() {
  unsigned long now = millis();

  switch (light) {
    case GREEN:
      // Yaya geçidi düğmesine basılması yeşil ışığın erken sona ermesini sağlar.
      if (now - lightStart >= 3000 || digitalRead(buttonPin) == LOW) {
        light = YELLOW;
        lightStart = now;
        showLight(yellowPin);
      }
      break;
    case YELLOW:
      if (now - lightStart >= 1000) {
        light = RED;
        lightStart = now;
        showLight(redPin);
      }
      break;
    case RED:
      if (now - lightStart >= 3000) {
        light = GREEN;
        lightStart = now;
        showLight(greenPin);
      }
      break;
  }

  // Araç trafik ışıkları ne yaparsa yapsın, durum ışığı her 500 ms'de bir yanıp söner.
  if (now - lastBlink >= 500) {
    lastBlink = now;
    if (statusOn) {
      statusOn = false;
      digitalWrite(statusPin, LOW);
    } else {
      statusOn = true;
      digitalWrite(statusPin, HIGH);
    }
  }
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Projeler bölümündeki tüm dersler

Kendi başına pratik yap: Arduino playground