arduino ide de 2. sürekli fonksiyon kullanabilirmiyiz?

Kodla Büyü

hastasıyız dede

Hiperaktif Üye
Hiperaktif
Mesajlar
2,785
arduino ide de bildiğiniz gibi void loop fonksiyonu sürekli çalışan kısım, peki bu sürekliden bitane daha lazım olursa ne yapacağız.

void loop birdaha kullanılamıyor ve kendimiz fonksiyon oluştursak sürekli çalışmıyor.

yani oluşturacağımız yeni fonksiyon void loop ile aynı anda sürekli çalışsın istiyorum.
 
Arduino multithreading olmadığı için aynı anda iki işlem yapamaz. Yani istediğinizi normal yollardan yapamaz. Diğer fonksiyonunuz her neyse loop döngüsü içerisinde eritmeniz ya da interupt (kesmeler) konusunu inceleyip, bir çözüm bulabilir miyimi araştırmanız gerekiyor.
 
yapmanız gereken timer ları kullanmak ikinci bir loop gibi çalışır ve yineleme süresini siz ayarlarsınız arkadaşın dediği gibi kesmeler mantığıyla çalışır aslında aynı şey
IDE kütüphanelerde timerone diye aratırsan bulursun kullanımı da gayet basit. Bildiğim kadarıyla unoda 1 megada 3 adet timer tanımlayabiliyorsun.

#include <TimerOne.h>

setup içerisinde
Timer1.initialize(X); // x milisaniyede tetiklenmesi
Timer1.attachInterrupt(isim); //ikinci loopuna verdiğin isim

void isim (){

ikinci bir loop ve komutları

}
 
kesmeler ıle yapabılıyorsun ama yapmayı dusundugunuz olay ne cunku mantık olarak dur ve durdugun yerden devam et seklınde calısıyor kısa ıslemlerde daha kolay oluyor orneklemek gerekırse

ısıyı nemı sureklı kontrol edersın ama 4 saate bır motoru cevırtırsın gıbı mesela

ne yapmayı dusundugunu paylasırsan fıkır yurutulmesı daha kolay olacaktır
 
Bilgiler için teşekkür ediyorum, asansör projem var, 3 buton ile bir motoru kontrol edecem, butonlar if döngüsü ilede kontrol edilebilir ama if kullanınca arada bir butona basma işlemini yakalayamıyor. While ile olana kadar bekle yapınca butona basma işlemini hiç kaçırmıyor ama bu seferde butonlar birbirinden bağımsız olmuyor, butonların birbirinden bağımsız olması için 3 adet ayrı sürekli fonksiyon lazım ama elimizde 1 tane void loop var. Sıkıntım bu.
 
Switch (ifade) {

Case sabit1:

//kodlar

Break;

Case sabit2:

//kodlar

Break;

Default:

//kodlar

Break;

}
bır dene hocam anlasılıyor sanırım

hocam ıncelememıstım daha once asansor nette orneklerı var ama ıf kullanılarak bır bakın ıstersenız google amca yardım sever bu konuda kodlarda paylasılmıs
 
yazdıgınız program satır satır ilerler hocam. void loop da satır satır ilerler ve başa döner. anladıgım kadarı ile çözüm şu olabilir;

void loop
{
fonksiyon1(değişkenler);
fonksiyon2(değişkenler);
}
fonksiyon1 (değişkenler)
{
işlemler
}
fonksiyon2(değişkenler)
{
işlemler
}

bu şekilde 2 ayrı tanımladıgınız fonksiyonu sürekli döngü içinde çalıştırabilirsiniz...

umarım anlamışımdır :)
 
Mrb.

Soğuk depoda kapağa montajladığım,kapak açık iken iletimi kesen,kapalı iken iletimde olan bir manyetik sensör takılı.

1.röle kapak açıldığında on olacak

2. 3600 sn bu durumda bekleyecek

3.süre sonunda buzzer devreye girecek

4.2500 sn sonra röle off olacak ve buzzerde röleden 5000 sn sonra off olacak.

Tabiki bu sıralamanın hangi aşamasında olursa olsun kapak sensörü iletime geçtiği anda döngünün neresinde olursa olsun duracak ve başa dönüp hazır bekleyecek.

Komut listesini çözemedim yardımınızı bekliyorum.böyle iki işi yapabilecek bir program videosu veya buna benzer ek bir yöntem varsa yaparsanız sevinirim.
 
Geri
Üst