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

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 

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

3
กำหนดเวลาความแม่นยำสูงบน Arduino สำหรับการสื่อสารแบบอนุกรม
ฉันใช้ Arduino Uno เพื่อส่งข้อมูลเวลาและแรงดันไฟฟ้าผ่านพอร์ตอนุกรมไปยัง Python เพื่อลงจุด อย่างไรก็ตามการกำหนดช่วงเวลาระหว่างการประทับเวลาต่อเนื่องจะเพิ่มขึ้นเมื่อเวลาผ่านไปส่งผลต่อการวางแผนของฉัน นี่เป็นเรื่องจริงโดยเฉพาะอย่างยิ่งเมื่อตั้งค่าอัตรารับส่งข้อมูลเป็น 9600 ซึ่งความแตกต่างของเวลาเริ่มต้นของฉันอาจเป็น 1320 และเพิ่มขึ้นเป็น 16400 หลังจากช่วงเวลาสั้น ๆ เมื่ออัตรานี้เพิ่มสูงสุดถึง 1,150,200 bps การเปลี่ยนแปลงจะช้าลงและสังเกตได้น้อยลงจากประมาณ 1,340 เป็น 1,500 แม้หลังจากการส่งในระยะยาว เวลาทั้งหมดถูกกำหนดในหน่วยไมโครวินาที ฉันต้องการทราบว่าฉันสามารถลดหรือกำจัดผลกระทบนี้ได้หรือไม่และหากไม่เข้าใจว่าทำไมถึงมีอยู่จริง ฉันได้อ่านสิ่งต่าง ๆ เกี่ยวกับการขัดจังหวะและความล่าช้าที่ก่อให้เกิดสิ่งนี้ แต่ฉันไม่ได้ชื่นชมความซับซ้อนของอุปกรณ์อิเล็กทรอนิกส์ในมือและอยากจะรู้ว่า: ฉันจะได้รับความแม่นยำมากขึ้นในเวลา? ทำให้การเปลี่ยนแปลงในเวลานี้คืออะไร? นี่คือสิ่งที่ฉันมีอยู่ในปัจจุบัน: #include <eHealth.h> extern volatile unsigned long timer0_overflow_count; float fanalog0; int analog0; unsigned long time; byte serialByte; void setup() …

4
ทำไมนาฬิกาเวลาจริงของฉันถึงผิดเวลาจากพีซีของฉัน
ฉันต้องการให้นาฬิกาตามเวลาจริงตั้งเวลาเป็นเวลาบนพีซีของฉัน อย่างไรก็ตามเมื่อฉันเรียกใช้แบบร่างต่อไปนี้นาฬิกาแบบเรียลไทม์จะรายงานเวลาเป็น 32-33 วินาทีเร็วกว่าพีซีของฉันที่บอกเวลา #include <Wire.h> #include "RTClib.h" RTC_DS1307 RTC; void setup () { Serial.begin(57600); Wire.begin(); RTC.begin(); if (! RTC.isrunning()) { Serial.println("RTC is NOT running!"); // following line sets the RTC to the date & time this sketch was compiled // uncomment it & upload to set the time, date …

3
การรักษาเวลาโดยใช้มิลลิวินาที Arduino ไม่ถูกต้องหรือไม่ถูกต้อง?
ฉันใช้ Arduino เพื่อบันทึกข้อมูลบางอย่าง ในร่าง Arduino ของฉันฉันยังใช้millis()ฟังก์ชั่นเพื่อให้ฉันสามารถติดตามเวลาที่แต่ละค่าที่ฉันวัดถูกนำมาใช้ อย่างไรก็ตามฉันสังเกตเห็นว่าเวลาไม่ถูกต้อง ตัวอย่างเช่น 30 วินาทีในชีวิตจริงเท่านั้นออกมาเป็น 10 วินาที (ทำขึ้นตัวอย่าง) ฉันถูกต้องหรือไม่ในการบอกว่าฟังก์ชั่นการหน่วงเวลา Arduino มีผลต่อการใช้เวลาอย่างต่อเนื่องmillis()หรือไม่? กล่าวอีกนัยหนึ่งสมมติว่าฉันมีความล่าช้า 50 มิลลิวินาทีนั่นหมายความว่าmillis()ฟังก์ชั่นจะหยุดในช่วงเวลานั้นเช่นกันจากนั้นจึงดำเนินการต่อไปเรื่อย ๆ ตลอดระยะเวลาของการเชื่อมต่อหรือไม่ ฉันสังเกตเห็นสิ่งนี้เมื่อฉันพยายามพล็อตข้อมูลบางส่วนและพบว่าความถี่ของยอดเขาในข้อมูลของฉันบ่อยเกินไปตามเวลาที่ผ่านไป ดังนั้นฉันต้องการทราบว่านั่นเป็นเหตุผลสำหรับการไม่ตรงตามกำหนดเวลานี้หรือไม่และถ้าเป็นเช่นนั้นฉันจะแก้ไขได้อย่างไรเพื่อให้สามารถเก็บเวลาแต่ละตัวอย่างได้ เพื่อให้บริบทนี่คือร่างของฉัน: #include <eHealth.h> unsigned long time; // The setup routine runs once when you press reset: void setup() { Serial.begin(9600); } // The loop routine runs over …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.