Friday, June 12, 2020

Arduino: របៀបប្រើប៊ូតុងងាយស្រួលជាងមុន


ប៊ូតុងត្រូវបានប្រើស្ទើតែគ្រប់គម្រោងនៃ 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 ដើម្បីអោយច្បាស់ថាប៊ុតុងត្រូវបានចុច ឫដកដៃពិតប្រាកដមែន។

Switch Debouncing - The Lab Book Pages

សៀគ្វីខាងក្រោមគឺជាការកាត់បន្ថយការរំខានដោយប្រើកុងដង់តូចមួយដើម្បីរយៈពេលតូចមួយអោយច្បាស់ថាប៊ូតុងត្រូវបានចុច ឫដកដៃ។

ក្រៅពីការប្រើប្រាស់សៀគ្វីក៏អាចប្រើប្រាស់កូដអោយធ្វើការ debounce សញ្ញារបស់ប៊ូតុងឫកុងតាក់បានផងដែរ។
>> Arduino ធ្វើ debounce : https://www.arduino.cc/en/tutorial/debounce

ការប្រើប្រាស់ Library

បើយើងប្រើប្រាស់ Library មួយដែលបានធ្វើការ design រាល់តម្រូវការក្នុងការប្រើប្រាស់ប៊ូតុង ឫកុងតាក់សម្រាប់ Arduino គឺកាន់តែមានភាពងាយស្រួល។


អាចអានពីការប្រើប្រាស់លម្អិតនៅខាងក្រោមកន្លែងទាញយក។

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.");
}