İçindekiler:

Arduino - Periyodik Kesinti: 4 Adım
Arduino - Periyodik Kesinti: 4 Adım

Video: Arduino - Periyodik Kesinti: 4 Adım

Video: Arduino - Periyodik Kesinti: 4 Adım
Video: Elimi kestim. Demir kanaması deneyi #kimya #shorts 2024, Temmuz
Anonim
Arduino - Periyodik Kesinti
Arduino - Periyodik Kesinti

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: