Şimdi Ara

Arduinoda aynı anda 2 ya da daha fazla fonksiyon/işlem yürütmek.??

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
6
Cevap
1
Favori
1.468
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Peşin söyleyeyim. Ardu konusunda ağır kabızım. Karşınızda zeytin odunu varmış gibi düşünün    


    Başlıkta da dediğim gibi: Arduinoda aynı anda 2 ya da daha fazla fonksiyon/işlem yürütmek mümkün müdür?


    Örneğin;

    20 dakika boyunca bir output portunu aktif tutmak istiyorum. Ancak herhangi bir şekilde bir input portundan sinyal alınırsa işlem duracak. Sonra kaldığı yerden devam edecek.


    Biraz daha açayım.

    Diyelim output portunun biri, motorumu kontrol eden röleyi açıyor/kapıyor. Motor 20 dakika çalışmak durumunda. Ancak ben herhangi bir kalıcı olmayan butonla inputa bir sinyal verdiğimde motor duracak, başka bir input portunda motoru tekrar çalıştıran buton bağlı olacak. Bir başka input portuna bağlı buton, motor yönünü değiştiren zamazingoyu aktif eden outputu tetikleyecek falan fıstık. Motora yol veren butona tekrar bastığımda kaldığı süreden devam edecek. gibi gibi gibi... Bunu kıvıramadım bi türlü.


    Yani 20dk 1200sn eder. (20 dk örnek sadece)

    Motor çalıştıktan sonra "delay (1200000)" dersem saçma olur. Zira delay bir fonksiyondur ve normal şartlar altında parantez içindeki değeri tamamlayana kadar bu fonksiyon çalışır.

    Peki bu fonksiyon çalışırken, aynı anda inputtan sinyal alma ya da outputtan sinyal çıkma şansımız var mıdır? (gerçi benim mantığıma göre olamaz ya) Ya da bunun yolu nedir.?



    Kafamın bastığı, yapabileceğimi düşündüğüm tek şey; kurduğum döngü içine bir sayaç yerleştirmek, istediğim işlemleri yapacak komut bloklarının/fonksiyonların ve kontrollerin ne kadar sürede döndüğünü bi şekilde öğrenip döngü değişkenine ona göre bir bitiş değeri vermek. Eğer kontrollerde döngüyü kırarsam da döngünün başlangıç değerini sayaç değeri yapmak ve böyle böyle bitiş değerine kadar gitmek.


    Ya da daha pratik fikri olan varsa müteşekkir olurum.

    Ha bu arada; ardu konusunda kabızım dedim, evet, ama syntax'ı 

    Yoksa ufaktan pascal ve gw geçmişi de vardır bu amcanızın.


    Uzatmadan herkese teşekkür.








  • while(4800){

    delay(250);

    //çeyrek saniyede bir yapılacak işlem

    }

    //1200 saniyede bir yapılacak işlem

  • limbesh kullanıcısına yanıt

    Hmm, araya bir de kontrol sayacı eklersem, döngü nerede kırılır saptar, sonra da yola devam ederim.


    Aslında benim de demek istediğim benzeri idi. Kodlarım 1ms'de dönüyorsa while'a 1200k, 1 sn'de dönüyorsa 1200 vermek. Ama şansa iş o kadar hassas değil. 20dk'da 1dk sapsa da sorun yok.

    İyi fikir.


    "Döngüyü saniyelere bölmek ve her saniyede bir müdahale edilip edilmediğini kontrol etmek."


    Çok basitmiş aslında.

    Nassı düşünemedim ki... Ağır paslanmışım yahu.  


    Teşekkür.

  • Merhaba. Algoritma altyapınız varsa syntax sorunlarını dert etmenize çok da gerek yok. millis() ve micros() fonksiyonlarını araştırırsanız işi çözersiniz bence. Hem kendiniz uğraşarak daha çok keyif alırsınız.

    @limbesh'in önerisi de gayet pratikmiş ama delay() fonksiyonunu hiç kullanmadan program yazmak isterseniz millis() ve micros()'a göz atın. Takıldığınız yerde kodları paylaşırsanız da yardımcı olmaya çalışırım. İyi akşamlar. @rabitelli

  • Merhaba. millis fonksiyonu ile daha rahat olur. Ancak illa delay kullanacağım derseniz start ve stop butonlarını kesme şeklinde tanımlayın.

  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.