คำถามติดแท็ก millis

4
ฉันจะจัดการโรลโอเวอร์ของ millis () ได้อย่างไร
ฉันต้องอ่านเซ็นเซอร์ทุก ๆ ห้านาที แต่เนื่องจากร่างของฉันมีงานอื่นให้ทำฉันไม่สามารถdelay()อ่านได้ มีการสอนแบบกะพริบโดยไม่ชักช้าแนะนำฉันรหัสตามบรรทัดเหล่านี้: void loop() { unsigned long currentMillis = millis(); // Read the sensor when needed. if (currentMillis - previousMillis >= interval) { previousMillis = currentMillis; readSensor(); } // Do other stuff... } ปัญหาคือว่าmillis()จะย้อนกลับไปที่ศูนย์หลังจากประมาณ 49.7 วัน เนื่องจากแบบร่างของฉันมีวัตถุประสงค์เพื่อให้ทำงานได้นานกว่านั้นฉันต้องตรวจสอบให้แน่ใจว่าการวางเมาส์แบบโรลโอเวอร์ไม่ทำให้ร่างของฉันล้มเหลว ฉันสามารถตรวจสอบเงื่อนไขการโรลโอเวอร์ ( currentMillis < previousMillis) ได้อย่างง่ายดายแต่ฉันไม่แน่ใจว่าต้องทำอย่างไร ดังนั้นคำถามของฉัน: อะไรจะเป็นวิธีที่เหมาะสม / ง่ายที่สุดในการจัดการ …

5
ฉันจะได้รับเวลาที่แม่นยำได้อย่างไร
ฉันทำนาฬิกาโดยใช้ Arduino แต่เวลาดูเหมือนจะล่องลอย ฉันตระหนักถึงปัญหาการหมุนเวียน ดูเหมือนว่านาฬิกาจะลอยประมาณ 15 นาทีในช่วงเวลาหนึ่งสัปดาห์ ฉันกำลังใช้ PCB แบบกำหนดเองกับตัวเปลี่ยนแสงนี้จาก Digi-key รหัสจะอ่านฟังก์ชัน millis () ที่จุดเริ่มต้นของแต่ละลูปและทำงานจากค่านั้น คำถามของฉันคือ: ฉันจะวัดเวลาด้วย Arduino ได้อย่างถูกต้องมากพอที่จะทำให้นาฬิกาตั้งโต๊ะทำงานได้หรือไม่?
16 time  millis 

1
millis () รีเซ็ตตัวเองเป็น 0 ได้อย่างไร
ดูที่เอกสารสำหรับmillis()ฟังก์ชั่นกล่าวว่า: ส่งคืนจำนวนมิลลิวินาทีนับตั้งแต่บอร์ด Arduino เริ่มทำงานโปรแกรมปัจจุบัน จำนวนนี้จะล้น (กลับไปที่ศูนย์) หลังจากประมาณ 50 วัน เป็นไปได้อย่างไร? Arduino ตรวจจับเมื่อmillis()โอเวอร์โฟลว์แล้วรีเซ็ตค่าเป็น 0 หรือไม่ ถ้าเป็นเช่นนั้นมันจะทำอย่างไร ฉันแค่อยากรู้ว่าเกิดอะไรขึ้นภายใต้ประทุนกับตัวแปรที่millis()ฟังก์ชันส่งคืน
14 millis 

3
เป็นไปได้ไหมที่จะหาเวลาที่กำหนดโดยมิลลิวินาที?
ฟังก์ชันmillisจะทำงานในช่วง 100+ วินาทีหรือน้อยกว่า มีวิธีที่เชื่อถือได้ในการวัดเวลาที่ใช้ในการโทรหนึ่งพันครั้งหรือไม่? วิธีการหนึ่งที่อยู่ในใจคือการใช้microsอย่างไรก็ตามการเรียกไปยังmicrosจะรวมเวลาที่ใช้ในการเรียกใช้ฟังก์ชันของmicrosตัวเองเช่นกันดังนั้นขึ้นอยู่กับระยะเวลาในการใช้ไมโครวินาทีการวัดสำหรับmillisอาจปิด millisฉันต้องการที่จะพบนี้เป็นโปรแกรมที่ผมกำลังทำงานอยู่บนต้องมีการวัดเวลาที่ถูกต้องสำหรับทุกขั้นตอนการดำเนินการในรหัสรวมทั้ง
13 time  millis 

3
ใช้ millis () และ micros () ภายในรูทีน interrupt
เอกสารสำหรับattachInterrupt()พูดว่า: ... millis()อาศัยการขัดจังหวะในการนับดังนั้นมันจะไม่เพิ่มขึ้นภายใน ISR เนื่องจากdelay()ต้องการการขัดจังหวะในการทำงานมันจะไม่ทำงานหากเรียกภายใน ISR micros()ทำงานในขั้นต้น แต่จะเริ่มทำงานผิดปกติหลังจาก 1-2 ms ... วิธีการที่ไม่micros()แตกต่างจากmillis()(ยกเว้นของหลักสูตรเพื่อความแม่นยำของพวกเขา)? คำเตือนข้างต้นหมายความว่าการใช้micros()ภายในรูทีนการขัดจังหวะเป็นความคิดที่ไม่ดีอยู่เสมอ บริบท - ฉันต้องการวัดอัตราการเต้นของชีพจรต่ำดังนั้นฉันจึงต้องทริกเกอร์รูทีนเมื่อสัญญาณอินพุทของฉันเปลี่ยนแปลงและบันทึกเวลาปัจจุบัน

2
millis () ขัดแย้งกับหมุด PWM ที่เกี่ยวข้องกับตัวจับเวลา 0 หรือไม่
ฉันได้อ่านแล้วว่าmillis()ฟังก์ชั่นนี้ใช้ตัวจับเวลาเดียวกันกับหมุด PWM สองสามตัว หากคุณใช้หมุด PWM เหล่านั้นจะmillis()ยังคงส่งคืนค่าที่ถูกต้องหรือไม่
9 timers  pwm  millis 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.