Arduino kodlamada söyle bir sorunu nasil asabilirim? Örnegin su asagidaki kod 'da Gelenveri x olursa sinyalver1(); fonksiyonu 100 kere ledi yakip söndürecek eger y olursa sinyalver2(); 5 kere gerekli ledi yakip söndürecek. Ama Gelenveri x ve sinyalver1(); fonksiyonu devreye girdi , ben hemen y degerini gönderiyorum ama sinyalver1(); funksiyonu bitinceye Kadar, sinyalver2(); funksiyonu devreye girmiyor. Yani bir bir funksiyonu calistirirken , baska bir funksiyonu nasil devreye sokabilirim? Bu isleme c#'da thread fonksiyon calistirma deniyor.Böyle bir islem mümkünmü? int ledpin =11; // LED connected to pin 13 or onboard LED int ledpin2 =9; void setup() { pinMode(9, OUTPUT); pinMode(11, OUTPUT); Serial.begin(9600); } void loop() { if (Serial.available() > 0) { // Serialden gelen veri geliyorsa int Gelenveri = Serial.read(); // Bu veriyi Gelenveri degiskenine aktar switch(Gelenveri) { case ‘x’: Serial.println(“Led 10 kere sinyal veriyor”); sinyalver1(100); break; case ‘y’: Serial.println(“Led 5 kere sinyal veriyor”); sinyalver2(5); break; default: Serial.println(“Belirlenmeyen veri geldi!”); } } } void sinyalver1(int keyCode) { for(int x=0; x
dediğin yapılırda uygulamaya göre değişir standart bir yolu yok. real time operating sistem de kuramayacağına göre bunu kodun içinde halletmek yoluna gideriz. mesela serialden bir karakter bekliyorsun işareti alıyorsun ve bir delayın var diyelim 5sn filan ama 5sn boyunca seriali kontrol edemiyorsun ama yapması mumkun, direk 5sn beklemek yerine 10ms lik bekleme koyarsın bunu da sayarsın ve br yandan da seriali okursun 5sn dolana kadar böylece her 10ms debir serial portu da kontrol edersin filan.
sinyalver yerine aşağıdakine benzer bir rutin işini görür if (delaysay<=100){ digitalWrite(ledpin2, HIGH); } if(delaysay>100){digitalWrite(ledpin2, LOW); } delay(10); delaysay=delaysay+1; if(delaysay>200){delaysay=0;}
örnegin x gönderecegim ve sinyalver1(100); devreye girecek ledpin 100 kere sinyal vermeye baslayacak, bu funksiyon bitmeden ben hemen y gönderip sinyalver2(5); funksiyonunu devreye sokup ledpin2 ninde calismasini saglamak istiyorum.yani bir funksiyon sonlanmadan diger funksiyonunda calismasini istiyorum. Yani iki funksyionu calistirabilirmiyim? Multitasking olayina baktim ama birsey cikaramadim!!
olmaz diye kestirip atmak olmazda arduino due de scheduler var deneysel ama. uno için direk hemen kullanılacak birşey yok rtos denemeleri varda o işler çok başka şekilde hallediliyor bitmiş projelerde filan kullanılabilir. çünkü baştan taskların belli olması lazım ve her taskın bir öncelik ve zamanlamasını ayarlamak lazım hiç kolay ve garanti olur bir şey değil. şurada uno için adam yapmış bişeyler ama dediğim gibi proje bittikten sonra her taskı ayırmak gerek http://chrisbarlow.wordpress.com/2012/09/13/reliable-task-scheduling-with-arduino-avr/
birde senin istediğin led blinkleri filan sub main içinde değişkenlerle halledebilirsin benim verdiğim örnek işe yarar o bakımdan.