butona basma süresini serial monitore yazma
  • merhaba,
    butona kaç saniye basılı tuttuğumuzu belirleyip serial monitöre yazacak uygulama nasıl yapılabilir?. bu konuda yardımcı olabilecek olan varsa basit bir dille anlatırsa çok memnun olurum.
  • Merhaba
    İsterseniz kodları da paylaşabilirim ama ben anlatayım siz kendiniz yazın. Böylelikle hem el alışkanlığı olur hem de algoritma beceriniz gelişir. Şimdi öncelikle arduinonun herhangi bir dijital pinine pull-down şeklinde bir switch (anahtar- buton) bağlayın. En azından ben bu şekilde yaptım siz kendi yönteminizi belirlersiniz.

    Program kısmında bir kaç değişken gerekecek. Bir tane arduino çalıştıktan sonra geçen zamanı tutmaya yardımcı olacak değişken. Bir tane "switchleme" (anahtarlama- butona basma) anını gösteren değişken. Bir tane yazdırmaya yardımcı olacak yani butonun HIGH durumunda ne kadar kaldığını gösterecek değişken olacak. Bunlar programımıza özel değişkenler. Tabi bunların yanında butonun durumunu tutan değişken ve buton pinini gösteren sabitimiz de olacak. Loop fonksiyonu içinde zaman tutmaya yarayan değişkenimize millis() fonksiyonunu atayın(startTime = millis ()). Daha sonra digitalRead fonksiyonu ile butonun bağlı olduğu pini okuyun. Eğer buton HIGH durumundaysa "butonlama" anını tutan değişkene millisi atamış olduğumuz değişkeni atayın ( buttonTime = startTime). Eğer buton LOW durumundaysa butonun HIGH zamanını bulmak için highTime = startTime - buttonTime yapın. Burada startTime aslında şimdiki zamanınızı gösteriyor. ButtonTime ise en son HIGH geçiş anahtarlama anınızı gösteriyor. Bu ikisinin farkı aralık değeri veriyor. Bir diğer deyişle startTime = arduinonun çalışmaya başlama zamanı = LOW geçiş anahtarlama zamanı = şimdiki zaman.

    Biraz karışık görünebilir. Belki daha basit yapan arkadaşlar vardır. Ama burada yazdığım kadar uzun değil kodlar ve hatta çok basit. Dediğim gibi kodları sizinle paylaşabilirim. Fakat kendiniz yazmaya çalışırsanız sizin için de gayet iyi olur. Kolay gelsin.
  • merhaba Orgulas, ilgine teşekkür ediyorum. Arduino ile yeni tanışmış ve öğrenmeye çalışıyorum. Butonla ilgili temel uygulamaları yaparken aklıma bu proje geldi ancak yukarıda yazdığım gibi zaman ile ilgili kod konusunda sorun yaşıyorum. Yazdıklarını uygulamayı denedim ancak startTime ve buttonTime hep aynı değeri okuduğu için ikisinin farkı sürekli 0 yazılıyor. Muhtemelen ben bir şeyleri yanlış yapıyorum. Kodları yazabilirsen çok memnun olacağım. Teşekkürler.
  • const int buttonPin = 7 ; //Butonu 7. pine atadık.

    int buttonCase = 0;//Butonun başlangıç değerini LOW olarak atadık.
    long lastTime = 0;//En son butona basma zamanını bu değişkende tutacağız.

    void setup()
    {
    pinMode(7, INPUT);//Butonun bağlı olduğu pini giriş olarak atadık
    Serial.begin(9600);
    }

    void loop()
    {
    unsigned long startTime = millis() ;//Başlangıçtan sonra geçen zamanımızı bu değişkenimizde tutacağız.
    long highTime = 0;//Butonun ne kadar süre HIGH durumunda kaldığını bu değişkende tutacağız.

    buttonCase = digitalRead(7);// Butonun bağlı olduğu pini okuyoruz

    if ( buttonCase != LOW )// Eğer buton HIGH durumundaysa
    {
    if( lastTime == 0 ) // Ve önceden bir atama yapılmamışsa
    lastTime = startTime;//Anahtarlama anı kaydedilir.
    }
    //Eger lastTime == 0 gibi bir şart olmasaydı,
    //buton basılı olduğu durumda lastTime ' a sürekli atama yapılacaktı.
    //Bu şartı ekleyerek sadece ilk basılma anını kaydetmiş oluyoruz.

    else// Eğer buton LOW durumundaysa. Yani basılı değilken
    {
    if (lastTime != 0)//Butonun önceden basılı olup olmadığına bakılır.
    { // Eğer önceden atama yapılmışsa. Yani butona basılıp çekilmişse
    highTime = startTime - lastTime ; // Başlangıçtan şimdiye kadar olan zamandan (startTime) anahtara en son basılan
    Serial.print("Zaman araligi = "); //zaman (lastTime) çıkarılır ve butona basılı tutma süresi (highTime) bulunmuş olur.
    Serial.println(highTime);// Serial.print ve .println komutlarıyla da yazdırılır.
    lastTime = 0; // Bir sonraki anahtarlama anı için lastTime sıfırlanır. Ve işlem devam eder.
    }
    else
    {
    Serial.println("Buton LOW durumunda ");//Eğer butona basılmamışsa ve buton LOW durumundaysa ekrana bu çıktı yazdırılır.
    }
    }
    }
    //Yusuf DEU EEE
    Buyrun kodlar. Kolay gelsin...
  • İşte içinden çıkamadığım kıvraklık buydu. :)
    if(lastTime==0)
    çok teşekkür ederim ilgin ve yardımın için.
  • Rica ederim. Kolay gelsin.
  • Hocam Selamlar.Örnek için çok sağolun emeğinize sağlık çok işime yarayacak. Yukarıdaki örnek üzerinden kendimi geliştirmek adına farklı şeyler yapmayı deniyorum. Bana bir konuda yardımcı olabilirseniz sevinirim. Yukarıdaki kodlar seri portta hızlı bir şekilde akıyor. Diyorum ki butonu bıraktığımızda highTime süresi kadar satır aralarına bekleme süresi koysa nasıl olur? Satır sonuna delay(highTime) olarak gecikme atadım ancak malesef etkisi olmadı. Arduino ile uğraşmaya yeni başladım. Nasıl olması gerekiyor?Yardımlarınızı bekliyorum. Şimdiden teşekkürler.
  • Hocam merhabalar ben bir program yazmak istiyorum ve yazdığım programda;
    ilk butona basıldığında servo motor sağ tarafa dönerken lcd ekranda motor sağa dönüyor
    ikinci butona basıldığında servo motor sol tarafa dönerken lcd ekranda motor sola dönüyor yazmasını istiyorum.

    iki bileşeni ayrı ayrı çalıştırabiliyorum fakat programları birleştiremiyorum bana yardımcı olursanız çok sevinirim.

Howdy, Stranger!

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

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