Arduino Arduino ile 0-99 Segment Display Sayıcı Yapımı By Yunus Arat Posted on 9 Mayıs 2017 14 min read 2 2 22,016 Paylaş ! Facebook Paylaş ! Twitter Paylaş ! Google+ Paylaş ! Reddit Paylaş ! Pinterest Paylaş ! Linkedin Paylaş ! Tumblr Merhaba arkadaşlar, Bu yazımda sizlere arduino ve 7 segment display kullanarak 0-99 sayıcı yapımını anlatacağım…İşe segment displayi tanıyarak başlayalım. Segment display ortak anot ve ortak katot olmak üzere iki çeşittir. Ortak anot şekilde de görüldüğü gibi iki tane VCC (+5V) bağlantısı vardır. Diğer bacaklar yakmak istediğimiz segmentin uçlarıdır. Bu uçları arduinomuzun dijital çıkış pinlerine bağlayacağız. Yakmak istediğimiz segmentin bacağına 0 (LOW veya 0V) vereceğiz. Ortak katot ise iki tane GND (toprak) bağlantısından ve yakmak istediğimiz segmentin bacaklarından oluşur. Yine bu bacakları arduinomuzun dijital çıkış pinlerine bağlayacağız. Burada ise yakmak istediğimiz segmentin bacağına 1 (HIGH veya +5V) vereceğiz. Ortak katot mantığını anlamak daha kolay olduğu için biz projemizde ortak katot kullanacağız… Küçük bir örnekle daha iyi anlamaya çalışalım… Diyelim ki ortak katotlu bir segment displayde 7 yazmak istiyoruz. Bunun için a, b, c segmentelerini yakmamız gerek. Bu bacakları +5V ‘a diğer bacaklarımızı toprağa bağlayacağız. Şimdi ise projemizi anlamaya çalışalım… İki tane yedi segment display kullanarak 0-99 sayıcı yapacağız. Yani bugün biraz kodlarla oynayacağız. 🙂 Program ile ilgili açıklamalar kodun içinde verilmiştir… Verilmeyen kısmı ayrıntılı bir şekilde 33 sayısını açıklayarak anlamaya çalışalım… for döngüsü içinde 0’dan 99’a kadar sayımızı saydırıyoruz ardından onlar ve birler basamağını buluyoruz. bir_bas = sayi % 10; Burada birler basamağını bulmak için sayının 10 ile bölümünden kalanı buluyoruz. *** 33 ‘ün 10 ile bölümünden kalan 3 yani birler basamağımız 3. sayi -= bir_bas; Burada sayının birler basamağını atıyoruz yani sıfır yapıyoruz. *** 33-3=30 on_bas = sayi % 100; Burada onlar basamağını bulmak için sayının 100 ile bölümünden kalanı buluyoruz. ***30’un 100 ile bölümünden kalan 30’dir. on_bas /= 10 ; İki ve daha fazla basamaklı bir sayının 100 ile bölümünden kalan iki basamaklı bir sayıdır o yüzden sayımızı ona bölüyoruz ve onlar basamağını buluyoruz. ***30/10=3 birler(bir_bas); onlar(on_bas); Burada artık sayımızı fonksiyonlar yardımı ile yazdırıyoruz. sayi += bir_bas; Burada sayımızı eski haline getiriyoruz ve en başa dönüyoruz.. *** 30+3=33 Kullanılan Malzemeler Arduino Uno 7 Segment Display Jumper Kablolar Breadboard 9 Volt Pil 9 Volt Pil Yuvası Devre Şeması [php] int a_b = 0, b_b = 1, c_b = 2, d_b = 3, e_b = 4, f_b = 5, g_b = 6; //birler basamağının bacakları int a_o = 7, b_o = 8, c_o = 9, d_o = 10, e_o = 11, f_o = 12, g_o = 13; //onlar basamağının bacakları int sayi, bir_bas, on_bas; void setup() { pinMode(a_b, OUTPUT); pinMode(b_b, OUTPUT); pinMode(c_b, OUTPUT); pinMode(d_b, OUTPUT); pinMode(e_b, OUTPUT); //segmentelerin bacakları çıkış olarak ayarlandı pinMode(f_b, OUTPUT); pinMode(g_b, OUTPUT); pinMode(a_o, OUTPUT); pinMode(b_o, OUTPUT); pinMode(c_o, OUTPUT); pinMode(d_o, OUTPUT); pinMode(e_o, OUTPUT); pinMode(f_o, OUTPUT); pinMode(g_o, OUTPUT); } void loop() { for (sayi = 0; sayi<= 99; sayi++) { bir_bas = sayi % 10; sayi -= bir_bas; on_bas = sayi % 100; on_bas /= 10; //bu kısım biraz önemli olduğu için birler(bir_bas); //yazının içinde anlatılmıştır onlar(on_bas); sayi += bir_bas; delay(500); } } void birler(int b) { switch (b) { case 0: digitalWrite(a_b, HIGH); digitalWrite(b_b, HIGH); digitalWrite(c_b, HIGH); digitalWrite(d_b, HIGH); digitalWrite(e_b, HIGH); digitalWrite(f_b, HIGH); //switch case yapısı ile yazdırılacak sayı digitalWrite(g_b, LOW); //ile ilgili gerekli çıkışlar veriliyor break; case 1: digitalWrite(a_b, LOW); digitalWrite(b_b, HIGH); digitalWrite(c_b, HIGH); digitalWrite(d_b, LOW); digitalWrite(e_b, LOW); digitalWrite(f_b, LOW); digitalWrite(g_b, LOW); break; case 2: digitalWrite(a_b, HIGH); digitalWrite(b_b, HIGH); digitalWrite(c_b, LOW); //örneğin birler basamağı 2 ise a,b,d,e,g digitalWrite(d_b, HIGH); //bacaklarını HIGH yaptık digitalWrite(e_b, HIGH); digitalWrite(f_b, LOW); digitalWrite(g_b, HIGH); break; case 3: digitalWrite(a_b, HIGH); digitalWrite(b_b, HIGH); digitalWrite(c_b, HIGH); digitalWrite(d_b, HIGH); digitalWrite(e_b, LOW); digitalWrite(f_b, LOW); digitalWrite(g_b, HIGH); break; case 4: digitalWrite(a_b, LOW); digitalWrite(b_b, HIGH); digitalWrite(c_b, HIGH); digitalWrite(d_b, LOW); digitalWrite(e_b, LOW); digitalWrite(f_b, HIGH); digitalWrite(g_b, HIGH); break; case 5: digitalWrite(a_b, HIGH); digitalWrite(b_b, LOW); digitalWrite(c_b, HIGH); digitalWrite(d_b, HIGH); digitalWrite(e_b, LOW); digitalWrite(f_b, HIGH); digitalWrite(g_b, HIGH); break; case 6: digitalWrite(a_b, HIGH); digitalWrite(b_b, LOW); digitalWrite(c_b, HIGH); digitalWrite(d_b, HIGH); digitalWrite(e_b, HIGH); digitalWrite(f_b, HIGH); digitalWrite(g_b, HIGH); break; case 7: digitalWrite(a_b, HIGH); digitalWrite(b_b, HIGH); digitalWrite(c_b, HIGH); digitalWrite(d_b, LOW); digitalWrite(e_b, LOW); digitalWrite(f_b, LOW); digitalWrite(g_b, LOW); break; case 8: digitalWrite(a_b, HIGH); digitalWrite(b_b, HIGH); digitalWrite(c_b, HIGH); digitalWrite(d_b, HIGH); digitalWrite(e_b, HIGH); digitalWrite(f_b, HIGH); digitalWrite(g_b, HIGH); break; case 9: digitalWrite(a_b, HIGH); digitalWrite(b_b, HIGH); digitalWrite(c_b, HIGH); digitalWrite(d_b, HIGH); digitalWrite(e_b, LOW); digitalWrite(f_b, HIGH); digitalWrite(g_b, HIGH); break; } } void onlar(int o) { switch (o) { case 0: digitalWrite(a_o, HIGH); digitalWrite(b_o, HIGH); digitalWrite(c_o, HIGH); digitalWrite(d_o, HIGH); digitalWrite(e_o, HIGH); digitalWrite(f_o, HIGH); digitalWrite(g_o, LOW); break; case 1: digitalWrite(a_o, LOW); digitalWrite(b_o, HIGH); digitalWrite(c_o, HIGH); digitalWrite(d_o, LOW); digitalWrite(e_o, LOW); digitalWrite(f_o, LOW); digitalWrite(g_o, LOW); break; case 2: digitalWrite(a_o, HIGH); digitalWrite(b_o, HIGH); digitalWrite(c_o, LOW); digitalWrite(d_o, HIGH); digitalWrite(e_o, HIGH); digitalWrite(f_o, LOW); digitalWrite(g_o, HIGH); break; case 3: digitalWrite(a_o, HIGH); digitalWrite(b_o, HIGH); digitalWrite(c_o, HIGH); digitalWrite(d_o, HIGH); digitalWrite(e_o, LOW); digitalWrite(f_o, LOW); digitalWrite(g_o, HIGH); break; case 4: digitalWrite(a_o, LOW); digitalWrite(b_o, HIGH); digitalWrite(c_o, HIGH); digitalWrite(d_o, LOW); digitalWrite(e_o, LOW); //örneğin onlar basamağı 4 ise b,c,f,g digitalWrite(f_o, HIGH); //bacaklarını HIGH yaptık digitalWrite(g_o, HIGH); break; case 5: digitalWrite(a_o, HIGH); digitalWrite(b_o, LOW); digitalWrite(c_o, HIGH); digitalWrite(d_o, HIGH); digitalWrite(e_o, LOW); digitalWrite(f_o, HIGH); digitalWrite(g_o, HIGH); break; case 6: digitalWrite(a_o, HIGH); digitalWrite(b_o, LOW); digitalWrite(c_o, HIGH); digitalWrite(d_o, HIGH); digitalWrite(e_o, HIGH); digitalWrite(f_o, HIGH); digitalWrite(g_o, HIGH); break; case 7: digitalWrite(a_o, HIGH); digitalWrite(b_o, HIGH); digitalWrite(c_o, HIGH); digitalWrite(d_o, LOW); digitalWrite(e_o, LOW); digitalWrite(f_o, LOW); digitalWrite(g_o, LOW); break; case 8: digitalWrite(a_o, HIGH); digitalWrite(b_o, HIGH); digitalWrite(c_o, HIGH); digitalWrite(d_o, HIGH); digitalWrite(e_o, HIGH); digitalWrite(f_o, HIGH); digitalWrite(g_o, HIGH); break; case 9: digitalWrite(a_o, HIGH); digitalWrite(b_o, HIGH); digitalWrite(c_o, HIGH); digitalWrite(d_o, HIGH); digitalWrite(e_o, LOW); digitalWrite(f_o, HIGH); digitalWrite(g_o, HIGH); break; } } [/php]