Arduino Gecikme İşlevi ve Neden Kullanmamalısınız?

  • Brian Curtis
  • 0
  • 4413
  • 275
reklâm

Nasıl geliştirileceğini öğrenmeye başladığınızda, Arduino ile Başlarken: Yeni Başlayanlar Kılavuzu Arduino ile Başlarken: Yeni Başlayanlar Kılavuzu Arduino, esnek, kullanımı kolay donanım ve yazılımı temel alan açık kaynaklı bir elektronik prototip platformudur. Sanatçılar, tasarımcılar, hobiler ve etkileşimli nesneler veya ortamlar yaratmak isteyen herkes için tasarlanmıştır. Arduino için Arduino Nedir ve Bununla Ne Yapabilirsiniz? Arduino Nedir ve Bununla Ne Yapabilirsiniz? Arduino dikkat çekici bir küçük elektronik cihazdır, ancak daha önce hiç kullanmadıysanız, tam olarak ne olduklarını ve bunlarla ne yapabilirsiniz? Muhtemelen bu şekilde biraz çalışan bir ürün yaptınız:

Arduino'nuza bağlı tek bir LED ışık olacaktır. Bu her saniye ya da öylesine kapanır ve kapanır ve Arduino kapanana kadar devam eder. Bu “Selam Dünya” Arduino programı, ve sadece birkaç satır kodun somut bir şey yaratabileceğini mükemmel bir şekilde gösteriyor.

Ben de kullandığına bahse girerim. gecikmesi () ışığın açılıp kapanması arasındaki süreleri belirleme işlevi. Ama işte mesele: Gecikme, Arduino'nun nasıl çalıştığını gösteren temel gösterimler için kullanışlı olsa da, gerçekte gerçek dünyada kullanmamalısınız. İşte nedeni - ve bunun yerine ne kullanmalısınız.

Gecikme () Nasıl Çalışır?

Yol gecikmesi () fonksiyon çalışmaları oldukça basittir. Tek bir tamsayı kabul ediyor Bilgisayar Programcılığının Temelleri 101 - Değişkenler ve Veri Tipleri Bilgisayar Programcılığının Temelleri 101 - Değişkenler ve Veri Tipleri Nesneye Yönelik Programlama hakkında biraz önce konuştuk ve konuştuk, kendi adının nereden geldiğini düşündüm Programlamanın mutlak temelini dile özgü olmayan bir şekilde. Bu… (veya sayı) argümanı. Bu sayı, programın bir sonraki kod satırına geçene kadar beklemesi gereken süreyi (milisaniye cinsinden ölçülür) gösterir..

Ama sorun şu ki, gecikmesi () işlev, programınızı bekletmek için iyi bir yol değildir, çünkü “bloke etme” fonksiyon.

Engelleme ve Engelleme Olmayan İşlevler Arasındaki Fark

Engelleme işlevlerinin neden kötü olduğunu göstermek için, bir mutfakta iki farklı şef hayal etmenizi istiyorum: Henry Engelleme, ve Eduardo NonBlocking. Her ikisi de aynı işi yapar, ancak çılgınca farklı şekillerde.

Henry kahvaltı yaptığında ekmek kızartma makinesine iki tur ekmek yerleştirerek başlar. Sonunda ne zaman ping, ve ekmek altın kahverengi çıkar, Henry tabağa koyar ve iki yumurtayı bir tavaya kırar. Yine, yağ patlarken hazır duruyor ve beyazlar sertleşmeye başlıyor. İşleri bittiğinde, onları kapatıyor ve iki döküntü domuz pastırması pişirmeye başlıyor. Yeterince çıtır çıtır olduklarında, kızartma tavasını çıkarır, tabağa koyar ve yemeye başlar.

Eduardo biraz farklı şekilde çalışıyor. Ekmeği kızartırken yumurtalarını ve pastırmasını kızartmaya başladı bile. Bir öğenin diğerine geçmeden önce pişirme işlemini bitirmesini beklemek yerine, birden fazla öğe pişiriyor eş zamanlı olarak. Sonuçta Eduardo, kahvaltı yapmak için Henry’den daha az zaman alıyor - ve Henry Blocking’in işi bittiğinde, kızarmış ekmek ve yumurtalar soğudu..

Aptalca bir benzetme, ama konuyu gösteriyor.

bloke etme fonksiyonlar, bir programın belirli bir iş tamamlanana kadar başka bir şey yapmasını önler. Eğer birden çok istiyorsan eylemler aynı anda olmak için kullanamazsınız gecikmesi ().

Özellikle, uygulamanız sürekli olarak bağlı sensörlerden veri almanızı gerektiriyorsa, gecikmesi () fonksiyonu, kesinlikle durakladığı gibi her şey.

neyse ki, gecikmesi () Arduino için kod yazarken programınızı bekletmenin tek yolu bu değil.

Millis () ile tanışın

Millis () işlevi tek bir görevi yerine getirir. Çağrıldığında, uzun veri türü) Program ilk başlatıldığından bu yana geçen milisaniye sayısı. Peki, bu neden faydalı??

Çünkü basit matematik biraz kullanarak, kolayca yapabilirsiniz “zaman” programın çalışma şeklini etkilemeden yönlerini açıklar. Aşağıdaki, millis () 'in nasıl çalıştığının temel bir gösterimidir. Gördüğünüz gibi, program LED ışığı 1000 milisaniye boyunca (bir saniye) açar ve sonra kapatır. Ama en önemlisi, bunu engellemeyecek şekilde yapıyor.

Şimdi Arduino ile nasıl çalıştığına bakalım..

Resmi Arduino dokümantasyonundan birisine dayanan bu program, daha önce kaydedilen zamanı mevcut zamandan çıkartarak çalışır. Kalan (yani, en son kaydedilen zamandan beri geçen süre) aralıktan büyükse (bu durumda, 1000 milisaniye), program günceller. geçmiş zaman geçerli saate göre değişebilir ve LED'i açar veya kapatır..

Ve bloke edici olmadığı için, ilk önce bunun dışında bulunan herhangi bir kod if ifadesi normal çalışmalı.

Basit değil mi? Değişkeni nasıl yarattığımıza dikkat edin şimdiki zaman olarak imzasız uzun. bir imzasız değer basitçe asla olumsuz olamayacağı anlamına gelir; Bunu, depolayabileceğimiz maksimum sayı daha büyük olacak şekilde yapıyoruz. Varsayılan olarak, sayı değişkenleri imzalanır, yani bir “bit” Bu değişken için hafızanın değeri, değerin pozitif mi yoksa negatif mi olduğunu depolamak için kullanılır. Sadece pozitif olacağını belirterek, oynayacağımız fazladan bir oyunumuz var..

Kesmeler

Şimdiye kadar Arduino programımızda zamanlamaya yaklaşmanın bir yolunu öğrendik. gecikmesi (). Fakat başka, çok daha iyi bir yol var, ama daha karmaşık: kesmeler. Bunlar, Arduino programınızı tam olarak zamanlamanıza ve hızlı bir şekilde harici bir girdiye yanıt vermenize izin verme avantajına sahiptir. eşzamanlı olmayan tavır.

Bu, ana programla birlikte çalıştığı ve kodunuzun akışını kesintiye uğramadan sürekli olarak bir olayın gerçekleşmesini beklediği anlamına gelir. Bu, Arduino işlemcisinin performansını etkilemeden olaylara verimli şekilde yanıt vermenize yardımcı olur.

Bir kesme tetiklendiğinde, programı durdurur veya genellikle bir işlev olarak bilinen bir işlevi çağırır. Kesme İşleyicisi veya bir Hizmet Rutini Kes. Bu sonuçlandığında, program daha sonra ne olduğuna geri döner.

Arduino'ya güç veren AVR yongası yalnızca donanım kesintilerini destekler. Bunlar bir giriş pimi yüksekten düşüğe gittiğinde veya Arduino'nun yerleşik zamanlayıcıları tarafından tetiklendiğinde meydana gelir..

Kriptik geliyor. Kafa karıştırıcı, hatta. Ama öyle değil. Nasıl çalıştıklarını ve gerçek dünyada kullanılmadıklarını görmek için Arduino dokümantasyonuna bakın..

Engellenme

kullanma Millis () kuşkusuz, kullanımına göre biraz daha fazla çalışma gerektiriyor gecikmesi (). Ama güven bana, programların bunun için sana teşekkür edecek, ve Arduino’da onsuz çoklu görev yapamazsın..

Bir örnek görmek istiyorsanız Millis () Gerçek dünya Arduino projesinde kullanılan James Bruce'un Arduino Gece Lambası ve Gündoğumu Alarmı'nı inceleyin. Arduino Gece Lambası ve Gündoğumu Alarmı Projesi Arduino Gece Lambası ve Gündoğumu Alarmı Projesi Bugün, rahatsız edici bir gürültü yapan makineye başvurmadan sizi yavaşça ve yavaşça uyandıracak bir gündoğumu çalar saati yapacağız..

Dikkat etmemiz gereken başka engelleme işlevi var mı? Aşağıdaki yorumlarda bana haber verin, sohbet edelim.

Fotoğraf Kredisi: Arduino (Daniel Spiess), Şef (Ollie Svenson)




Henüz no comments

Modern teknoloji hakkında basit ve uygun fiyatlı.
Modern teknoloji dünyasında rehberiniz. Her gün bizi çevreleyen teknolojileri ve araçları nasıl kullanacağınızı ve Internet'te ilginç şeyleri nasıl keşfedeceğinizi öğrenin.