Electoday 4.0

ไมโครคอนโทรลเลอร์ => AVR and Arduino => Topic started by: LFC on September 14, 2014, 11:30:52 pm

Title: ขอถามเรื่องคำสั่งหน่อยนะครับ
Post by: LFC on September 14, 2014, 11:30:52 pm
คำสั่ง t.update(); ใน Example ของ TIMER  มันหมายถึงอะไรอะครับ ผมงงมาก ขอรบกวนพี่ๆช่วยตอบหน่อยนะครับ ขอบคุณครับ

void loop(void)
{
    t.update();
}
Title: Re: ขอถามเรื่องคำสั่งหน่อยนะครับ
Post by: smallpacker on September 26, 2014, 11:22:03 am
ผมก็ยังงงๆนะครับ
Title: Re: ขอถามเรื่องคำสั่งหน่อยนะครับ
Post by: ozuke on October 10, 2014, 06:06:59 pm
ผมก็งงครับ แต่ผมก็หาจนเจอะ

http://www.doctormonk.com/2012/01/arduino-timer-library.html

เนื่องจาก Lib Timer ที่คุณว่านั้นมันเป็นตัวจำลอง Timer ขึ้นมา
จึงไม่สามารถจับเวลาด้วยตัวมันเองได้ หรือทำงานเป็น Background ได้
ดังคำสั่ง t.update(); จึงเป็นคำสั่งให้ Object Timer นั้นอัพเดทเวลาของตัวเอง


อ้างอิงจากโค้ดบรรทัดที่ 112 - 127 ของไฟล์ Timer/Timer.cpp
Code: [Select]
void Timer::update(void)
{
unsigned long now = millis();
update(now);
}

void Timer::update(unsigned long now)
{
for (int8_t i = 0; i < MAX_NUMBER_OF_EVENTS; i++)
{
if (_events[i].eventType != EVENT_NONE)
{
_events[i].update(now);
}
}
}

จากโค้ดจะเห็นว่าคำสั่ง update(); จะมีไว้สำหรับอัพเดทเวลา
เมื่อเวลานั้นมากกว่าหรือเท่ากับเวลาที่ตั้งเอาไว้โปรแกรมก็จะโดดไปทำงานตาม Event ที่เราตั้งค่าเอาไว้ครับ

"ถ้าผมลบคำสั่ง t.update() ออกหรือมาสั่งงานคำสั่งนี้ช้าหล่ะ?"
มันก็จะเกิดความผิดเพี้ยนทางเวลาของ Event ที่คุณตั้งไว้ครับ
Title: Re: ขอถามเรื่องคำสั่งหน่อยนะครับ
Post by: moneyp1000 on October 08, 2020, 11:29:01 pm
ถ้าต้องการนับเวลาโดยที่ไม่ต้องหน่วงเวลาลองศึกษา  คำสั่ง millis()  (https://eleceasy.com/t/arduino-nodemcu/4440)ดูครับ