-->

  • Arduino - Ortak Katot 7 Segmentli Gösterge 0-9 Sayıcı

    Bir önceki yazımda ledleri buton yardımıyla sırasıyla yakmıştık. Bu yazımda ise 7 segment gösterge (display) kullanarak 0-9 sayıcı yapacağız. Ama önce 7 segment display hakkında biraz bilgi edinmeliyiz.

    Displaylerin bir çok çeşiti bulunmakta (ortak anot,ortak katot, 7seg,14 seg, 16 seg vs.). Biz projemizde 7 segmentli ortak katot display kullanacağız. 






    Display 8 adet ledden oluşmakta. Bunlardan 7 tanesini
    istediğimiz rakamları göstermek için kullanacağız. Bu yüzden de hangi ledi hangi harfle adlandırdığımızı programlamanın ve sayıcının sağlığı açısından iyi öğrenmemiz gerekiyor. Sağdaki resim hangi ledin hangi harf ile standardize edildiğini gösteriyor. Bu isimler standarttır tabi siz kendi istediğiniz gibi adlandırabilirsiniz fakat şimdiki proje için standarda uyacağız.



    Elimizde bulunan katot displayin hangi pininin hangi ledi yaktığı yandaki resim göstermekte. A ledini yakmak için örneğin 7 numaralı display pinine gerilim vermeliyiz. Tabii ki 5 voltu aşmamak ve 8.,3. pinlerin toprağa bağlı olması şartı ile. 

    Herhangi bir lede gerilim uygulamadaki direnç bağlama kuralımızı burda da işleyebiliriz o yüzden pinlere direkt 9v veya benzeri gerilimleri uygulamayın :) .




    Projemize gelince, yanmasını istediğimiz ledleri teker teker Arduino'muzdaki belirlediğimiz pinlere takıyoruz. Kusura bakmayın fritzingde devre biraz karışık çıktı fakat eminim ki kodlara bakarak zaten devreyi kendiniz de kurabilirsiniz rahatlıkla.

    Devrede bir önceki yazıda yaptığımız uygulamaya benzer olacak sadece daha gösterişli ve daha anlamlı daha işe yarar bir proje olacak. Geliştirilerek skorboard yapılabilir bu proje ile.



    Butona her bastığımızda sırasıyla istediğimiz sayılar yanmaya başlayacak. Örneğin, 1 sayısı için B ve C ledlerine bağlı pinler 1, diğerleri 0 olacak. Peki bunu nasıl yapacağız.

    Kodlarımızda "sayi" isimli bir integer değer gireceğiz ve  0'da itibaren her döngüde 1 artacak.  Bu integer değerin 10 ile bölümünden kalan sayıyı displayde göstereceğiz. Yani "%10"  ifadesini kullanacağız.


    Devrede butonu Arduino'ya bağlarken pull-down direnci koymadım. Eğer siz de koymazsanız aşağıdaki kodları çalıştırabilirsiniz.



    Pull-down direnci eklerseniz 
     if (butondurumu==0)  kodu yerine

     if (butondurumu==1)  kodunu yazmanız gerekiyor. 


     Kodlarımız;

    int buton=12;



    int a=2; // her pine displaydeki bir led bağlı
    int b=6;
    int c=8;
    int d=9;
    int e=4;
    int f=3;
    int g=7;
    int x=5;  //Displaydeki nokta led

    int sayi=0; // Modu alınacak sayi

    void setup () {
      pinMode(a,OUTPUT);
      pinMode(b,OUTPUT);
      pinMode(c,OUTPUT);
      pinMode(d,OUTPUT);
      pinMode(e,OUTPUT);
      pinMode(f,OUTPUT);
      pinMode(g,OUTPUT);
      pinMode(x,OUTPUT);
      pinMode(buton,INPUT_PULLUP);
      Serial.begin (9600);}  // Sayi değerini monitörde görmek için
    void loop () {
        int butondurumu=digitalRead(buton); // buton durumu okuyoruz
        if (butondurumu==0)  //butona her basıldığında; 
        {sayi=sayi+1;}       // sayi değeri 1 artacak    
        
        if (sayi%10==0)         //sayinin moduna göre display ledleri
        {digitalWrite(a,HIGH);  //yanacak
         digitalWrite(b,HIGH);
         digitalWrite(c,HIGH);
         digitalWrite(d,HIGH);
         digitalWrite(e,HIGH);
         digitalWrite(f,HIGH);
         digitalWrite(g,LOW);    
         }
         else if (sayi%10==1)
         {digitalWrite(a,LOW);
         digitalWrite(b,HIGH);
         digitalWrite(c,HIGH);
         digitalWrite(d,LOW);
         digitalWrite(e,LOW);
         digitalWrite(f,LOW);
         digitalWrite(g,LOW);     
         }
         else if (sayi%10==2)
         {digitalWrite(a,HIGH);
         digitalWrite(b,HIGH);
         digitalWrite(c,LOW);
         digitalWrite(d,HIGH);
         digitalWrite(e,HIGH);
         digitalWrite(f,LOW);
         digitalWrite(g,HIGH);    
         }
         else if (sayi%10==3)
         {digitalWrite(a,HIGH);
         digitalWrite(b,HIGH);
         digitalWrite(c,HIGH);
         digitalWrite(d,HIGH);
         digitalWrite(e,LOW);
         digitalWrite(f,LOW);
         digitalWrite(g,HIGH);    
         }
         else if (sayi%10==4)
         {digitalWrite(a,LOW);
         digitalWrite(b,HIGH);
         digitalWrite(c,HIGH);
         digitalWrite(d,LOW);
         digitalWrite(e,LOW);
         digitalWrite(f,HIGH);
         digitalWrite(g,HIGH);    
         }
         else if (sayi%10==5)
         {digitalWrite(a,HIGH);
         digitalWrite(b,LOW);
         digitalWrite(c,HIGH);
         digitalWrite(d,HIGH);
         digitalWrite(e,LOW);
         digitalWrite(f,HIGH);
         digitalWrite(g,HIGH);    
         }
         else if (sayi%10==6)
         {digitalWrite(a,HIGH);
         digitalWrite(b,LOW);
         digitalWrite(c,HIGH);
         digitalWrite(d,HIGH);
         digitalWrite(e,HIGH);
         digitalWrite(f,HIGH);
         digitalWrite(g,HIGH);    
         }
         else if (sayi%10==7)
         {digitalWrite(a,HIGH);
         digitalWrite(b,HIGH);
         digitalWrite(c,HIGH);
         digitalWrite(d,LOW);
         digitalWrite(e,LOW);
         digitalWrite(f,LOW);
         digitalWrite(g,LOW);    
         }
         else if (sayi%10==8)
         {digitalWrite(a,HIGH);
         digitalWrite(b,HIGH);
         digitalWrite(c,HIGH);
         digitalWrite(d,HIGH);
         digitalWrite(e,HIGH);
         digitalWrite(f,HIGH);
         digitalWrite(g,HIGH);    
         }
         else if (sayi%10==9)
         {digitalWrite(a,HIGH);
         digitalWrite(b,HIGH);
         digitalWrite(c,HIGH);
         digitalWrite(d,HIGH);
         digitalWrite(e,LOW);
         digitalWrite(f,HIGH);
         digitalWrite(g,HIGH);    
         }
            
         delay(100);
         Serial.println(sayi); //Bilgisayardaki değere bakarak
         delay(10);           //displayin doğru olup olmadığını
                            //anlayabiliriz.
    }
    Devremizin Resmi;

    "Serial.Println(sayi)" komutu ile yaptığımız haberleşmenin resmi;




    Videomuz da burda...