Isi kandungan:

Arduino - Selang Berkala: 4 Langkah
Arduino - Selang Berkala: 4 Langkah

Video: Arduino - Selang Berkala: 4 Langkah

Video: Arduino - Selang Berkala: 4 Langkah
Video: Sensor Ultrasonic HCSR04 Pengukur Jarak - Tutorial Arduino Bahasa Indonesia 2024, November
Anonim
Arduino - Gangguan Berkala
Arduino - Gangguan Berkala

Instructable ini adalah mengenai penggunaan gangguan berkala untuk masa dalam program Arduino. Ini adalah langkah untuk pengaturcara Arduino yang baru tahu bahawa Arduino dapat melakukan lebih banyak perkara, tetapi tidak tahu bagaimana mewujudkannya.

Sekiranya terdapat masalah prestasi, saya mengandaikan bahawa anda menggunakan satu atau lebih fungsi kelewatan (). Caranya adalah dengan menyingkirkan kelewatan fungsi dan menggantikan gangguan. Fungsi delay () memaksa Arduino tidak melakukan apa-apa sementara menunggu kelewatan () selesai. Menggunakan gangguan membolehkan program anda melakukan perkara lain sementara menunggu akhir penundaan. Biasanya terdapat sejumlah besar waktu mati yang tidak digunakan yang dapat digunakan untuk perkara lain ketika menggunakan penundaan (). Menggunakan gangguan dapat menyelesaikan masalah ini.

Langkah 1: Pengendali Ganggu

1. Tambahkan pengendali gangguan ke program anda. Cukup salin dan tampal di suatu tempat di atas persediaan ();

const tidak ditandatangani panjang TIMER0_COUNT = 500; // Selang pemasa 500 msec

// TIMER0 interrupt handler volatile bool time = false; ISR (TIMER0_COMPA_vect) {kiraan panjang yang tidak ditandatangani statik = 0; jika (kiraan ++> TIMER0_COUNT) {kiraan = 0; masa = benar; // masa ditetapkan menjadi benar setiap TIMER0_COUNT ms} // (masa perlu dihapus dalam rutin utama)}

Langkah 2: Tetapkan Selang Masa Berkala

2. Tetapkan selang masa. Ini piggyback rutin menjadi gangguan TIMER0, yang disala setiap ~ 1 msec.

"Selang" anda ialah bilangan gangguan TIMER0 untuk diproses. Setiap selang ~ 1 msec, jadi anda benar-benar menetapkan berapa TIMER0 gangguan yang akan dikira sebelum mengaktifkan selang anda. IOW, tetapkan TIMER0_COUNT pemboleh ubah kepada seberapa banyak milisaat yang anda mahu tunggu. Contohnya, gunakan 500 selama satu setengah saat. Gunakan 3000 selama 3 saat.

Langkah 3: Mengganggu Permulaan

3. Tambahkan kod "inisialisasi TIMER0" ke kaedah persediaan () anda. Sekali lagi, salin dan tampal dalam persediaan ().

// *** Permulaan TIMER0 ***

cli (); // matikan semua gangguan TIMSK0 = 0; // matikan pemasa0 untuk jitter yang lebih rendah OCR0A = 0xBB; // kiraan gangguan sewenang-wenang TIMSK0 | = _BV (OCIE0A); // piggy kembali ke mengganggu sei (); // menghidupkan gangguan kembali

Langkah 4: Tempat Menambah Kod Anda

4. Tambahkan kod "pemeriksaan masa" ke kaedah gelung anda (). Salin dan tampal dalam gelung ().

sekiranya (masa) {

masa = salah; // buat sesuatu di sini}

The "time = false;" garis adalah penting. Tanpa baris ini baris "lakukan sesuatu di sini" akan dilaksanakan setiap kali program melaksanakan gelung ().

Sudah tentu, anda mengganti aktiviti anda sendiri dalam baris "buat sesuatu di sini". Mulakan dengan mencetak beberapa teks atau memancarkan LED.

Anda sudah selesai!

Disyorkan: