Arduino buton basma süresine göre işlem yapma

Paylaş

Herkese iyi günler. Bir arkadaşım mesaj attı ve “Bir butona  belli bir süre basınca bir röle, belli bir süre basınca başka bir röleyi tetikleyebilir miyiz?” diye sordu. Biraz araştırdım ve birçok kod buldum ama kodlar biraz karışık geldi açıkçası. Biraz düşününce kendim yapmaya karar verdim. Biraz uğraşınca başardım şükür. Burada 2 adet led kullandım ve 1 saniyeden az basarsam kırmızı led, 1-2 saniye arasında basarsam yeşil led yanıyor. 2 saniyeden fazla basarsam ledler sönüyor. Mantık olarak ise şu şekilde düşündüm;

Butona basıldığında while döngüsü çalışıyor ve delay ile 100 milisaniye bekleyerek bir değişkeni arttırıyor. B değer en başta 0. Butondan elimizi çekince  değer 10 kez artarsa 1 saniye beklemiş oluyoruz ve kırmızı led yanıyor. Eğer değer sayısı 10 ile 20 arasında ise 2 saniye beklemiş oluyoruz ve değer 20’den fazla ise 2 saniyeden fazla beklemiş oluyoruz. While komutu bu sayıyı buluyor.

While’dan sonraki if bloğu ise işlemin yapılacağını onaylayarak say değerine göre ilgili ledi yakıyor diğerini söndürüyor ve say değeri ile işlem değerlerini tekrar sıfırlıyor. işlem bu şekilde sürekli devam ediyor. Led yerine istediğiniz röleyi tetikleyerek işlem yapabilirsiniz.

Mantık kolay umarım işinize yarar. Kodlar ve devre aşağıdaki gibi. Kolay gelsin.

Devre şeması
Butona 5 volt giriş yaptık ve çıkışı  digital 2’ye, kırmızı led digital 7’ye ve yeşil led digital 6’ya bağladık.

Video

Kodlar

 

5.575 views

Gelen Aramalar:

  • 2 butona sırasıyla basınca led yakma (1)

Arduino buton basma süresine göre işlem yapma” için 20 yorum

  1. Hocam tek buton ile, önce kısa hemen ardından da uzun basarak ledi yaksak; sonra da aynı butonla aynı kısa ardından da uzun basma işlemini yaparak ledi söndürsek. Bunu kod da nasıl yapabilirim.

    1. şöyle bir mantık kurdum;
      butona basınca süreyi tutarsınız, sonra diğer basmada da tutarsınız ve ikisini birbiri ile toplarsınız. eğer toplam istediğiniz aralıkta ise yanıyorsa söndür, sönükse yak yapabilirsiniz.

    1. sanırım sayı 1-10 arasında ise şeklinde yapmaya çalışıyorsunuz ama bu şekilde olmaz.
      if (say>0 && say<=0) { çalışacak kodlar; } şeklinde olmalı. Amacınız o ise

  2. Hocam baya ugrasmissiniz mantik olarak bende ilk baslarda benzer bir yontem bulmuştum kendimce. Fakat pulsein kodu zaten bu işe yarıyormus megersem. Birtane uzunluk tanımlayıp (orn. long sure) long = pulsein(pinno, HIGH) Kodu ile belirlenen pin high oldugunda sure akmaya baslar low olana kadar saymaya devam eder. low oldugunda ise bu degeri sure tanimina yazar. Minimum 10 mikrosaniye sayabiliyor maximum bir sinir yok. Eger pulsein(pinno, HIGH) yazarsanız HIGH olunca saymaya baslar LOW olunca saniye sayma islemi biter. Sonrasinda yine senin yaptigin gibi if kosulu ile gerekli islemleri yaptirabilirsin. Satirlarca kodu yazmak zorunda kalmazsin hem bu koda ihtiyaci olan diger arkadaslarinda ise yarar diye yaziyorum hemde size kolaylik olsun diye.

    1. teşekkürler bilgi için. evet bu kodu yazarken yeni başlıyordum bende çok araştırmadan kendim böyle bir mantık oluşturmuştum. Sizin gönderinizi de pulsein(pinno, LOW) şeklindeki kısmını pulsein(pinno, HIGH) olarak güncelledim.

  3. Merhaba
    arduino ilk açıldığında iki led birden yanıyor bunu arduino ilk açıldıgında sadece bir led yansın sonrasında butona basınca biri sönsün digeri yansın istiyorum nasıl yapabilirim yardımcı olur musunuz. şimdiden teşekkürler

      1. arduinoya enerji geldiginde il anda iki led birden yanıyor, benim yapmak istedigim enerji geldiginde sadece ledin biri yansın sonrasında butona basınca biri sösün digeri yansın

  4. Merhaba, Elinizi sağlık güzel post olmuş ama şu pronlemime çözüm bulamıyorum. Yardımcı olabilir misiniz ?
    Kısa yanma ve uzun yanma modu olan bir ledi bir buton ile kontrol etmem gerekiyor. Butona 3 saniye basılı tutulduğunda uzun yanma moduna geçmesi daha az basılı tutulduğunda kısa yanma moduna geçmesi gerekiyor. Buton basılı tutulduğu sürece LED bulunduğu modun döngüsünde devam edecek. Buton bırakıldığında mod değişimi gerekiyorsa döngü yeni moda uygun olarak yeniden başlar (ör; uzun basma modunda iken kısa basma yapmak). Eğer mod değişimi gerekmiyorsa (ör; uzun basma modunda yine butona uzun basmak) LED döngüsü butona hiç basılmamış gibi devam edecektir.

    1. normalde zaten benim verdiğim kod temel olarak onu yapıyor. siz iki led yerine tek ledi kontrol ederseniz ve

      satırını kaldırırsanız yanlış anlamadıysam dediğinizi istediğinizi olacaktır.

      1. Mesele şurada sizinki süre kontrolü yapıyor ama normalde yanan ya da sönen lede göre yapıyor. Benim istediğimde led bir döngü içinde devamlı yanarken ben butonu arkaplanda yani kesme ile kontrol etmem gerekiyor.

        1. Yanan yada sönen lede göre yapmıyor. Basma süresine göre istenen ledi yakıyor. Tek led olursa uzun basarsanız ledin bağlı olan pinini high yaparak yanık kalır. Kısa basarsanız da pini low yaparak söndürürsünüz. Aksi halde hep yanık kalır led.

  5. Oncelikle cok faydali olmus tesekkurler. Bir sorum olacakti. 3 ayri butonla tek bir roleyi 3 ayri sn de cektirmek istiyorum. Yani birinci butona bastim role 5 sn cekili kaldi sonra enerjisi kesildi. 2.butona bastim 3 sn cekili kaldi vs. Nasil yapabilirim. Yardimci olursaniz sevinirim.

    1. şu şekilde yapabilirsiniz. birinci butona basınca 1. röleyi çektirdikten hemen sonra delay(5000); yazarak 5 saniyelik bir gecikme yaparsınız. artık hangi röleyi ne kadar çekilmiş halde bekleteceksiniz o kadar süre delay ile bekletme yapabilirsiniz. fırsat bulursam bu hafta içinde bir örnek hazırlamaya çalışayım ama delay ile oldukça kolay olacaktır. Geç gelen yanıt içiinde kusura bakmayın. Şu sıralar biraz fazla yoğunum.

mustafaakbal için bir cevap yazın Cevabı iptal et

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.