Delay kullanmadan Yanıp Sönme
Delay kullanmadan Yanıp Sönme. Bazen bir kerede iki şey yapmalısın. Örneğin, bir düğmeyi okurken bir LED’i yanıp sönmek isteyebilirsiniz. Bu durumda, delay()
işlevini kullanamazsınız, çünkü Arduino programınızı delay()
sırasında duraklatır. Arduino duraklatılırken düğmeye basılırsa delay()
nin geçmesi beklenir, programınız düğmeye basar.
Bu örnekte delay()
kullanılmadan bir LED’in nasıl yanıp söndüğü gösterilmiştir. LED’i açar ve ardından zamanı not eder. Ardından, loop()
ile her seferinde, istenen yanıp sönme süresinin geçip geçmediğini kontrol eder. Varsa, LED’i açar veya kapatır ve yeni saati not eder. Bu şekilde LED sürekli olarak yanıp sönerken, çizim çalışması asla tek bir talimatta kalmaz.
Bir benzeşim mikrodalgada bir pizzayı ısıtıyor ve bazı önemli e-postaları bekliyordu. Pizzayı mikrodalgaya koyup 10 dakikaya ayarla. delay()
kullanarak yapılan benzeşim, zamanlayıcının sıfıra ulaşana kadar zamanlayıcının 10 dakikaya kadar geri sayımını izleyerek mikrodalga fırının önüne oturacaktır. Önemli e-posta bu süre zarfında gelirse kaçırırsınız.
Gerçek hayatta yaptığınız şey pizza açmak ve sonra e-postanızı kontrol etmek ve sonra belki başka bir şey yapmak (çok uzun sürmez!) Ve sık sık her zaman mikrodalgaya geri döneceksiniz. zamanlayıcı sıfıra ulaştıysa, pizzanızın bittiğini gösterir. Bu öğreticide benzer bir zamanlayıcıyı nasıl ayarlayacağınızı öğreneceksiniz.
Gerekli Donanım
- Arduino veya Genuino
- LED
- 220 ohm direnç
Devre
Devreyi kurmak için, direncin bir ucunu kartın 13 pinine bağlayın. LED’in uzun ayağını (anot olarak adlandırılan pozitif bacak) direncin diğer ucuna bağlayın. Yukarıdaki şemada ve aşağıdaki şemada gösterildiği gibi LED’in kısa ayağını (katot olarak adlandırılan negatif bacak) tahta GND’ye bağlayın.
Çoğu Arduino ve Genuino anakartında zaten kartın üzerinde 13 pimine bağlı bir LED var. Bu örneği donanım takılı değilken çalıştırırsanız, LED’in yanıp söndüğünü görmelisiniz. Devreyi kurduktan sonra kartınızı bilgisayarınıza takın, Arduino Yazılımını (IDE) başlatın ve aşağıdaki kodu girin.
Kod
Aşağıdaki kod, bir taslak LED’i yanıp sönmeye başladığında, kurulu mevcut taslağını çalıştırmaya başladığından beri milisaniye sayısını veren bir komut olan millis()
işlevini kullanır.
/* Gecikme olmaksızın göz kırp Dijital bir pime bağlı bir ışık yayan diyotu (LED) açar ve kapatır, delay () işlevini kullanmadan. Bu, diğer kodun LED koduyla kesintiye uğramadan aynı süre. Devre: - Dahili LED'i kullanın. - Not: Arduinoların çoğunda kontrol edebileceğiniz yerleşik bir LED bulunur. UNO'da MEGA ve SIFIR, pim 6'da MKR1000 üzerinde dijital pim 13'e bağlanır. LED_BUILTIN hangi kartın kullanıldığından bağımsız olarak doğru LED pinine ayarlanır. Yerleşik LED'in hangi pime bağlı olduğunu bilmek istiyorsanız Arduino modelinde, tahtanızın Teknik Özelliklerini kontrol edin: https://www.arduino.cc/en/Main/Products 2005'de oluşturuldu David A. Mellis tarafından değiştirildi 8 Şub 2010 Paul Stoffregen tarafından 11 Kasım 2013'te değiştirilmiştir. ile Scott Fitzgerald değiştirilmiş 9 Ocak 2017 Arturo Guadalupi tarafından Bu örnek kod kamu malıdır. http://www.arduino.cc/en/Tutorial/BlinkWithoutDelay */ // sabitler değişmeyecek. Pin numarası ayarlamak için burada kullanılır: const int ledPin = LED_BUILTIN;// the number of the LED pin // Değişkenler değişecek: int ledState = LOW; // ledState LED'i ayarlamak için kullanılır // Genellikle, zaman tutan değişkenler için "unsigned long" kullanmalısınız // Bir int saklamak için değer çok hızlı bir şekilde büyür unsigned long previousMillis = 0; // son zaman depolanacak, LED güncellendi // sabitler değişmeyecek: const long interval = 1000; // yanıp sönecek aralık (milisaniye) void setup() { // dijital pini çıkış olarak ayarlayın: pinMode(ledPin, OUTPUT); } void loop() { // burada sürekli çalışması gereken kodları koyarsın. // LED'in yanıp sönme zamanı olup olmadığını kontrol edin; eğer fark varsa // şu anki zaman ile en son yanıp sönen LED arasındaki LED daha büyüktür // LED'i yanıp sönmek istediğiniz aralık. unsigned long currentMillis = millis(); if (currentMillis - previousMillis >= interval) { // son kez yanıp sönen LED ışığını koru previousMillis = currentMillis; // LED kapalıysa açın ve tersini yapın: if (ledState == LOW) { ledState = HIGH; } else { ledState = LOW; } // LED'i değişkenin ledState ile ayarlayın: digitalWrite(ledPin, ledState); } }
Kaynak:arduino.cc
merhaba bu komutu 2 ayrı ledi istedigim surelerde açıp kapatmak için istiyorum ben delaylı ornegini yaptım siz milisle yapabilirmisiniz.5sn yanık kalacak sonra 1 sn ikisi kapalı kalıp digeri yanacak
digitalWrite(11, HIGH);
delay(5000);
digitalWrite(11, LOW);
delay(1000);
digitalWrite(12, HIGH);
delay(5000);
digitalWrite(12, LOW);
delay(1000);
2 ayrı LED’i kontrol aynı zamanda ayrı ayrı kontrol etmek için millis kullanımı şarttır. Çünkü delay dediğin zaman programın tamamı için geçerlidir. İnternetteki örneklere bakaral çözmeye çalış çözemezsen yine yardımcı olurum ama önce biraz çabala.