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