Bu uygulamamızda daha önce değindiğimiz 7 segmentli display uygulamamızı biraz daha geliştirerek Arduino Sayıcı Uygulaması ile 2 dijit 7 segmentli displayde 99′ a kadar saydırma işlemini yapacağız. Kullanılan displayler 2 dijit olup ortak katot bağlantılıdır. Transistör ile displayleri ayrı ayrı kontrol edebildiğimiz için aynı anda 2 dijite farklı değerler yansıtabiliriz. Bunu yapmak için televizyondaki gibi tarama mantığını kullanacağız.
Yani 1. dijite rakamı gösterip(bu esnada 2. dijit kapalı) sonra 2. dijite rakamı gösterip(bu esnada 1. dijit kapalı) bu döngüyü 10ms aralıklarla saniyede 25 kere yaparsanız aynı anda iki farklı değer sürekli gözüüküyormuş gibi olur. Bu zaman aralığı ve taramayı değiştirerek 7 segmentli displaylerde parlaklık ayarını yapmış olursunuz.
Arduino ile 7 Segmentli Display kullanarak 99′ a kadar sayaç uygulaması devre şeması aşağıdaki gibi yapılabilir.
Arduino ile 7 Segmentli Display kullanarak 99′ a kadar sayaç uygulaması Arduino programı aşağıdadır. Bu programı incelerseniz for döngüleri ile tarama ve numaraları gösterme işlemi yapılmaktadır. Devre şemanızı ve Arduino’ nuzun pin sayısı kadar çok sayıda dijit ekleyerek istediğiniz sayıya kadar sayadırma işlemini yaptırabilirsiniz. İsterseniz geriye doğru saydırma, atlayarak saydırın.
Ayrıca 7 segmentli Display Truth Table’ ı değiştirerek te farklı karakterleri gösterebilirsiniz. gerisi sizin hayal gücünüze kalmış.
Arduino Sayıcı Uygulaması Kodları
/* www.kaizen40.com
2 digit 7 segmentli display
alt soldan başlayarak
1: c
2: dp(nokta)
3: e
4: d
5: g
6: f
7: ds1 (1.digit ortak katot)
8: ds2 (2.digit ortak katot)
9: b
10: a
*/
int sayac = 0;
//**************** DISPLAY ATAMALARI *****************//
// 7 segmentli dipslay Arduino pin bağlantıları
// a, b, c, d, e, f, g
const int segmentPin[7] = {3, 4, 5, 6, 7, 8, 9};
const int nDisplayPin[2] = {10, 11}; // dipslay ortak katodu
// a, b, c, d, e, f, g (7 segmentli Display Truth Table)
int sayi[10][7] = { // satır, sutun
{1, 1, 1, 1, 1, 1, 0}, // 0
{0, 1, 1, 0, 0, 0, 0}, // 1
{1, 1, 0, 1, 1, 0, 1}, // 2
{1, 1, 1, 1, 0, 0, 1}, // 3
{0, 1, 1, 0, 0, 1, 1}, // 4
{1, 0, 1, 1, 0, 1, 1}, // 5
{0, 0, 1, 1, 1, 1, 1}, // 6
{1, 1, 1, 0, 0, 0, 0}, // 7
{1, 1, 1, 1, 1, 1, 1}, // 8
{1, 1, 1, 0, 0, 1, 1} // 9
};
//***************** KONFİGURASYONLAR *****************//
void setup()
{
//Serial.begin(9600);
//delay(500);
// pinleri çıkış olarak ayarla
for (int i = 0; i <= 7; i++)
{
pinMode(segmentPin[i], OUTPUT);
}
for (int i = 0; i <= 2; i++)
{
pinMode(nDisplayPin[i], OUTPUT);
}
}
//********************* ANA PROGRAM ******************//
void loop()
{
if (sayac <= 9) // 0-9' a kadar ilk dijite yaz
{
digitalWrite(nDisplayPin[0], HIGH); // 1. dipslay aktif
digitalWrite(nDisplayPin[1], LOW); // 2. dipslay pasif
for (int i = 0; i <= 9; i++) // sayılar
{
for (int j = 0; j <= 7; j++) // segmentler
{
digitalWrite(segmentPin[j], sayi[i][j]);
}
delay(500);
sayac++;
}
}
else // 10-99' a kadar ikinci dijite yaz
{
// sayıyı dijitlere böl
String number = (String)sayac;
int dsp1 = ((String)number[0]).toInt(); // 1. dijit
int dsp2 = ((String)number[1]).toInt(); // 2. dijit
//Serial.println("dsp1: " + (String)dsp1 + " dsp2: " + (String)dsp2);
for ( int t = 0; t < 25; t++)
{
// 1. dijiti göster
digitalWrite(nDisplayPin[0], LOW); // 1. dipslay pasif
digitalWrite(nDisplayPin[1], HIGH); // 2. dipslay aktif
for (int j = 0; j <= 7; j++) // segmentler
{
digitalWrite(segmentPin[j], sayi[dsp1][j]);
}
delay(10);
// 2. dijiti göster
digitalWrite(nDisplayPin[0], HIGH); // 1. dipslay aktif
digitalWrite(nDisplayPin[1], LOW); // 2. dipslay pasif
for (int j = 0; j <= 7; j++) // segmentler
{
digitalWrite(segmentPin[j], sayi[dsp2][j]);
}
delay(10);
}
}
// sayac 99' a ulaşmış ise sıfırla
if (sayac >= 99)
{
sayac = 0;
}
else
{
sayac++;
}
}
İyi çalışmalar,


0 yorum