İçindekiler:
- Adım 1: Kesinti İşleyicisi
- Adım 2: Periyodik Zaman Aralığını Ayarlayın
- 3. Adım: Başlatmayı Kesinti
- Adım 4: Kodunuzu Nereye Ekleyebilirsiniz?
Video: Arduino - Periyodik Kesinti: 4 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:19
Bu Eğitilebilir Tablo, Arduino programlarında zamanlama için periyodik bir kesinti kullanmakla ilgilidir. Bu, Arduino'nun daha fazlasını yapabileceğini bilen, ancak bunun nasıl gerçekleşeceğini tam olarak bilmeyen, tomurcuklanan bir Arduino programcısı için bir adımdır.
Bir performans sorunu varsa, bir veya daha fazla delay() işlevi kullandığınızı varsayıyorum. İşin püf noktası, delay() işlev(ler)inden kurtulmak ve bunun yerine bir kesme yapmaktır. Delay() işlevi, gecikmenin() tamamlanmasını beklerken Arduino'yu hiçbir şey yapmaya zorlar. Bir kesme kullanmak, programınızın gecikmenin bitmesini beklerken başka şeyler yapmasına izin verir. Delay() kullanılırken genellikle başka şeyler için kullanılabilecek büyük miktarda kullanılmayan ölü zaman vardır. Bir kesme kullanmak bu sorunu çözer.
Adım 1: Kesinti İşleyicisi
1. Kesme işleyicisini programınıza ekleyin. Setup()'ın üzerinde bir yere kopyalayıp yapıştırmanız yeterlidir;
const imzasız uzun TIMER0_COUNT = 500; // 500 msn zamanlayıcı aralığı
// TIMER0 kesme işleyicisi uçucu bool zamanı = false; ISR(TIMER0_COMPA_vect) { statik imzasız uzun sayı = 0; if (++say > TIMER0_COUNT) { sayı = 0; zaman = doğru; // time her TIMER0_COUNT ms'de true olarak ayarlanır } // (ana rutinde zamanın temizlenmesi gerekir) }
Adım 2: Periyodik Zaman Aralığını Ayarlayın
2. Zaman aralığını ayarlayın. Bu rutin, her ~1 msn'de bir tetiklenecek şekilde ayarlanan TIMER0 kesmesine geri döner.
"Aralığınız", işlenecek TIMER0 kesintilerinin sayısıdır. Her aralık ~1 msn'dir, bu nedenle aralığınızı etkinleştirmeden önce gerçekten kaç TIMER0 kesintisinin sayılacağını ayarlarsınız. IOW, TIMER0_COUNT değişkenini beklemek istediğiniz kadar milisaniyeye ayarlayın. Örneğin, bir saniyenin yarısı için 500 kullanın. 3000'i 3 saniye boyunca kullanın.
3. Adım: Başlatmayı Kesinti
3. "TIMER0 başlatma" kodunu setup() yönteminize ekleyin. Yine, setup() içine kopyalayıp yapıştırın.
// *** TIMER0 başlatma ***
kli(); // tüm kesmeleri kapat TIMSK0 = 0; // daha düşük titreşim için timer0'ı kapatın OCR0A = 0xBB; // keyfi kesme sayısı TIMSK0 |= _BV(OCIE0A); // kesmeye geri dön sei(); // kesmeleri tekrar aç
Adım 4: Kodunuzu Nereye Ekleyebilirsiniz?
4. "zaman denetimi" kodunu loop() yönteminize ekleyin. Döngü () içinde kopyalayıp yapıştırın.
eğer (zaman) {
zaman = yanlış; // burada bir şeyler yap }
"zaman = yanlış;" hat önemlidir. Bu satır olmadan, program loop()'u her çalıştırdığında "burada bir şeyler yapın" satır(lar)ı yürütülür.
Tabii ki, "burada bir şeyler yap" satırında kendi aktivitelerinizi değiştiriyorsunuz. Bir metin yazdırarak veya LED'i yanıp sönerek başlayın.
Sen bittin!
Önerilen:
Arduino Araba Geri Geri Park Uyarı Sistemi - Adım Adım: 4 Adım
Arduino Araba Geri Geri Park Uyarı Sistemi | Adım Adım: Bu projede Arduino UNO ve HC-SR04 Ultrasonik Sensör kullanarak basit bir Arduino Araba Geri Park Sensörü Devresi tasarlayacağım. Bu Arduino tabanlı Araba Ters uyarı sistemi, Otonom Navigasyon, Robot Mesafesi ve diğer menzil r
Adım Adım Arduino Uno ile Akustik Kaldırma (8 adım): 8 Adım
Arduino Uno ile Akustik Kaldırma Adım Adım (8 adım): ultrasonik ses dönüştürücüler L298N erkek dc pinli Dc dişi adaptör güç kaynağı Arduino UNOBreadboardBu nasıl çalışır: İlk olarak, Arduino Uno'ya kod yüklersiniz (dijital ile donatılmış bir mikrodenetleyicidir) ve kodu dönüştürmek için analog bağlantı noktaları (C++)
Arduino Kullanan RC Paletli Robot - Adım Adım: 3 Adım
Arduino Kullanan RC Paletli Robot – Adım Adım: Merhaba arkadaşlar, BangGood'tan başka bir harika Robot kasasıyla geri döndüm. Spinel Crux V1 – Hareket Kontrollü Robot, Spinel Crux L2 – Robotik Kollu Arduino Al ve Yerleştir Robotu ve The Badland Braw
VHDL'de Programlanabilir Kesinti Denetleyicisi Tasarımı: 4 Adım
VHDL'de Programlanabilir Kesinti Denetleyicisi Tasarımı: Bu blogda aldığım yanıtlardan çok etkilendim. Arkadaşlar, blogumu ziyaret ettiğiniz ve bilgilerimi sizinle paylaşmam için beni motive ettiğiniz için teşekkür ederim. Bu sefer, tüm SOC'lerde gördüğümüz başka bir ilginç modülün tasarımını sunacağım -- Interrupt C
ABD Arduino Kesinti LED Parlaklığı: 6 Adım
USA Arduino Interrupt LED Parlaklığı: Bu projede bir potansiyometre ve bir buton ile Kırmızı, Beyaz ve Mavi LED ekran oluşturacağız. Kulağa kolay geliyor, ancak bunun için kesmeleri de kullanacağız. Yani butona basıldığında potansiyometreden gelen değer ayarlanacak