Skip to content

wut0477/iot_ESP32_with_millis_function

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 

Repository files navigation

iot_ESP32_with_millis_function

Coding to Control Led 5 Second With Button

การใช้งาน function millis() แทน delay() เพื่อทำให้โค้ดเป็นแบบ non-blocking ช่วยให้โปรแกรมทำงานต่อเนื่องโดยไม่ต้องหยุดรอ ตัวอย่างทำให้ LED ติดค้างไว้ 5 วินาที เมื่อกดปุ่มโดยไม่ต้องหยุดการทำงานของโปรแกรม

  1. ตัวแปรเพิ่มเติม

lastButtonState : เก็บสถานะปุ่มก่อนหน้าเพื่อการตรวจจับการเปลี่ยนแปลงสถานะ(จาก LOW ไป HIGH)ป้องกันการสั่งงานซ้ำขณะกดปุ่ม

ledOnTime : เก็บเวลาที่ LED ถูกเปิดโดยใช้ millis()

ledDuration : กำหนดระยะเวลา 5000 มิลลิวินาที ที่ LED จะติด

ledIsOn : ตัวแปร boolean เพื่อติดตามว่า LED เปิดอยู่หรือไม่

2.การตรวจจับการกดปุ่ม

เงื่อนไข buttonState == HIGH && lastbuttonState == LOW เพื่อตรวจจับการกดปุ่มครั้งแรก (edge detection) ทำให้ LED เปิดเมื่อกดปุ่มเท่านั้น ไม่ทำงานหากกดค้าง

เมื่อกดปุ่ม LED จะติดและบันทึกเวลาด้วย millis()

3.การปิด LED

ตรวจสอบว่า LED เปิดอยู่ (ledIsOn)และเวลาที่ผ่านไป (millis() - ledOnTime)เกิน 5 วินาทีหรือไม่ถ้าเกินจะปิด LED และอัปเดตสถานะ ledIsOn

4.ข้อดีของการใช้ millis()

โค้ดไม่หยุดรอเหมือน delay() ทำให้สามารถเพิ่มฟังก์ชั่นอื่นๆในฟังก์ชั่น loop() ได้เช่นการอ่านค่าเซนเซอร์หรือควบคุมอุปกรณ์อื่นๆ

การตอบสนองของปุ่มดีขึ้น ไม่มีการหน่วง

ข้อควรระวัง

ต้องใช้ pull-down resistor กับปุ่มกดเหมือนเดิมเพื่อให้สถานะปุ่มเป็น LOW เมื่อไม่กด

หากต้องการให้ปุ่มกดใหม่ได้ก่อนครบ 5 นาที โค้ดนี้ทำงานได้ดีเพราะตรวจจับ edge detection

ถ้าหากใช้ ESP32 หรือบอร์ดอื่นๆ ตรวจสอบว่า pin 4 และ pin 16 รองรับ INPUT/OUTPUT ตามที่ต้องการ

Pull-Down resistor ตัวต้านทานที่ต่อระหว่างขาของปุ่มกด (PushButton) กับ กราวด์ (GND) มักใช้คู่กับปุ่มกดเมื่อตั้งค่าเป็น INPUT ในไมโครคอนโทรลเลอร์ เพื่อให้สถานะของ Pin Input มีค่าที่

แน่นอนและป้องกันปัญหา "floating input"

ปัญหา floating point เมื่อปุ่มไม่ถูกกด PIN OUTPUT จะอยู่ในสภาพลอย หมายถึงไม่มีค่าไฟฟ้าที่แน่นอนอาจเป็น HIGH หรือ LOW แบบสุ่มเพราะไม่มีอะไรกำหนดสถานะของ PIN ส่งผลให้ไมโคร

คอนโทรลเลอร์อ่านค่าได้ผิดพลาด ส่วนใหญ่จะใช้ค่า 10 กิโลโอม ต่อระหว่าง INPUT กับ Ground จะดึงแรงดันของ PIN ให้เป็น LOW (0V) เมื่อปุ่มไม่ถูกกดเพื่อสถานะ PIN ชัดเจน

About

Coding to Control Led 5 Second With Button

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages