Merhaba arkadaşlar, bu uygulamamızda buton ve 7 segment display kullanarak sayaç uygulaması yapacağız. 

[embedyt] https://www.youtube.com/watch?v=XjOCcjVTyMs[/embedyt]

Malzeme Listesi

7 Segment Nedir?

   Uygulamama başlamadan önce 7 segmentten kısa bir şekilde bahsetmek istiyorum.
7 Segment 7 adet ledden oluşturulmuş bir rakam gösteren devre elemanıdır. Aslında DP ledini de sayarsak 8 adet led oluyor ama 7 segment display diye adlandırılmıştır. 7 Segment display’in iç yapısı aşağıdaki görselde gösterimiştir. 2 tür 7 segment display vardır. Bunların tek farkı birisinin ortak katot ile birisinin de ortak katot ile çalıştırılmasıdır. 

   Örnek olarak a’daki ledi yakmak için; Ortak Katot’un Gnd pinin GND’ye bağlıyoruz. A çıkışına ise +5V veriyoruz. Bu 5v’u arduino ile digitalWrite(a,HIGH); kodu ile de verebiliriz. Ortak anot için de bu işlem tam tersidir Vcc çıkışı +5V ‘a bağlanır ve a çıkışına LOW 0 voltaj verilir.

unnamed

Devre Şeması

   Malzeme listesindeki malzemeleri kullanarak devremizi aşağıdaki şemaya uygun olarak kuralım. 7 Segmentimizi bu örnekte ortak katot(-) olarak kullandım. Sizin elinizde yoksa ortak anot kullanabilirsiniz ama 7 segmentteki çıkışları Vcc(+5) ye bağlamanız gerekiyor.  Üst veya alt taraftan 1 adet direnç kullanarak da çalışır ama 2 direnç kullanınca daha parlak ve güçlü yanıyor ledler.

   3 adet buton kullandık. Bu butonlar 7 segmentteki yazan rakamları arttıracak, azaltacak veya sıfırlayacaktır. DP bağlantısını da yaptım ve bu nokta işaretini 7 segmentimizde 9 yazarken 1 arttırmak  istediğimizde veya 0 yazarken 1 azaltmak istediğimizde yanıp sönmesini sağlayarak bir uyarı vermek amaçlı kullanacağım. 7 segmentimiz 9’ken +1 yaparsak 9 kalacaktır ve artmayacaktır. Bu işlem 0 iken -1 yapınca da aynı olacaktır. Uyarı verecektir ve değeri değişmeyecektir.

   Devremizde kablo bağlantıları çok olduğu için dikkatli bir şekilde yaptıktan sonra uygulama kodlarımıza geçelim.

Devre

Arduino Kodları

   7 segment display uygulamasında sayıların yazdırılması için gerekli kodlara bu uygulamaya da bakabilirsiniz. Ben kod kısmında daha kısa bir şekilde yazacağım. İlk olarak sayac değişkeni oluşturuyoruz ve başlangıç olarak sıfır değerine eşitliyoruz. Butonlarımız için de değişken oluşturup pin numaralarına eşitliyoruz. Daha sonra sayilar isminde bir int dizisi oluşturuyoruz ve bu diziye 0’dan 9’a kadar sayıların 7 segment display için hangi sırayla 0(low), 1(high) verileceğine göre bir binary sayı oluşturuyoruz. Bu dizimiz ortak katot için geçerlidir.

   Setup fonksiyonundan 2’den 9’a kadar olan 7 segment display pinlerimizi for döngüsü ile çıkış olarak tanımlıyoruz. Buton pinlerimizi de normal olarak giriş olarak tanımlıyoruz.

   Loop fonksiyonunda ilk olarak deger değişkenimizdeki değerimiz SayiYaz fonksiyonu sayesinde 7 segment display’e yazılmış oluyor. Daha sonra butonlardan hangisine tıklandığını okuyoruz. Sıfırlama butonuna tıklandıysa değerimiz 0 oluyor ve tekrar ekranda gösteriliyor. Arttırma veya azaltma butonlarına tıklandıysa eğer değerimiz sırasıyla 9 veya 0 değilse arttırma veya azaltma işlemleri yapılıyor. Eğer değerlerimiz artırma yaparken  9 ise DP ledimiz yanıp sönecektir ve arttırma yapmayacaktır. Bu azaltma işlemi için de aynı şekildedir.

   SayiYaz fonksiyonunu aslında çok kısa ama biraz karışık gelmiş olabilir. For döngüsü ile pinimizi 2 tanımlıyoruz ve pinimiz 8’e eşit veya küçük olduğu sürece çalışıyor. Neden 2 ve 8 diye aklınıza takılırsa sayıları göstermek için led pinleri 2’den 8’e kadardı. 9 pini dp olduğu için sayı yazdırma fonksiyonunda gerek yoktur.  For döngüsünde pin değişkenini tanımlarken aynı anda bit adında bir değişken de tanımlıyoruz ve değerini 0 yapıyoruz. Sayı yaz fonksiyonumuz bir parametre alıyordur. Bu parametre tam sayı değerinde ve ismi de “sayi” dır. Döngümüzün içinde digitalWrite kodu vardır. ilk parametre olarak pin numarsını veriyoruz. İkinci parametre olarak ise low(0) veya high(1) vermemiz gerekiyor. Bu değerlerden hangisini vermemiz gerektiğini ilk başta oluşturduğumuz sayilar isimli dizi sayesinde öğreniyoruz.

Örnek ve Kodlar

    Örnek olarak sayimiz 5 ise sayilar dizisinin 5.indisindeki binary koduna erişiyoruz. Bu binary sayılarını bitRead fonksiyonu ile okuyoruz. Döngümüz çalıştığı sürece pin ve bit değişkenlerimiz 1 artıyordur. bitRead fonksiyonu sayesinde 0’dan 7’ye kadar pinleri sırasıyla okuyoruz ve digitalWrite ile o değeri o anki pin numarasına yazıyor. Biraz karışık gibi gözükebilir ve anlamanız zor olabilir ama anlayınca onlarca satır kod yazmak yerine bunu kullanmamızın çok mantıklı geleceğini anlayacaksınız.

//Sayilar O.Katot    0         1         2         3         4         5         6        7          8         9
int sayilar[] = {0b0111111,0b0000110,0b1011011,0b1001111,0b1100110,0b1101101,0b1111101,0b0000111,0b1111111,0b1101111};
int sayac=0;
int butonArtis=10;
int butonSifirla=11;
int butonAzalis=12;
void setup() {
  for(int i=2;i<=9;i++)   {
    pinMode(i,OUTPUT);     
  }
  pinMode(butonArtis,INPUT);    
  pinMode(butonSifirla,INPUT);
  pinMode(butonAzalis,INPUT);    
}
void loop() {
  SayiYaz(sayac);
  if(digitalRead(butonArtis)){
    if(sayac!=9)
      sayac++;
    else{
      digitalWrite(9,1);
      delay(500);
      digitalWrite(9,0);
    }
    delay(300);
  }
  else if(digitalRead(butonAzalis)){
    if(sayac!=0)
      sayac--;
    else{
      digitalWrite(9,1);
      delay(500);
      digitalWrite(9,0);
    }
    delay(300);
  }
  else if(digitalRead(butonSifirla)){
    sayac=0;
    delay(300);
  }
}
void SayiYaz(int sayi){
  for (int pin = 2, Bit = 0; pin <= 8; pin++,Bit++){
    digitalWrite(pin, bitRead(sayilar[sayi], Bit)); 
  }
}

Arduino ile buton ve 7 segment display sayaç uygulamamız hakkında merak ettiklerinizi yorum olarak sorabilirsiniz. İyi çalışmalar.

CEVAP VER

Lütfen yorumunuzu giriniz!
Lütfen isminizi buraya giriniz