Çoğu projede tek haneli göstergeler yetersiz olmaktadır. Bu yüzden birden fazla haneyi barındıran göstergeler üretilmiştir. Kablo kalabalığını azaltmak için gösterge içerisinde LED çubuk pinleri haneler arasında birbirine bağlanmıştır fakat göstergenin ortak uçları haneler arasında birbirine bağlanmamıştır. Bu fark kullanılarak haneler ayrı ayrı kontrol edilebilmektedir.
Örneğin göstergeye 25 yazdırmak isteyelim. Bunun için öncelikle onlar hanesindeki sayı, 2 ele alınır. 2 sayısının karşılığı olan pinler 'digitalWrite' fonksiyonu ile ayarlandıktan sonra bu hanenin ortak ucu transistör yardımıyla iletime geçirilir. Böylece akım bizim belirttiğimiz LED çubukları üzerinden sadece ilk haneden geçerek devreyi tamamlar. Birler hanesini yani 5 sayısını yazdırmak için öncelikle 1. haneye bağlı transistör kapatılır. Daha sonra 5 sayısına karşılık gelen LED çubuk pinlerine çıkış verilir. Hemen ardından devrenin tamamlanması için bu haneye bağlı transistör iletime geçirilir.
Bu işlem toplamda 10 milisaniyede yapılmaktadır. Aslında gösterge üzerinde hiçbir hane aynı anda yanmasa bile, insan gözü sanki tüm haneler aynı anda yanıyormuş gibi görür. Konunun daha iyi anlaşılması için bir uygulama yapalım.
Uygulama: 0-99 arasında sayan kronometre
0 ile 99 arasında saymak için iki haneli gösterge kullanılacaktır. Bir önceki uygulamamızda gösterge mantığının anlaşılması için hazır kütüphane kullanılmamıştı. Daha hızlı kullanım için Arduino'nun hazır gösterge kütüphaneleri bulunmaktadır. İnternet üzerinde birçok gösterge kütüphanesi bulunmaktadır. Projede bu kütüphanelerden "SevenSeg" isimli olan kullanılacaktır. Diğer kütüphaneler de benzer mantıkla çalışmaktadır. Bu kütüphaneyi indirip Arduino'ya ekleyiniz.
Hatırlatma: Arduino kütüphaneleri dosya klasörü ile birlikte Arduino'nun yüklü olduğu dizindeki "libraries" klasörü içerisine kopyalanmalıdır.
Bu uygulamayı yapmak için ihtiyacınız olan malzemeler;
- 1 x Arduino
- 7 x 220 ohm direnç
- 1 x 2 segmentli gösterge
- 1 x Breadboard
#include <SevenSeg.h>
/* gostergenin LED pinleri sirasi ile tanimlaniyor */
SevenSeg gosterge(2,3,4,5,6,7,8);
const int haneSayisi =2;
/* hanerli kontrol edecek transistörlerin pinleri */
int haneler[haneSayisi] = {
9,10};
void setup()
{
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
/* gösterge kuruluyor */
gosterge.setDigitPins(haneSayisi,haneler);
}
unsigned long timer=0;
int i = 0;
void loop()
{
if(millis() - timer >1000){
i ++;
timer = millis();
if(i > 99)
i = 0;
}
gosterge.write(i);
}
Bu kodla öncelikle "SevenSeg" kütüphanesi projeye dâhil edilmiştir. Bu projeden gosterge adında bir nesne üretilmiş ve göstergenin kontrol pinleri nesneye yüklenmiştir. Projede kaç haneli gösterge kullanılacağı tanımlanmış ve bu haneleri kontrol eden transistörlerin pinleri belirlenmiştir. Kullanılan göstergenin türü setCommonAnode() veya setCommonCathode() fonksiyonu ile belirtilmelidir.
Loop fonksiyonu içerisinde for döngüsü ile 0 – 99 arasındaki değerler i değişkenine aktarılmıştır. Bu değişkenin değerini göstergeye yazdırmak için write(i) fonksiyonu kullanılmıştır.