1. sayfa
Ne yapmak istediğin kodundan anlaşılmıyor ama amacın 3. pini de yakıp söndürmekse aşağıdaki gibi kodunu düzenleyebilirsin. void loop() { digitalWrite(1, HIGH); delay(1000); digitalWrite(1, LOW); delay(1000); digitalWrite(3, HIGH); delay(1000); digitalWrite(3, LOW); delay(1000); } |
Amacım aslında 1. Pinin high değerini verdiğinde 3. Pinin de aynı değeri vermesini if döngüsü ile sağlamaktı Ancak bu şekilde yazdığımda sadece 1. Pin çalışıyor Aynı olayı while ile de denedim ancak durum aynı |
Kodlar gerçekte de satır satır çalıştığı dolayısıyla, pin yanıp sönüyor sonrada pin 1 yanık mı diye bakıyorsun, anlaşıldı mı ? void loop() { digitalWrite(1, HIGH); digitalWrite(3, HIGH); delay(1000); digitalWrite(1, LOW); digitalWrite(3, LOW); delay(1000); } böyle olsun, olmaz mı ? |
Evet bu halde mantıklı tabii ama benim yazdığım neden çalışmıyor onu kavrayamadım |
Merhaba. digitalRead() fonksiyonunun örnek kodlarında okunacak pini setup içinde giriş olarak tanımlamışlar. Siz setup içinde çıkış olarak tanımladığınız pini digitalRead() fonksiyonu ile okumaya çalışmışsınız. Bu yüzden ne yapmaya çalıştığınız sadece kodlara bakarak anlaşılmıyor. Buna dikkat ettiniz mi? Ayrıca digitalRead fonksiyonu ile okunacak pinin giriş veya çıkış olarak tanımlanmasından bağımsız olarak, üstteki cevapta da yazıldığı gibi kodlar adım adım çalıştırılıp sıra "if (digitalRead(1) == HIGH)" satırına geldiğinde kontrol edilen değer çoktan sıfırlanmış oluyor. 1 saniye önce çalıştırılan "digitalWrite(1, LOW);" satırı if bloğunu anlamsız hâle getiriyor. digitalRead() - Arduino Reference |
Amacım aslında if döngüsünü kullanarak 3. Pini kontrol etmek Peki bu işlemi if kullanarak gerçekleştiremez miyim |
if yapısı ile yapmak istediğin şey ile, yola çıktığın örnek pek uygun değil. İlla bu yöntem ile denemek istiyorum diyorsan aşağıdaki örneklerdeki gibi deneyebilirsin. İkiye bölünen aşağıdaki örnekde 1. led senin örneğideki gibi flash yapmayacaktır. Sabit yanacak veya hiç yanmayacaktır. 1. lede bağlı olarak 3. ledde yanacak veya sönük kalacak. Bunun yerine bir girişi input olarak tanımlayıp " pinMode(2, INPUT); ", çıkış ledini bu inputun durumuna göre kontrol etmek için IF yapısını kullanman, olayı kavraman açsından daha faydalı olur. //--- 1. örnek--- void loop() { digitalWrite(1, HIGH); // bu denemede 3. pinde H olacak if (digitalRead(1) == HIGH) { digitalWrite(3, HIGH); } else { digitalWrite(3, LOW); } } //--- 2. örnek--- void loop() { digitalWrite(1, LOW); // bu denemede 3. pinde L olacak if (digitalRead(1) == HIGH) { digitalWrite(3, HIGH); } else { digitalWrite(3, LOW); } } Nerede hata yapıyorum soruna cevap (Mantık hatası) < Resime gitmek için tıklayın > |
Hocam kusura bakmayın biraz yordum sizi ama şunu cidden anlamadım pin neden sürekli else e düşüyor Çünkü mantıken şöyle olması gerekmez mi: 1. Pin high değerini verdiğinde 3. Pinin de high vermesi gerkir(çünkü ben if ifadesi ile bunu böyle belirttiğimi düşünüyorum)( 1. Pin high olduğunda 3. Pin de high olsun demek değil mi bu yazdığım ifade) |
Hıgh yaptığın ledi hemen peşine söndürmüşsün. ARada delay var. Hıgh yaptığında da delay yani bekleme var, low yaptıktan sonra da. Sonraki satırlara bu delayden beklemeden sonra geçmiyor mu ? Hıgh yaptığın yerde eşitleyebilseydin olurdu. |
IF ELSE konularına biraz daha bakmanda fayda var. Kendi düşüncelerinden sıyrılıp, doğrusunu öğrenmeye odaklan. ![]()
Ayrıca program kodlarının yukarıdan aşağıya doğru işleme alındığını unutmayınız. |
Hocam yukarıdan aşağıya doğru gittiğini biliyorum ancak burada nasıl bi tezatlık var ki? |
Hocam şimdi siz deyince farkettim Delayları ekledim ancak sonuç yine aynı |
Yukarıdaki mesajımda resim üzerinde işaretleyerek ve açıklamlar ekleyerek mantık hatasını göstermiştim. |
Çok teşekkür ederim void setup() { pinMode(2,OUTPUT); pinMode(3,OUTPUT); } void loop() { digitalWrite(2,1); delay(1000); if(digitalRead(2)==1) { digitalWrite(3,1); delay(1000); } digitalWrite(2,0); delay(1000); if(digitalRead(2)==0) { digitalWrite(3,0); delay(1000); } } Sizin mesajınızı da dikkate alıp kendim de sakin kafayla biraz düşününce bu kodu oluşturdum ve çalıştı |
Burada if kullanmanın bir anlamı yok çünkü içindeki koşul her türlü sağlanıyor o yüzden if leri silebirsin aynı sonuç olur. |
BUrada basit haliyle yapıp, karmaşık işlerde kullanma fikri vardır. Zaten led yakmak da sadece sonucu görmek. |
1. sayfa
pinMode(3, OUTPUT);
pinMode(1, OUTPUT);
}
void loop() {
digitalWrite(1, HIGH);
delay(1000);
digitalWrite(1, LOW);
delay(1000);
if (digitalRead(1) == HIGH) {
digitalWrite(3, HIGH);
} else {
digitalWrite(3, LOW);
}
}
Bu şekilde kodu yazıp devreyi de hazırlıyorum standart şekilde
Ancak sadece 1. PİNDEKİ lamba yanıp sönüyor 3. Pindekinde herhangi bi değişiklik olmuyor
Sorun ne olabilir
< Bu ileti mobil sürüm kullanılarak atıldı >