Şimdi Ara

Arduino kod bugu?

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
10
Cevap
0
Favori
1.132
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Arkdaşlar aşşağıda ki gibi bir kod yazdım ve devreme micro buttonlar koydum sıkıntı yok buralarda sorun kodun şu kısmında if(digitalRead(button1) == HIGH && oku == '1')
    şimdi burda diyorki eğer butona basılırsa veya serial monitöre 1 yazırlırsa diyor fakat 2 isinden birini yapınca değil ikisini aynı anda yaparsam koşul çalışıyor nasıl düzeltirim bunu?

    Kod
    const int button1 = 8; 
    const int button2 = 9;
    const int button3 = 10;
    const int button4 = 11;
    int oku;

    void setup() {
    pinMode(button1, INPUT);
    pinMode(button2, INPUT);
    pinMode(button3, INPUT);
    pinMode(button4, INPUT);
    Serial.begin(9600);

    }
    void loop() {
    if(Serial.available()){
    oku = Serial.read();
    if(digitalRead(button1) == HIGH && oku == '1'){
    Serial.println("1");
    }
    else if(digitalRead(button2) == HIGH && oku == '2'){
    Serial.println("2");
    }
    else if(digitalRead(button3) == HIGH && oku == '3'){
    Serial.println("3");
    }
    else if(digitalRead(button4) == HIGH && oku == '4'){
    Serial.println("4");
    }

    }

    }







  • Hic bi bilgim yok ama hocam mantiken && bnce bu ve demek buton1 basilirsa ve 1 yazinca calissin demissin herlde buton1 basilirsa veya 1 yazinca calissin demen lazim herlde && isaret skintili olabilir veya olmayabilir tamamen yanlis bi mantik yapmista olabilirim :D

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • Kod yazıldığı kadarıyla doğru çalışıyor. && işareti "ve(and)" anlamındadır. Butona basılır "ve(and)" seri ekrandan giriş yapılırsa kod çalışacaktır.(nitekim çalışmış). "yada(or)" ifadesi || ile temsil edilir. Butona basılırsa "ya da(or)" seri ekrandan giriş yapılırsa kod çalışır.

    Kaynak:https://www.arduino.cc/en/Reference/Boolean
  • && demek ve demek onun yerine || kullabırsan sorun kalmaz

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • Benm mantik dogruymus yani .D

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • Arkdaşlar kodu değiştirdim buraya yazdıktan sonra baya şu konuda yaklısınız || olması lazım tamam böyle değiştirdim ama sorun hala devam ediyor sorun şu şekilde şimdi serial monitöre 1,2,3,4 bunları sorunuz olarak çalıştırıyor fakat gel gelelim butonla bastığım zaman herhangibir tepki vermiyor kod çalışmıyor buna ilaven çalışıp çalışmadığına led bağlayıp denedim hala ayno sorun buttonlarda sıkıntı vardır diye başka kod yazıp led yakma ile ilgili tek butonla denedim sıkıntı yoktu yani sorun şu serial monitöre 1,2 vs değerlerini yazdığımda görüyor fakat butonla basıldı sürece görmüyor.

    Devrede herhangibi sorun yok koda ilaven oku='0'; yaparak değişkeni boşlattım hepsinin sonunda. Ne yapmam gerekiyor?



    < Bu mesaj bu kişi tarafından değiştirildi Mehmet_Ali61 -- 4 Aralık 2015; 16:07:29 >
  • quote:

    Orijinalden alıntı: Mehmet_Ali61

    Arkdaşlar kodu değiştirdim buraya yazdıktan sonra baya şu konuda yaklısınız || olması lazım tamam böyle değiştirdim ama sorun hala devam ediyor sorun şu şekilde şimdi serial monitöre 1,2,3,4 bunları sorunuz olarak çalıştırıyor fakat gel gelelim butonla bastığım zaman herhangibir tepki vermiyor kod çalışmıyor buna ilaven çalışıp çalışmadığına led bağlayıp denedim hala ayno sorun buttonlarda sıkıntı vardır diye başka kod yazıp led yakma ile ilgili tek butonla denedim sıkıntı yoktu yani sorun şu serial monitöre 1,2 vs değerlerini yazdığımda görüyor fakat butonla basıldı sürece görmüyor.

    Devrede herhangibi sorun yok koda ilaven oku='0'; yaparak değişkeni boşlattım hepsinin sonunda. Ne yapmam gerekiyor?

     
    #define buTton1 8
    #define buTton2 9
    #define buTton3 10
    #define buTton4 11
    char oku;

    void setup() {
    pinMode(buTton1, INPUT);
    pinMode(buTton2, INPUT);
    pinMode(buTton3, INPUT);
    pinMode(buTton4, INPUT);
    Serial.begin(9600);

    }
    void loop() {

    oku = Serial.read();
    if(digitalRead(buTton1) == HIGH || oku == '1')
    {
    Serial.println("1");
    }
    else if(digitalRead(buTton2) == HIGH || oku == '2'){
    Serial.println("2");
    }
    else if(digitalRead(buTton3) == HIGH || oku == '3'){
    Serial.println("3");
    }
    else if(digitalRead(buTton4) == HIGH || oku == '4'){
    Serial.println("4");
    } else if(digitalRead(buTton1) == HIGH && oku == '1'){
    Serial.println("X");
    }
    else if(digitalRead(buTton2) == HIGH && oku == '2'){
    Serial.println("X");
    }
    else if(digitalRead(buTton3) == HIGH && oku == '3'){
    Serial.println("X");
    }
    else if(digitalRead(buTton4) == HIGH && oku == '4'){
    Serial.println("X");
    }



    }


    Dostum yazılımını düzelttim. İstediğin işlemi yapamamanın sebebi Serial.availble yani seri porttan veri gelirse komutunu kullanman.Kod bloğunu if(Serial.available()) koşulunun altına yazdığın için seri porttan veri göndermezsen aşağıdaki koşullara erişemezsin.



    < Bu mesaj bu kişi tarafından değiştirildi mrkabaca -- 4 Aralık 2015; 17:12:10 >




  • mrkabaca kullanıcısına yanıt
    Şimdi şöyle bir sıkıntı var ben bunlara led kodu ekledim ayrıyetten nasıl çalıştığını daha rahat anlamak için. Serial.available'yi porttan veri gelirse dedim çünkü eğer öyle olmaz ise kafasına göre veriler geliyor yani şuan senin kodu denedim serial montiörü açtığımda sürekli kendi kendine sayı yazdırıyor 1,2,3,4 şeklinde ayrıyetten led bağladım denedim mesela ledler kendi kendine direk yanıyor çünkü veri geliyor sürekli kod aşşağıda bu sorunu anlamadım cidden çok acayip. Yardım için teşekkürler cevabını bekliyorum.

    #define buTton1  8 
    #define buTton2 9
    #define buTton3 10
    #define buTton4 11
    #define led1 7
    #define led2 6
    #define led3 5
    #define led4 4
    char oku;

    void setup() {
    pinMode(buTton1, INPUT);
    pinMode(buTton2, INPUT);
    pinMode(buTton3, INPUT);
    pinMode(buTton4, INPUT);
    pinMode(led1, OUTPUT);
    pinMode(led2, OUTPUT);
    pinMode(led3, OUTPUT);
    pinMode(led4, OUTPUT);
    Serial.begin(9600);

    }
    void loop() {

    oku = Serial.read();
    if(digitalRead(buTton1) == HIGH || oku == '1')
    {
    digitalWrite(led1, HIGH);
    Serial.println("1");
    }
    else if(digitalRead(buTton2) == HIGH || oku == '2'){
    digitalWrite(led2, HIGH);
    Serial.println("2");
    }
    else if(digitalRead(buTton3) == HIGH || oku == '3'){
    digitalWrite(led3, HIGH);
    Serial.println("3");
    }
    else if(digitalRead(buTton4) == HIGH || oku == '4'){
    digitalWrite(led4, HIGH);
    Serial.println("4");
    } else if(digitalRead(buTton1) == HIGH && oku == '1'){

    Serial.println("X");
    }
    else if(digitalRead(buTton2) == HIGH && oku == '2'){

    Serial.println("X");
    }
    else if(digitalRead(buTton3) == HIGH && oku == '3'){

    Serial.println("X");
    }
    else if(digitalRead(buTton4) == HIGH && oku == '4'){

    Serial.println("X");
    }



    }




  • quote:

    Orijinalden alıntı: Mehmet_Ali61

    Şimdi şöyle bir sıkıntı var ben bunlara led kodu ekledim ayrıyetten nasıl çalıştığını daha rahat anlamak için. Serial.available'yi porttan veri gelirse dedim çünkü eğer öyle olmaz ise kafasına göre veriler geliyor yani şuan senin kodu denedim serial montiörü açtığımda sürekli kendi kendine sayı yazdırıyor 1,2,3,4 şeklinde ayrıyetten led bağladım denedim mesela ledler kendi kendine direk yanıyor çünkü veri geliyor sürekli kod aşşağıda bu sorunu anlamadım cidden çok acayip. Yardım için teşekkürler cevabını bekliyorum.

    #define buTton1  8 
    #define buTton2 9
    #define buTton3 10
    #define buTton4 11
    #define led1 7
    #define led2 6
    #define led3 5
    #define led4 4
    char oku;

    void setup() {
    pinMode(buTton1, INPUT);
    pinMode(buTton2, INPUT);
    pinMode(buTton3, INPUT);
    pinMode(buTton4, INPUT);
    pinMode(led1, OUTPUT);
    pinMode(led2, OUTPUT);
    pinMode(led3, OUTPUT);
    pinMode(led4, OUTPUT);
    Serial.begin(9600);

    }
    void loop() {

    oku = Serial.read();
    if(digitalRead(buTton1) == HIGH || oku == '1')
    {
    digitalWrite(led1, HIGH);
    Serial.println("1");
    }
    else if(digitalRead(buTton2) == HIGH || oku == '2'){
    digitalWrite(led2, HIGH);
    Serial.println("2");
    }
    else if(digitalRead(buTton3) == HIGH || oku == '3'){
    digitalWrite(led3, HIGH);
    Serial.println("3");
    }
    else if(digitalRead(buTton4) == HIGH || oku == '4'){
    digitalWrite(led4, HIGH);
    Serial.println("4");
    } else if(digitalRead(buTton1) == HIGH && oku == '1'){

    Serial.println("X");
    }
    else if(digitalRead(buTton2) == HIGH && oku == '2'){

    Serial.println("X");
    }
    else if(digitalRead(buTton3) == HIGH && oku == '3'){

    Serial.println("X");
    }
    else if(digitalRead(buTton4) == HIGH && oku == '4'){

    Serial.println("X");
    }



    }


    Dostum şu kafasına göre veriler geliyo olayını bana bi anlatsana senin kodunu şimdi derledim attım uno'ya bi sıkıntı yok bence sen butonlarına bağladığın pull up-down dirençlerini kontrol et.




  • Hocam o olaya elektriksel ortam gürültüsü deniliyor. 10K'lık bir Pull Down direnciyle halledersin. Öbür türlü dijital giriş boşta kalacağından elektriksel ortam gürültüsü rastgele ve tutarsız değerler okunmasına neden olur.
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.