สารบัญ:

Arduino - การขัดจังหวะเป็นระยะ: 4 ขั้นตอน
Arduino - การขัดจังหวะเป็นระยะ: 4 ขั้นตอน

วีดีโอ: Arduino - การขัดจังหวะเป็นระยะ: 4 ขั้นตอน

วีดีโอ: Arduino - การขัดจังหวะเป็นระยะ: 4 ขั้นตอน
วีดีโอ: #22 สอน Arduino Tutorial : Arduino คำสั่ง Interrupt 2024, พฤศจิกายน
Anonim
Arduino - การหยุดชะงักเป็นระยะ
Arduino - การหยุดชะงักเป็นระยะ

คำแนะนำนี้เกี่ยวกับการใช้การขัดจังหวะเป็นระยะสำหรับกำหนดเวลาในโปรแกรม Arduino นี่เป็นขั้นตอนสำหรับโปรแกรมเมอร์ Arduino รุ่นใหม่ที่รู้ว่า Arduino สามารถทำได้มากกว่านี้ แต่ไม่ค่อยรู้ว่าจะทำอย่างไรให้สิ่งนั้นเกิดขึ้น

หากมีปัญหาด้านประสิทธิภาพ ฉันคิดว่าคุณกำลังใช้ฟังก์ชัน delay() อย่างน้อยหนึ่งฟังก์ชัน เคล็ดลับคือการกำจัดฟังก์ชัน delay() และแทนที่การขัดจังหวะ ฟังก์ชัน delay() บังคับให้ Arduino ไม่ทำอะไรเลยในขณะที่รอให้ delay() เสร็จสิ้น การใช้อินเตอร์รัปต์ช่วยให้โปรแกรมของคุณทำอย่างอื่นได้ในขณะที่รอการหน่วงเวลาสิ้นสุด โดยปกติจะมีเวลาตายที่ไม่ได้ใช้จำนวนมากซึ่งสามารถใช้สำหรับสิ่งอื่นเมื่อใช้ delay() การใช้อินเตอร์รัปต์ช่วยแก้ปัญหานี้ได้

ขั้นตอนที่ 1: ตัวจัดการขัดจังหวะ

1. เพิ่มตัวจัดการขัดจังหวะในโปรแกรมของคุณ เพียงคัดลอกและวางที่ใดที่หนึ่งด้านบน setup();

const unsigned long TIMER0_COUNT = 500; // ช่วงเวลาตัวจับเวลา 500 มิลลิวินาที

// TIMER0 ตัวจัดการขัดจังหวะเวลาบูลที่ระเหยได้ = false; ISR (TIMER0_COMPA_vect) { จำนวนยาวที่ไม่ได้ลงชื่อคงที่ = 0; ถ้า (++นับ > TIMER0_COUNT) { จำนวน = 0; เวลา = จริง; // เวลาถูกตั้งค่าเป็น true ทุกๆ TIMER0_COUNT ms } // (ต้องล้างเวลาในรูทีนหลัก) }

ขั้นตอนที่ 2: ตั้งค่าช่วงเวลาเป็นระยะ

2. ตั้งช่วงเวลา กิจวัตรนี้จะย้อนกลับไปยังการขัดจังหวะ TIMER0 ซึ่งตั้งค่าให้เริ่มทำงานทุกๆ ~1 มิลลิวินาที

"ช่วงเวลา" ของคุณคือจำนวน TIMER0 ขัดจังหวะในการประมวลผล แต่ละช่วงเวลาคือ ~1 มิลลิวินาที ดังนั้นคุณกำลังตั้งค่าจำนวนการขัดจังหวะ TIMER0 ให้นับก่อนที่จะเปิดใช้งานช่วงเวลาของคุณ IOW ตั้งค่าตัวแปร TIMER0_COUNT เป็นจำนวนมิลลิวินาทีที่คุณต้องการรอ ตัวอย่างเช่น ใช้ 500 เป็นเวลาครึ่งวินาที ใช้ 3000 เป็นเวลา 3 วินาที

ขั้นตอนที่ 3: การเริ่มต้นขัดจังหวะ

3. เพิ่มโค้ด "TIMER0 initialization" ลงในวิธี setup() ของคุณ อีกครั้งเพียงคัดลอกและวางใน setup()

// *** การเริ่มต้น TIMER0 ***

cli(); // ปิดการขัดจังหวะทั้งหมด TIMSK0 = 0; // ปิดตัวจับเวลา0 สำหรับความกระวนกระวายใจที่ต่ำกว่า OCR0A = 0xBB; // การนับอินเตอร์รัปต์โดยพลการ TIMSK0 |= _BV(OCIE0A); // หมูกลับไปที่อินเตอร์รัปต์ sei(); // เปิดอินเตอร์รัปต์อีกครั้ง

ขั้นตอนที่ 4: จะเพิ่มรหัสของคุณที่ไหน

4. เพิ่มรหัส "ตรวจสอบเวลา" ให้กับวิธีการวนรอบ () ของคุณ คัดลอกและวางในลูป ()

ถ้า (เวลา) {

เวลา = เท็จ; // ทำอะไรที่นี่ }

"เวลา = เท็จ" ไลน์เป็นสิ่งสำคัญ หากไม่มีบรรทัดนี้ บรรทัด "ทำอะไรที่นี่" จะถูกดำเนินการทุกครั้งที่โปรแกรมรันลูป ()

แน่นอน คุณแทนที่กิจกรรมของคุณเองในบรรทัด "ทำอะไรที่นี่" เริ่มต้นด้วยการพิมพ์ข้อความหรือไฟ LED กะพริบ

คุณทำเสร็จแล้ว!

แนะนำ: