Arduino buton basma süresine göre işlem yapma
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
int buton=2; int kirmizi=7; int yesil = 6; int deger = 0; int say = 0; bool islem = false; void setup() { pinMode(buton, INPUT); pinMode(kirmizi, OUTPUT); pinMode(buton, OUTPUT); Serial.begin(9600); } void loop() { deger = digitalRead(buton); Serial.println(deger); while (deger == 1) { delay(100); say++; deger = digitalRead(buton); //butonu tekrar okuyoruz ki while takılı kalmasın. aksi halde islem = true; // deger değişkeni hep 1 olduğu için while sonsuz döngüye girer } Serial.println(say); if (islem == true) { if (say >0 && say <= 10) //1 saniye basıldı { digitalWrite(kirmizi,HIGH); digitalWrite(yesil,LOW); } else if (say >10 && say <= 20) //2 saniye basıldı { digitalWrite(yesil,HIGH); digitalWrite(kirmizi,LOW); } else //2 saniyeden fazla basıldı { digitalWrite(yesil,LOW); digitalWrite(kirmizi,LOW); } say=0; islem = false; } }
Ellerine sağlık dostum. Çok faydalı uygulama olmuş.
Sade ve anlaşılır olmuş. Teşekkürler.
Teşekkürler. İşime çok yaradı
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.
ş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.
http://www.mustafaakbal.com.tr/arduino-birden-fazla-buton-ile-istenilen-surede-islem-yapma.html bu işinizi görecektir.
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.
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.
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.
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.
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
tam olarak ne istediğiniz anlayamadım maalesef.
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
Bu tür uygulamalar youtube üzerinde var.
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.
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.
Hocam,
(say >0 && say 0 && say <= 10)
yapılabilir mi?
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
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.
şö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.
Merhaba Oğlum un akülü motosiklet ine 1w lık power ledler ile çakar yapmaya çalışıyorum.
Birden fazla mod eklemek istiyorum ve bun modlar arasında ki geçişi buton ile yapmaya çalıştım beceremedim ama.
Buton a bastığım zaman modun değişmesi basmadığım zaman ise o modda devamlı döngü halinde kalmasını istiyorum yardımcı olursanız sevinirim.TESEKKURLER…
Arduino kullanacaksanız şöyle birşey geldi aklıma. Kaç mod varsa bir değişken tanımlayıp 0’dan başlayın. Eğer 0 ise yanma şeklini kodlayın, dijital girişten bir buton okuyun. Butona basılınca değişken 1 artsın ve değerlere göre modlar çalıştırsın.
5 buton ile 1 led yakıyorum her butonun led yakma süresi farklı. Soru: her buton için led yakma süresini butona basarak ayarlamam mümkün mü ?
Dijital girişlere 5 adet buton bağlarsınız. Girişleri okursunuz. Hangi girişten değer okunursa ona göre istediğiniz sürede led’i yakabilirsizin. Bu kolay ama biraz uzun bir yoldur. Birde şu yolu deneyebilirsiniz.
http://www.mustafaakbal.com.tr/arduino-birden-fazla-buton-ile-istenilen-surede-islem-yapma.html
merhaba hocam ,Arduino ile kurduğumuz devrede butona tıklayıp basılı tuttuğumuz zaman kaç saniye basılı tutulduğunu hesaplayan bir kod yazmamızı istedi hocamız .Bu konuda yardımcı olabilir misiniz?
Bu uygulama da onu yapıyor işte. Daha gelişmiş kodlar vardır belki ama basit hali ile 100milisaniye kayıpla hesaplama yapabiliyor basma süresini.
İki röle olduğunu varsayalım arduino ilk açıldığında birinci röle açık olacak yada en son hangi konumda kaldıysa o konumda açılacak butona birkez basınca 2. Röle açılacak birkezdaha basınca tekrar birinci röle açılacak ekranda ise röle bir röle 2 diye yazacak bunu kodlayabilen var mı
Merhabalar.
Nodemcu ile çalışıyorum. Düğmeye basıldığı zaman LCD ekran da düğmeye basılan tarihi ve saati yazdırmak istiyorum ama bir türlü yapamadım. Bu konu da yardımcı olur musunuz?
Mail adresim: farukozgur501@gmail.com
İyi çalışmalar.
Nodemcu ile hiç çalışmadım maalesef.
Yapmış olduğum çalışmada oda temizlendikce butona 5 saniye boyunca basılı tutulacak ve lcd ekran da butona basılan en son tarihi yazdırmaya çalışıyorum. Herhangi bir kod yazamadım.Bu konu da yardımcı olur musunuz?
Birinci butona basınca ilk 3 led yediye kadar yanacak ikinci butona basınca da 2 grup 7’ye kadar yanacak 3 butona basıldığında da 1 butona bastığımızda 2 butona bastığımız sayıları toplayacak öyle yazacak . bunu nasıl yaparız hocam
Şöyle bir yol izleyin.
1. butona basınca 1-7 arasında rastgele sayı tutsun ve o sayıda ledi yaksın. aynı zamanda bu sayıyı bir değişkene aktarsın. sonra 2. butona basınca da aynısını yapsın ve bir değişkene aktarsın. 3. butona basınca iki değişkeni toplayıp gerekli ledleri yaksın.
Merhaba hocam. Su flatörü ile vana aç kapa kontrolü yapmak istiyorum. flatör açtığı zaman bunu buton olarak da düşünebiliriz. Buton açık konumuna geldiği zaman arduino sayaç bir artıyor. Flatör açık konuma geldiği zaman (2 ile 3 saat açık kalıyor) sayaç durmadan sayıyor. Yani 2 ile 3 saat açık kalsa da sayaç tek sayacak bir sistem düşünüyorum ama bir şey bulamıyorum. Videolarda uzun süre açık kalan buton bırakıldığı zaman tek sayan program örnekleri var ama bu da işime yaramıyor. Flatör devreye girdiğinde hemen tek sayacak ve sonraki döngüye kadar bekleyecek bir şey lazım. mekanik düzenekler düşünüyorum. Bu konuda var mı bir fikriniz. teşekkkürler.
Dediğinizi şu şekilde anladım. Flatör açıldığında yani arduinoya bilgi geldiğinde değişken sadece bir artacak ve açık kalıp elektrik geldiği sürece başka artmayacak. Sonra kapandığında yani elektrik kesildiğinde değişken sadece 1 kez artmış olacak. Elektrik geldiği süre boyunca değişken değeri sürekli artmayacak.
Bunu yapmaktaki amacınız sanırım gün içinde kaç kez açılıp kapandığını anlamak. Doğru mudur?