Ana Sayfa Arduino Arduino ile 0-99 Segment Display Sayıcı Yapımı

Arduino ile 0-99 Segment Display Sayıcı Yapımı

14 min read
1
2
6,506

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ı


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;
}
}

Buna Benzer Yazılar Göster !
Daha Fazlasını Yükle - Yunus Arat
Daha Fazla Göster -  Arduino

1 Yorum

  1. […] Arduino ile 0-99 Segment Display Sayıcı Yapımı […]

    Reply

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Bak Bakalım ?

Arduino ile Röle Kullanarak Harakete Duyarlı Lamba Yapımı

Merhaba arkadaşlar, bugün sizlerle koridorlarda merdivenlerde çokça gördüğünüz harekete du…