Arduino ile Binary Sayıcı Yapımı
Arduino ile binary sayıcı yapımı, ikili sayı sisteminin, bilgisayarların hatta bir çok devrenin çalışma mantığını anlamak için oldukça kolay ve eğitici bir uygulamadır. Bu içeriğimizde, Arduino ikili sayıcı devresini ve kodunu, hem port manipülasyonu hem de normal fonksiyonlarla yapacağız. Port manipülasyonu konusuna uzaksanız, bu yazı sizin için güzel bir başlangıç olabilir. Ayrıca yaptığımız bu ikili sayıcı 4-bit’tir.
Devre Şeması
Program Kodu
Port Manipülasyonu ile
Port manipülasyonu kullanılan bir kod, normal fonksiyonların kullanımına göre daha az yer kaplar ve daha hızlı çalışır.
int i=0; void setup() { DDRD = B10100000; DDRB = B00001010; } void loop() { PORTD = B00000000; PORTB = B00000000; delay(1000); i++; if((i % 2) > 0) { PORTD = B00100000; } else {PORTD = B00000000; } delay(250); if((i % 4) > 1) { PORTD = B10000000; } else { PORTD = B00000000; } delay(250); if((i % 8) > 3) { PORTB = B00000010; } else { PORTB = B00000000; } delay(250); if((i % 16) > 7) { PORTB = B00001000; } else { PORTB = B00000000; } delay(250); }
DRRD, ile Arduino’nun 0. ve 7. pinleri arasındakı pinlerin durumunu yani OUTPUT/INPUT olduğunu kontrol edebiliyoruz. DDRD = B10100000; satırı ile sağdan sola 0. pinden sayarak, 5. ve 7. pini “1” yani OUTPUT olarak ayarladık.
DRRB, ile Arduino’nun 8. ve 13. pinleri arasındakı pinlerin durumunu yani OUTPUT/INPUT olduğunu kontrol edebiliyoruz. DDRB = B00001010; satırı ile sağdan sola 0. pinden sayarak, 9. ve 11. pini “1” yani OUTPUT olarak ayarladık.
void loop()
Bu kısımda PORTD ve PORTB ile her döngü başında tüm pinlerin dijital çıkışını sıfırlıyoruz, devamında i++; sayacı ile beraber artışlarda sırasıyla, 21, 22, 23, 24 değerlerine göre ikili sayımı gerçekleştiriyoruz.
Klasik Fonksiyonlar ile
Aslında yukarıda yaptığımız anlatımla tamamen aynı mantıkta ilerliyor, yukarıda sadece port manipülasyonu yapıldı, burada alışık olduğumuz şekilde kodları görebilirsiniz.
int i = 0; void setup() { pinMode(5, OUTPUT); pinMode(7, OUTPUT); pinMode(9, OUTPUT); pinMode(11, OUTPUT); } void loop() { digitalWrite(5, LOW); digitalWrite(7, LOW); digitalWrite(9, LOW); digitalWrite(11, LOW); delay(1000); i++; if ((i % 2) > 0) { digitalWrite(5, HIGH); } else { digitalWrite(5, LOW); } delay(250); if ((i % 4) > 1) { digitalWrite(7, HIGH); } else { digitalWrite(7, LOW); } delay(250); if ((i % 8) > 3) { digitalWrite(9, HIGH); } else { digitalWrite(9, LOW); } delay(250); if ((i % 16) > 7) { digitalWrite(11, HIGH); } else { digitalWrite(11, LOW); } delay(250); }
Yorum yapma özelliği, forum tarafından gelen istek sebebiyle kapatılmıştır. Lütfen tartışmalar ve sorularınız için topluluk forumumuza katılın.