|
Konu Başlığı: Arduino ile ..... Gönderen: malik üzerinde Ocak 21, 2015, 05:02:14 ÖÖ Arduino ile İki adet LED i birbirinden bagimsiz
Birini 1000 ms ile digerini 500 ms ile nasil On-Off yapabilirim. Konu Başlığı: Ynt: Arduino ile ..... Gönderen: Simon (Özay Turay) üzerinde Ocak 21, 2015, 09:42:25 ÖÖ Hayırdır örtmen ödev mi verdi. :D
İki yöntemle yapılabilir: Birincisi ve basit olan delay() yerine millis() kullanarak (Arduino IDE'de File->Examples->02.Digital->BlinkWithoutDelay sketch'inde tek led için nasıl yapıldığı var) iki led için kopyala yapıştır ve birkaç değişkenin ismini değiştirmeyle yapılabilir. Hatta burda yapılmışı var. ;) const int LED1 = 12; const int LED2 = 13; int LED1State = LOW; int LED2State = LOW; unsigned long LED1Millis = 0; unsigned long LED2Millis = 0; const long LED1Interval = 1000; const long LED2Interval = 500; void setup() { pinMode(LED1, OUTPUT); pinMode(LED2, OUTPUT); } void loop() { unsigned long CurrentMillis = millis(); if(CurrentMillis - LED1Millis >= LED1Interval) { LED1Millis = CurrentMillis; if (LED1State == LOW) LED1State = HIGH; else LED1State = LOW; digitalWrite(LED1, LED1State); } if(CurrentMillis - LED2Millis >= LED2Interval) { LED2Millis = CurrentMillis; if (LED2State == LOW) LED2State = HIGH; else LED2State = LOW; digitalWrite(LED2, LED2State); } } İkinci ve daha karışık olan yöntem de interrupt kullanmaktan geçiyor. Bunun için önce interruptların çalışma mantığını öğrenmen gerekiyor. Hazır kütüphane kullanarak veya TCCR1A gibi AVR register'ları kullanılarak yapılabiliyor. Kritik zamanlaması olmayan işlerde millis() kullanmak yeterli gelse de daha kritik zamanlaması olan işlerde interrupt kullanmak gerekebilir. Konu Başlığı: Ynt: Arduino ile ..... Gönderen: malik üzerinde Ocak 21, 2015, 12:00:21 ÖS Her yerde bir LEDi Delay komutu ile açıp kapamayı anlatmışlar.
Multitasking i çok merak ettim. Google de arduino çoklu görev yazdım, multitasking yazdım, birden fazla led yakma falan filan yazmadığım şey kalmadı. Hiç bir şey bulamadım yada anlamadım. Millis() komutunu gördüm Delay a alternatif Diye. Ama olmaz diye düşündeüm geçtim. Bu örneği verdiğin için teşekkürler. Mevcut zamanı farklı değişkenlere atayarak ve ilerleyen zaman sayesinde zaman farklarını hesaplayarak ve buna bağlı her değişkenin koşulu ile bir zaman döngüsünde bir iş yapılabilirken diğer bir zaman döngüsünde aynı anda diğer bir işin yapılabileceğini anladım. Zaman döndüsü dediğim Değişkene atanan zamanın hesabı. Dediğin gibi Millis() LED ler için ve kritik olmayan işlemler için yeterli oluyor ozaman. Birden fazla döngü ve her döngüde aynı anda bir iş yaptırmak karışık heralde. En iyisi kafayı daha fazla karıştırmayalım. Bu yeterli teşekkürler simon. Konu Başlığı: Ynt: Arduino ile ..... Gönderen: i_r_on üzerinde Ocak 21, 2015, 15:01:48 ÖS Bir alternatif olarak counter kullanabilirsin.
Counter'ın D0 biti her clock sinyalinde 0 ile 1 arasında gidip gelirken, D1 biti her iki clock sinyalinde 1 olur. Hatta bu şekilde D2 biti ile 1'e 4, D3 biti ile 1'e 8 oran da yakalayabilirsin. Clock sinyali tek olacağı için timing sıkıntısı da yaşamazsın. Counter kullanmak yerine basitçe flip flop'larla da yapabilirsin. Counter da zatem flip flop'lardan müteşekkil bir devre. Konu Başlığı: Ynt: Arduino ile ..... Gönderen: wizofwor üzerinde Ocak 21, 2015, 15:06:39 ÖS Benzer bir soru stackexchange de de sorulmuş. Cevap olarak donamımsal multiple thread desteği olmadığı için interruptları kullanarak bir şeyler yapmak gerekeceği söylenmiş.
Link ve cevap aşağıda. http://arduino.stackexchange.com/questions/286/how-can-i-create-multiple-running-threads (http://arduino.stackexchange.com/questions/286/how-can-i-create-multiple-running-threads) Alıntı AVR based Arduino's do not support (hardware) threading, I am unfamiliar with the ARM based Arduino's. One way around this limitation is the use of interrupts, especially timed interrupts. You can program a timer to interrupt the main routine every so many microseconds, to run a specific other routine. Şurada da arduino üzerinde multiple thread çalıştıran bir proje var. Kodu incelemedim. O iş sana kalıyor. https://github.com/ivanseidel/ArduinoThread (https://github.com/ivanseidel/ArduinoThread) Konu Başlığı: Ynt: Arduino ile ..... Gönderen: GnoStiC üzerinde Ocak 23, 2015, 00:09:12 ÖÖ https://arduinocode.codeplex.com/releases/view/115258
arduino ile yapmak zorunda degilsen 8 core'lu parallax propeller'i onerebilirim bu is icin. her core ile ayri led surebilirsin. |