Merhaba arkadaşlar, bu uygulamamızda 2 adet 7 segment display ve arduino ile 0’dan 99’a kadar sayı yazdırma uygulaması yapacağız. 

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

Malzeme Listesi

Devre Şeması

     Malzeme listesindeki malzemeleri kullanarak devremizi aşağıdaki şemaya uygun olarak kuralım. 2 adet 7 segment display kullanacağız. Birisi onlar basamağını diğeri ise birler basamağını gösterecektir. 0-6 arasındaki pinleri birler basamağını yazdırmak için kullanacağız. 7-13 arasındaki pinleri ise diğer 7 segment e bağlayarak onlar basamağını yazdıracağız.

     Burada pin sayımız yetmiyeceği için 0 ve 1 Tx Rx pinlerini de kullandık. İhtiyacımız olduğunda bu pinleri de kullanabiliriz ama kod yükleme işlemi yaparken bu pinlere kablo takılı olmamalıdır yoksa hata verir. Kodu yükledikten sonra 0 1 pinlerine kabloyu takabilirsiniz.

devre

Arduino Kodları

     Arduino kodumuzun ilk başında sayilar isminde bir dizimiz var ve bu dizi 0-9 sayılarının binary karşılığını saklamaktadır. 

     Setup fonksiyonumuzda 0-13 arasındaki pinleri for döngüsü ile OUTPUT (çıkış) olarak tanımladık.

     Loop fonksiyonumuzda da for döngüsü kullanarak 0-99 arasındaki sayıları SayiYaz fonksiyonumuza parametre olarak gönderdik. Bu fonksiyonumuz o anki i değerine sahip sayıyı 7 segment display ekranımızda gösterecektir. Gösterdikten sonra ise delay komutu ile 200 milisaniye bekliyoruz. Daha sonra i değerimiz artarak 0 – 99 arasındaki sayıları yazdırıyor. 99 a geldikten sonra for döngüsünden çıkıyor ve loop fonksiyonumuzun başına geldiği için for döngüsüne tekrar giriyor ve 0 dan tekrar yazdırmaya başlıyor.

     SayiYaz fonksiyonumuz parametre olarak int veri türünde bir sayi alıyordur. Bu sayıyı biz 0 ile 99 arasında vermeliyiz. Yani 2 basamaklı olarak. Bu fonksiyonumuzda 2 adet int türünde yani tam sayı değişkenimiz vardır. Bunlar onlar ve birler basamağını saklayacaktır. Bir 2 basamaklı sayının onlar basamağını bulmak için 10’a tam olarak bölme işlemi yaparız. Birler basamağını bulmak için de mod 10 yaparak, 10 a bölümünden kalanı buluruz. 2 basamaklı sayımızı birler ve onlar basamağı olarak ayırmış ve değişkenlere atamış olduk. Daha sonra bu onlar ve birler basamağını temsil eden sayıları SayiYazBirler ve SayiYazOnlar fonksiyonlarımıza parametre olarak göndererek bu 2 sayının 2 adet 7 segmentimize yazdırılmasını sağlıyoruz.

     SayiYazBirler ve SayiYazOnlar fonksiyonlarımız parametre olarak aldığı tek basamaklı bir sayıyı 7 segment displaye yazdırma işlemini yapıyordur. Aslında bu iki fonksiyonun kodları aynıdır ama tek farkı birisinde pin numaraları 0-6 arası iken diğerinde 7-13 olmasıdır. Tek farkı budur. Bu fonksiyonun nasıl çalıştığı ve mantığı hakkında bir önceki yazımda bahsetmiştim. Buraya tıklayarak o yazıma gidebilirsiniz. 

//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};
void setup(){
  for (int i=0; i <= 13; i++)
    pinMode(i,OUTPUT);        //Pinleri Çıkış Tanımladık
}
void loop(){
  for(int i=0;i<=99;i++){ 
    SayiYaz(i);  //0 99 arası sayıları yazdırdık ve 200ms bekledik.
    delay(200);  
  }
}
void SayiYaz(int sayi){
  int birlerBas= sayi%10;    // 2 Basamaklı sayının birler basamağını bulduk
  int onlarBas= sayi/10;     // 2 Basamaklı sayının onlar basamağını bulduk
  SayiYazBirler(birlerBas);  // Birler basamağını sağdaki display'e yazdırdık.
  SayiYazOnlar(onlarBas);    // Onlar basamağını solaki display'e yazdırdık.
}
void SayiYazBirler(int sayi){
  for (int pin = 0, Bit = 0; pin <= 6; pin++,Bit++){  //0 pinden 6. pine kadar digital write
    digitalWrite(pin, bitRead(sayilar[sayi], Bit));    //sayilar dizisindeki sayi indisindeki binary olarak
  } //sayiyi elde et. Örnek 1 için 0b0000110 . Bitleri sırasıyla oku ve pin numarasına 0(LOW)veya 1(HIGH)
} // olarak digital write ile yazıyoruz.  Bu fonksiyon tek bir sayıyı yazdırmak içindir.
void SayiYazOnlar(int sayi){
  for (int pin = 7, Bit = 0; pin <= 13; pin++,Bit++){   //üstteki fonskiyon ile aynıdır fakar bu kod onlar
    digitalWrite(pin, bitRead(sayilar[sayi], Bit)); //basamağı içindir o yüzden pin numaraları farklıdır.
  }
}

0’dan 99’a kadar sayı yazdırma uygulamamız hakkında merak ettiklerinizi veya anlamadığınız şeyleri yorum olarak sorabilirsiniz. İyi çalışmalar dilerim 🙂

CEVAP VER

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