iki buton ile değişkenin değerini arttırma azaltma hk
  • Merhaba Arkadaşlar,

    Arduinoda sayı değişkeni oluşturdum ve bir butona bastığımda sayıyı bir arttırmasını ve ikinci butona bastığımda değişkenin son halinden bir düşmesini istiyorum fakat butonlar biraz kararsız çalışıyor bir basmada değişken 4 tane artıyor yani sayı değişkeninin değeri 0 iken butona bastığımda 4 oluyor kararsız çalışan buton var karşımda if ve onun içinede while döngüsü ile sorunu çözüyorum fakat oda çok bekletiyor seri şekilde basamıyorum butona yaklaşık 3-4 sn bekletiyor. Bu problemi nasıl çözebilirim yardımcı olacak arkadaşlara şimdiden teşekkürler.
    NOT: Kesmeler ile yapmak istediğimdede bekletmektedir. seri şekilde sayı değişkenin değerini buton ile arttırıp azaltamıyorum.
  • int butonx=8;
    int butony=9;
    int sayi;
    void setup() {
    Serial.begin(9600);
    pinMode(butonx,INPUT);
    pinMode(butony,INPUT);
    }

    void loop() {
    if(digitalRead(butonx) == HIGH )
    {
    delay(10);
    sayi++;
    Serial.println(sayi);
    delay(150);
    }
    else if (digitalRead(butony) == HIGH )
    {
    delay(10);
    sayi--;
    Serial.println(sayi);
    delay(150);
    }
    }
  • butonlara sürekli basılı tutarsan 150 ms arayla saymaya devam eder. 150 ms'yi arttırırsan butonlar daha yavaşlayacaktır deneyerek gör.
  • papi cevap için çok teşekkürler fakat bende böyle yazdığımda buton LOW seviyesine düşene kadar 4 tur if bloğu sayı değişkenini arttırıyordu. Eve gittiğimde bu yazdığın kodu tekrardan deneyeceğim. Sağolasın
  • Ben denedim serial monitörden bakabilirsin sende
  • Butonlara bu şekilde 10k direnç bağlaman gerekiyor. https://www.arduino.cc/en/Tutorial/Button
  • papi çok teşekkür ederim 10k direnç kullanmıyordum şimdi 10k direnç ile gayet başarılı çalışmaktadır. Eline koluna sağlık.
  • Merhaba arkadaşlar çözüm bulmuş gibi görünüyorsunuz fakat bu işlemin daha sağlıklı çalışma yöntemi var.
    Yani butona 1 kere bastığında arttırıp azaltma işlemini yalnızca birkere yapmasını ve basılı tuttugun sürecede sadece 1 kere yapmasını istiyorsanız kontrol bitleri kullanmanız gerekmektedir.
    Eğer isterseniz ufak bir örnek kod yazabilirim.
  • merhaba emekci tabi memnun olurum ufak bir kod gönderebilirsen sevinirim fakat papi arkadaşın dediği gibi 10k direnç ile problemim çözüldü fakat farklı bir kod görmek her zaman faydalı olur diye düşünüyorum. ilgin için teşekkürler
  • Rica ederim.
  • Normalde buton okuma gibi çok fazla satırdan oluşmayan programların dönüş süresi işlemciye bağlı olarak mikrosaniyeler mertebesindedir. Yani yazdığın digitalRead(buton) gibi bir komut saniyede 1000lerce yada 1000.000 lerce lere dönebilir (işlemciye ve programı yazma şekline göre değişir). Biz bu kadar hassas olamadığımız için butona bir basışımız mikrosaniyelerden çok fazla olduğu için işlemci sanki biz defalarca basıyormuşuz gibi algılar.Bunun için şöyle bir yöntem kullanılır. Butonla birlikte bir kontrol bitinide koyarsak if döngüsünün içine böylece 1 kere bastığımızda 1 kere işlem yaptırtabiliriz.



    #define BUTTON 9
    #define LED 10

    int kontrol = 1;

    void setup()
    {
    pinMode(LED, OUTPUT);
    pinMode(BUTTON, INPUT);
    }

    void loop()
    {
    if (BUTTON)
    {
    if (kontrol)
    {
    /*Yapmak istediğin işlem ( örneğin bir led yakacaksan
    digitalWrite(LED,HIGH))*/

    digitalWrite(kontrol, LOW);
    }
    }
    else digitalWrite(kontrol, HIGH);
    }

    define ve pin tanımlamalarını yaptıktan sonra( ben butonu 9. pine ledi 10. pine bağladım örnek olarak) bu kod butona 1 kere bastığında (bırakana kadar) içerisindeki işlemi yalnızca bir kere icra eder.

    Umarım açıklayıcı olmuştur

    İyi çalışmalar
  • emekçi çok teşekkürler gayet açıklayıcı oldu emeğine sağlık
  • Merheba arkadaslar
    Lutfen yardiminizi esirgemeyiniz
    Su nem sensorundaki calisma_siniri degerini butonla ayarlamak icin ne yapabilirim?

    #define yesil_led_pin 11
    #define kirmizi_led_pin 10
    #define motor_pin 9
    #define nem_sensoru A0
    #define calisma_siniri 600

    int nem_degeri = 0;

    void setup(){ pinMode(yesil_led_pin , OUTPUT);
    pinMode(kirmizi_led_pin , OUTPUT);
    pinMode(motor_pin , OUTPUT);
    Serial.begin(9600);}
    void loop()
    { nem_degeri = analogRead(nem_sensoru);
    Serial.println(nem_degeri);
    if (nem_degeri > calisma_siniri)
    { digitalWrite(motor_pin, HIGH);
    digitalWrite(kirmizi_led_pin, HIGH);
    digitalWrite(yesil_led_pin, LOW);
    delay(3000);
    digitalWrite(motor_pin, LOW);
    delay(5000);
    }
    else { digitalWrite(yesil_led_pin, HIGH);
    digitalWrite(motor_pin, LOW);
    digitalWrite(kirmizi_led_pin, LOW);
    }
    }

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Login with Facebook

Tagged

Açık kaynak kültürü gereği, çözdüğünüz problemlerin çözümlerini paylaşmayı lütfen unutmayın.