Şimdi Ara

KODU YAZDIĞIMDA SADECE 1. PİNDEKİ LAMBA ÇALIŞIYOR

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
7 Misafir - 7 Masaüstü
5 sn
18
Cevap
0
Favori
151
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • void setup() {

    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ı >



  • 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);


    }

  • rafet32 kullanıcısına yanıt

    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ı


    < Bu ileti mobil sürüm kullanılarak atıldı >
  • 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ı ?

  • limbesh kullanıcısına yanıt

    Evet bu halde mantıklı tabii ama benim yazdığım neden çalışmıyor onu kavrayamadım


    < Bu ileti mobil sürüm kullanılarak atıldı >
  • 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




    < Bu mesaj bu kişi tarafından değiştirildi F3SV mağduru -- 2 Aralık 2023; 1:59:38 >




  • F3SV mağduru kullanıcısına yanıt

    Amacım aslında if döngüsünü kullanarak 3. Pini kontrol etmek

    Peki bu işlemi if kullanarak gerçekleştiremez miyim


    < Bu ileti mobil sürüm kullanılarak atıldı >
  • 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ı)


    KODU YAZDIĞIMDA SADECE 1. PİNDEKİ LAMBA ÇALIŞIYOR




  • rafet32 kullanıcısına yanıt

    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)


    < Bu ileti mobil sürüm kullanılarak atıldı >
  • 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. KODU YAZDIĞIMDA SADECE 1. PİNDEKİ LAMBA ÇALIŞIYOR 

    Alıntı

    metni:
    (çünkü ben if ifadesi ile bunu böyle belirttiğimi düşünüyorum)



    Ayrıca program kodlarının yukarıdan aşağıya doğru işleme alındığını unutmayınız.

  • rafet32 kullanıcısına yanıt

    Hocam yukarıdan aşağıya doğru gittiğini biliyorum ancak burada nasıl bi tezatlık var ki?


    < Bu ileti mobil sürüm kullanılarak atıldı >
  • karafetva K kullanıcısına yanıt

    Hocam şimdi siz deyince farkettim

    Delayları ekledim ancak sonuç yine aynı


    < Bu ileti mobil sürüm kullanılarak atıldı >
  • Yukarıdaki mesajımda resim üzerinde işaretleyerek ve açıklamlar ekleyerek mantık hatasını göstermiştim.

  • rafet32 kullanıcısına yanıt

    Ç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ı


    < Bu ileti mobil sürüm kullanılarak atıldı >
  • 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.

  • bersgurs kullanıcısına yanıt

    BUrada basit haliyle yapıp, karmaşık işlerde kullanma fikri vardır. Zaten led yakmak da sadece sonucu görmek.

  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.