ប៊ូតុងត្រូវបានប្រើស្ទើតែគ្រប់គម្រោងនៃ Arduino ដោយសារតែប៊ូតុងងាយស្រួលក្នុងការប្រើទៅបញ្ជារក៏ដូចជាប្រើប្រាស់ជើងតិច និងងាយស្រួលសរសេរកូដ។ តែបញ្ហាដែលតែងតែជួបជាមួយប៊ូតុងនោះគឺ ការប្រើប៊ូតុងច្រើន ចាប់សញ្ញាច្រើនករណីដូចជា ពេលចុច ពេលលែងវិញ និងរយះពេលចុច។
ជាមួយនឹង Library ថ្មីមួយយើងនឹងអាចប្រើប្រាស់ប៊ូតុងច្រើនតាមតម្រូវការរួមជាមួយការចាប់បាននូវគ្រប់ករណីផងដែរ។
របៀបប្រើប្រាស់ប៊ូតុង
ការតសៀគ្វីប៊ូតុងដែលដំណើរការល្អមាន ២ ប្រភេទដូចខាងក្រោម៖
១. Pull Up Switch (pull-down resistor): សញ្ញា Output ត្រូវបានទាញអោយទៅ 0 (LOW) ដោយសាររេស៊ីស្តរមួយ ពេលចុចទើបផ្តល់សញ្ញា 1 (HIGH)។ ការតបែបនេះមិនសូវជាមានការពេញនិយមនោះទេ ពីព្រោះចរន្តដែលជាប់ពី V+ អាចហូរទៅកាន់ Output ទាំងអស់ ដែលអាចធ្វើអោយក្តៅ ឫឆេះ ឫបញ្ហាផ្សេងៗសម្រាប់ Arduino។
២. Pull Down Switch (pull-up resistor): សញ្ញា Output ត្រូវបានទាញទៅ 1 (HIGH) ដោយរេស៊ីស្តរ ពេលចុចទើបផ្តល់សញ្ញា 0 (LOW)។ សៀគ្វីនេះត្រូវបានប្រើជាស្តង់ដាសម្រាប់ប៊ូតុង ឫកុងតាក់ ដោយសារតែវាមានរេស៊ីស្តរមួយសម្រាប់កាត់បន្ថយចរន្តដែលចូលទៅកាន់ Arduino ឫសៀគ្វីផ្សេងទៀតដែលមិនត្រូវការចរន្តធំ។
- ការចម្រាញ់សញ្ញារបស់ប៊ូតុង (Debounce)
ដើម្បីកាត់បន្ថយ ឫការពារពីការរំខានក្នុងករណីប៊ូតុងដំណើរការមិនសូវល្អ ឫសញ្ញា Output មានការរំខានពីខាងក្រៅគឺត្រូវធ្វើការ debounce សញ្ញា Output ដើម្បីអោយច្បាស់ថាប៊ុតុងត្រូវបានចុច ឫដកដៃពិតប្រាកដមែន។
សៀគ្វីខាងក្រោមគឺជាការកាត់បន្ថយការរំខានដោយប្រើកុងដង់តូចមួយដើម្បីរយៈពេលតូចមួយអោយច្បាស់ថាប៊ូតុងត្រូវបានចុច ឫដកដៃ។
ក្រៅពីការប្រើប្រាស់សៀគ្វីក៏អាចប្រើប្រាស់កូដអោយធ្វើការ debounce សញ្ញារបស់ប៊ូតុងឫកុងតាក់បានផងដែរ។
>> Arduino ធ្វើ debounce : https://www.arduino.cc/en/tutorial/debounce
ការប្រើប្រាស់ Library
បើយើងប្រើប្រាស់ Library មួយដែលបានធ្វើការ design រាល់តម្រូវការក្នុងការប្រើប្រាស់ប៊ូតុង ឫកុងតាក់សម្រាប់ Arduino គឺកាន់តែមានភាពងាយស្រួល។
ទាញយក (Download): https://github.com/etronicskh/Arduino-Simple-Button-Library
អាចអានពីការប្រើប្រាស់លម្អិតនៅខាងក្រោមកន្លែងទាញយក។
Library នេះមានឈ្មោះថា <button.h> ពេលដែលបញ្ចូលជើងប៊ូតុង ត្រូវបញ្ជាក់ថាប៊ូតុងនោះប្រើរេស៊ីស្តរ (pull-up) ឫ (pull-down)៖
ឧ. យើងបង្កើតប៊ូតុង ២ ដែលមានឈ្មោះថា BUTTON_ONE ជើង D3 និង BUTTON_TOW ជើង A0។
#inclue <button.h> button BUTTON_ONE(3, HIGH); //pull-up button button BUTTON_TWO(A0, LOW); //pull-down button
ធ្វើការប្រកាសប៊ូតុងនៅក្នុង setup()៖
void setup(){ BUTTON_ONE.init(); BUTTON_TWO.init(); }
យើងក៏អាចកែរយៈពេល debounce បានផងដែរ ខណៈតម្លៃដើមស្មើនឹង 100ms៖
BUTTON_ONE.debounce(200);
បើចង់ចាប់ថាពេលពេលដែលប៊ូតុងត្រូវបានសង្កត់ចុះ ត្រូវប្រើ .push()៖
bool button_one_push = BUTTON_ONE.push(); bool button_two_push = BUTTON_TWO.push();
ចាប់សញ្ញាថាប៊ុតុងចុច ត្រូវប្រើ .press()៖
bool button_one_press = BUTTON_ONE.press(); bool button_two_press = BUTTON_TWO.press();
ចាប់ពេលដែលប៊ូតុងត្រូវបានលែងវិញ ត្រូវប្រើ .release()៖
bool button_one_released = BUTTON_ONE.release(); bool button_two_released = BUTTON_TWO.release();
ចង់ដឹងថាប៊ូតុងត្រូវបានសង្កត់រយៈពេលប៉ុន្មានហើយ ត្រូវប្រើ .onHold() ដែលផ្តល់តម្លៃឲ្យជា milliseconds ៖
long button_one_hold_time = BUTTON_ONE.onHold(); long button_two_hold_time = BUTTON_TWO.onHold();
ក្នុងករណីថាយើងចង់អោយប៊ូតុងត្រូវបានសង្កត់រយៈពេល ៥វិនាទី ហើយយើង print ប្រាប់ទៅអ្នកប្រើដើម្បីដកដៃ ឫរងចាំឲ្យមានការចុចម្តងទៀត ទើបចាប់ផ្តើមរាប់រយៈពេលជាថ្មី ត្រូវប្រើ .resetHold()៖
if(button_one_hold_time >= 5000){ BUTTON_ONE.resetHold(); Serial.println("Holding button 1 longer than 5 second."); }