row & B00000001 komutu

merhabalar, aşağıdaki kod nasıl çalışıyor. yardımcı olabilecek var mı? şu kısmı anlamadım !!(row & B00000001) for(row=0; row<8; row++){ digitalWrite(AP, !!(row & B00000001)); digitalWrite(BP, !!(row & B00000010)); digitalWrite(CP, !!(row & B00000100)); …

Bu kodda anlatılacak çok şey var. Bir sayı ‘B’ ile başlıyorsa ikilik sistemde yazılmış demektir. Koddaki ikilik tabandaki sayılar sırasıyla 1, 2, ve 4’tür. Öndeki sıfırları yazmak gerekmez. B1, B10, B100 şeklinde de yazılabilir, 1, 2, 4 şeklinde de, 0x1, 0x2, 0x4 şeklinde de. (0x ile başlayanlar onaltılık taban). row & … ile başlayan ifadelerde row sayısının 1. 2. ve 3. bitlerinin değeri almış. Bunun nasıl olduğunu merak ediyorsan anlatırım. Sonra bu bitlerin değerini AP, BP, CP pinlerine yazdırmış. ‘!’ NOT operatörüdür. Bir ifadenin lojik tersini alır. Çift !! koymak tersinin tersi demektir. Haliyle gereksiz olmuş. Silsen de aynı şekilde çalışır.

teşekkür ederim. çıktıyı tam anlamadım internette şöyle bir şey buldum row 3 için digitalWrite(AP, !!(row & B00000001)); B00000011 & B00000001 SONUÇ B00000001 oluyor. yani 1 decimal olarak buda çıkışı aktif yapıyor. b pini için digitalWrite(AP, !!(row & B00000010)); B00000011 & B00000010 sonuç B00000010 oluyor decimal olarak 2 peki b pini çıkış olarak ne olacak normalde 0 ya 1 gönderiyoruz yaz 2 gönderirsek ne olur ? inşallah anlatabilmişimdir.

Normalde arduino belgelerinde bunun yazılması gerekirdi ama HIGH LOW yazıp geçmişler. Gidip fonksiyonun kaynak koduna bakmamız gerekiyor. https://github.com/arduino/ArduinoCore-avr/blob/master/cores/arduino/wiring\_digital.c digitalWrite fonksiyonunu bulup inceliyoruz. Bizi ilgilendiren kısım şurası (if’leri bilerek fi yaptım, forum if sözcüğünü kabul etmiyor nedense) fi (val == LOW) { *out &= ~bit; } else { *out |= bit; } Yani val 0 ise pini 0 yap, val SIFIR DEĞİLSE pini 1 yap. Eğer şu şekilde yazılmış olsaydı fi (val == HIGH) { *out |= bit; } else { *out &= ~bit; } pinin 1 olması için val’ın kesinlikle 1 olması gerekirdi. Bu mantıksal olarak hatalı olurdu.

teşşekür ederim. yinede karışık geldi hocam eyvallah