Şimdi Ara

Pic programımda -mantık-hatası?

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
3
Cevap
0
Favori
206
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Merhaba arkadaşlar pic öğrenmeye yeni yeni başlıyorum. Şuan sadece tris ayarları ve buton giriş çıkışlarını biliyorum. Bisikletim için bir devre yaptım 1.butonda sol sinyal, 2.butonda sağ sinyal, 2sine aynı anda basıldığında 4lüler yanmasını istiyorum. ilk 2 durum güzel çalışıyor ancak iki butona birden basılınca 1. ve 2.durumlar devam ettiğinden hem 4lü hemde sağ sol sinyaller yanıyor, karışık bir durum çıkıyor. Ben hocama sordum ! operatörünü kullanacaksın dedi tam açıklama alamadım. Bu konuda yardımcı olursanız sevinirim. Yazdığım program aşağıda;

    int1 a,b; //2 bitlik değişkenler atadık

    void main()
    {
    set_tris_a(0b11111111); //a portunu giriş yaptık
    set_tris_b(0b00000000); //b portunu çıkış yaptık
    set_tris_d(0b00000000); //d portunu cıkıs yaptık
    output_b(0); //b pinlerini 0v verdik
    output_d(0); //d pinlerine 0v verdik

    while(TRUE) //sonsuz dongu olusturduk
    {
    a=input(pin_a0); //a deişkenini a0 portuna giriş olarak atadık
    b=input(pin_a1); //b değişkenini a1 portuna giriş olarak atadık


    if(a){ //eğer a 1 olursa aşağıdaki komutları çalıştır

    output_b(31);
    delay_ms(150);
    output_b(0);
    delay_ms(150);
    }

    if(b){ //eğer b butonuna basılırsa 1 olursa aşağıdaki komutları çalıştır.

    output_d(248);
    delay_ms(150);
    output_d(0);
    delay_ms(150);
    }

    if(a&b){ //a ve b butonuna basılırsa aşağıdaki komutlar çalışssın

    output_b(31);
    output_d(248);
    delay_ms(150);
    output_d(0);
    output_b(0);
    delay_ms(150);

    }
    }
    }







  • & = Bit bazlı AND operatörü. Değişkenlerin bitlerini karşılaştırır. 2 ayrı pin'in aynı 2 bit'i aynı anda 1 olmayacağı için sürekli 0 alırsınız.
    01 & 10 = 00

    && = Lojik AND operatörü. Değişkenleri bütün olarak karşılaştırır. Kullanmanız gereken de budur.
    01(True) && 10(True) = 1 (True)

    | = Bit bazlı OR operatörü. İş görebilir ama doğrusu lojik OR operatörü olan || kullanmaktır. Sonuçta bit değil, lojik 2 nesneyi karşılaştırıyoruz.
    01 | 10 = 11
    01(true) || 00(false) = true
  • lojik 2 nesne derken butona basınca 1 çekince 0 olarak algılamıyor mu? bu arada ben komutu halleetim şu şekilde ;

    int1 a,b; //2 bitlik değişkenler atadık

    void main()
    {
    set_tris_a(0b11111111); //a portunu giriş yaptık
    set_tris_b(0b00000000); //b portunu çıkış yaptık
    set_tris_d(0b00000000); //d portunu cıkıs yaptık
    output_b(0); //b pinlerini 0v verdik
    output_d(0); //d pinlerine 0v verdik

    while(TRUE) //sonsuz dongu olusturduk
    {
    a=input(pin_a0); //a deişkenini a0 portuna giriş olarak atadık
    b=input(pin_a1); //b değişkenini a1 portuna giriş olarak atadık


    if(b==0&a){ //eğer b=0 iken a=1 olursa aşağıdaki komutları çalıştır

    output_b(31);
    delay_ms(150);
    output_b(0);
    delay_ms(150);
    }

    if(a==0&b){ //eğer a=0 iken b butonuna basılırsa, 1 olursa aşağıdaki komutları çalıştır.

    output_d(248);
    delay_ms(150);
    output_d(0);
    delay_ms(150);
    }

    if(a&b){ //a ve b butonuna basılırsa aşağıdaki komutlar çalışssın

    output_b(31);
    output_d(248);
    delay_ms(150);
    output_d(0);
    output_b(0);
    delay_ms(150);

    }
    }
    }




  • Yapay Zeka’dan İlgili Konular
    Daha Fazla Göster
    
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.