#3 Arduino ile Trafik lambası uygulaması

Malzemeler:

1 Adet Arduino Uno (25 TL)
1 Adet Kırmızı Led (0,10 TL)
1 Adet Sarı Led (0,10 TL)
1 Adet Yeşil Led (0,10 TL)
5 Adet 220 ohm Direnç(0,50 TL)
1 Adet 7 segment display(1 TL)

Devre kurulumu:

Devre kısmı kolay ilk 2 dersimizdeki devreleri birleştireceğiz. Devreyi aşağıdaki gibi kuralım.

Şekilde 3 adet kırmızı led görünüyor fakat ledlerin renkleri sırayla kırmızı yeşil ve sarı olmalı. Kabloların renklerinden de fark edebilirsiniz.

Programlama:

Bu kısımda biraz kafanız karışabilir. Yeni bir konuya değineceğim. Fonksiyonlar. Fonksiyonlar programı parçalamamızı sağlar ve programın kolay yazılması ve anlaşılmasını sağlar. Mesela bir robot yapıcaksınız. Özellikleri olarak sola gitmesi sağa gitmesi düz gitmesi geri gitmesi gerekir. Bunun kodunu yazarken fonksiyonlardan yararlanabilir yoksa programımız karışacaktır. Mesela robotileri(int sağmotorhız, int solmotorhız); Burada Fonksiyon adı robot ileridir. Sağmotorhız 5 solmotorhız 5 olsun.Bu bilgi void loop kısmında üretiliyorsa bu bilgileri robotileri kısmında da kullanıyorsak kullanacağımız türü ve adını fonksiyonun içine yazıyoruz. Eğer robotileri herhangi bir veri istemiyorsa o kısım boş bırakılır.robotileri(); gibi. Fonksiyonlar hakkında daha fazla bilgi için http://www.cagataycebi.com/programming/c_programming/c_programming_9.html adresini ziyaret edebilirsiniz. 

Gelelim programımıza ben bu programı yazarken biraz fazla fonksiyon kullandım fakat kullanmasaydım yaklaşık 200 satırlık bir kod olacaktı.Umarım kodu anlarsınız.Eğer anlamaz iseniz yorum kısmından soru sorabilirsiniz.

#define A 9   // tabloya göre a segmentin 7. bacagına bağlı
#define B 8   // hepsini aynı mantıkla bağlıyoruz
#define C 2
#define D 3
#define E 4
#define f 10
#define G 11
const int kirmizi=7;  // const int kırmızı değişkenimiz hep 7 kalsın demektir
const int sari=6;      //program çalışırken değişken değişse bile 7 ile işlem yapar
const int yesil=5;

void sayi0(){
  digitalWrite(A, HIGH);  //burda fonksiyonlara değineyim
  digitalWrite(B, HIGH);  //fonksiyonlar programı parçalamamızı sağlar
  digitalWrite(C, HIGH);  //yazılışı yandaki gibidir.
  digitalWrite(D, HIGH);  //fonksiyonun işlemesi için kullanacağımıaz
  digitalWrite(E, HIGH);  //kısımda fonksiyonadı; şeklinde çağırmamız gerek
  digitalWrite(f, HIGH);  //sayı0; şeklinde yazarsak o an sayı0 a gelir işler ve devam eder
  digitalWrite(G, LOW);
  delay(1000);
};

void sayi1(){
digitalWrite(A,LOW);    // 1 için sadece b ve c nin yanması gerek
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(f, LOW);
digitalWrite(G, LOW);
delay(1000);
};

void sayi2(){
digitalWrite(A,HIGH); // 2 için c ve f sönük olması yeterli
digitalWrite(B, HIGH);
digitalWrite(C, LOW);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(f, LOW);
digitalWrite(G, HIGH);
delay(1000);
};

void sayi3(){
digitalWrite(A,HIGH);
digitalWrite(B, HIGH);  // 3 için
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(E, LOW);
digitalWrite(f, LOW);
digitalWrite(G, HIGH);
delay(1000);
};

void sayi4(){
digitalWrite(A,LOW);    //4
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(f, HIGH);
digitalWrite(G, HIGH);
delay(1000);
};

void sayi5(){
digitalWrite(A,HIGH);    //5
digitalWrite(B, LOW);
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(E, LOW);
digitalWrite(f, HIGH);
digitalWrite(G, HIGH);
delay(1000);
};

void sayi6(){
digitalWrite(A,HIGH);    //6
digitalWrite(B, LOW);
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(f, HIGH);
digitalWrite(G, HIGH);
delay(1000);
};

void sayi7(){
digitalWrite(A,HIGH);    //7
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(f, LOW);
digitalWrite(G, LOW);
delay(1000);
};

void sayi8(){
digitalWrite(A, HIGH);    //8
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(f, HIGH);
digitalWrite(G, HIGH);
delay(1000);
};

void sayi9(){
digitalWrite(A, HIGH);    //9
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(E, LOW);
digitalWrite(f, HIGH);
digitalWrite(G, HIGH);
delay(1000);
};

void kiryak(){   // kırmızı ışığın yanması
digitalWrite(kirmizi,HIGH);
digitalWrite(sari,LOW);
digitalWrite(yesil,LOW);
sayi9();
sayi8();
sayi7();
sayi6();
sayi5();
sayi4();
sayi3();
sayi2();
sayi1();
sayi0();
};

void saryak(){   // sarı ışığın yanması
  digitalWrite(kirmizi,LOW);
  digitalWrite(sari,HIGH);
  digitalWrite(yesil,LOW);
sayi3();
sayi2();
sayi1();
sayi0();
};

void yesyak(){    //yeşil ışığın yanması
  digitalWrite(kirmizi,LOW);
  digitalWrite(sari,LOW);
  digitalWrite(yesil,HIGH);
sayi6();
sayi5();
sayi4();
sayi3();
sayi2();
sayi1();
sayi0();
};
   
  void setup()
{
  pinMode(A, OUTPUT);  // tüm kısımları tanımladık bu kısımda
  pinMode(B, OUTPUT);
  pinMode(C, OUTPUT);
  pinMode(D, OUTPUT);
  pinMode(E, OUTPUT);
  pinMode(f, OUTPUT);
  pinMode(G, OUTPUT);
  
  pinMode(kirmizi,OUTPUT);
  pinMode(sari,OUTPUT);
  pinMode(yesil,OUTPUT);

}

void loop()
{
 kiryak();
 saryak();
 yesyak();
}


Arduino kodu işlemeye başlarken loop kısmındaki satırları birer birer işler ve bunu sürekli yapar. Kodumuza baktığımızda ilk olarak kiryak yani kırmızı ışığın yanmasını işler. Yani kiryak fonksiyonunun içindekileri yapar ve bitirir. Bitirdikten sonra saryakı işler ve bitirir. Bundan sonra yesyak fonksiyonunu işler ve bu döngüyü sonsuza dek devam ettirir. Peki kiryak ı işler derken  ne  demek istiyorsun? kiryakı incelersek öncelikle kırmızı ledi yakıp diğerlerini kapalı bırakacaktır. Ardından sayi 9 fonksiyonunu yapar yani seven segmentde 1 saniye boyunca 9 sayısını görürüz. Ve bu fonsiyon sona erinceye kadar yani seven segmentde 0 ı görene  kadar devam eder. Programın genel mantığı bu arkadaşlar.Yeni yazımda görüşmek dileğiyle :)

Yorumlar

Bu blogdaki popüler yayınlar

Sinyal Jeneratörü Nedir? (Function generator)

#12 Arduino ile Step Motor Kontrolü

Arduino'dan Python'a veri aktarma