สารบัญ:
2025 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2025-01-13 06:58
คำแนะนำนี้เกี่ยวกับการใช้การขัดจังหวะเป็นระยะสำหรับกำหนดเวลาในโปรแกรม 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 กะพริบ
คุณทำเสร็จแล้ว!