Wednesday, May 6, 2020

Arduino: របៀបប្រើប្រាស់ Joystick

Joystick ត្រូវបាន​ស្គាល់ច្រើនតាមរយៈដៃបញ្ជាហ្គេម ដែលជាធម្មតាមាន២ ប្រើសម្រាប់បញ្ជារអោយទៅមុខ ទៅក្រោយ ទៅឆ្វេងឫទៅស្តាំ។

លក្ខណៈរបស់ Joystick

ជាទូទៅ Joystick មាន ២​ អ័ក្សគឺ លើក្រោម/ឆ្វេងស្តាំ និងប៊ូតុងចុចមួយ(នៅពេលសង្កត់ Joystick)។ គេប្រើប្រាស់រេស៊ីស្តរប្រែប្រួល(Potentiometer) នៅលើអ័ក្សនីមួយៗដើម្បីតាមដានបម្រែបម្រួលនៃការបញ្ជារ ដែលមានន័យថាវាជាសញ្ញាអាណាឡូក(Analog)។

X-Y position value of Joystick module

ដោយយើងប្រើប្រាស់ Arduino សម្រាប់តាមដាន Joystick មានន័យថា Potentiometer នីមួយៗនឹងផ្តល់តម្លៃចន្លោះ 0-1023​ (ស្វែងយល់ពី Analog ក្នុង Arduino)។ តែដោយសារតែបង្គោលរបស់ Joystick ត្រូវបញ្ឈរត្រង់ ដែលធ្វើអោយ Potentiometer ស្ថិតនៅចំនុចកណ្តាល (ចន្លោះ 0-1023) ដែលមានតម្លៃ Analog ប្រហែលនឹង 511 នៅពេលគ្មានការបញ្ជារ (រូបខាងលើ)។

ឧ. នៅលើអ័ក្ស  X (លើ/ក្រោម) នឹងផ្តល់តម្លៃពី 511 -> 1023 នៅពេលរុញទៅលើ និងផ្តល់តម្លៃពី 511 -> 0 នៅពេលទាញយកក្រោយ។

សៀគ្វីជាមួយ Joystick

ដោយសារតែ Joystick ផ្តល់ជាសញ្ជារអាណាឡូក(Analog) នោះនៅលើ Arduino ក៏ត្រូវប្រើជើង Analog ដើម្បីទាញយក(Read) ទិន្ន័យដែរ។
ធ្វើការតសៀគ្វីដូចរូបខាក្រោម៖

Interfacing Circuit diagram of Joystick with Arduino

Arduino   |     Joystick
----------------------------------------
5V           |      VCC
GND       |      GND
A0           |      VRx
A1           |      VRy
2              |      SW
-----------------------------------------
7              |      LEDsw
8              |      LEDup
9              |      LEDdown
10            |      LEDright
11            |      LEDleft
-----------------------------------------

កូដសម្រាប់ Joystick

ការសរសេរកូដនឹងធ្វើលក្ខខណ្ឌទៅតាមតម្លៃរបស់ Analog៖


  1. /* 
  2.  * Arduino with Joystick 
  3.  * https://www.etronicskh.com/ 
  4.  * By: Theara Kong 
  5.  *  
  6.  */  
  7.   
  8.   
  9. #define VRx A0  
  10. #define VRy A1  
  11. #define SW  2  
  12.   
  13. #define LEDsw 7       //LED for pushing joystick  
  14. #define LEDup 8       //LED for joystick moved up  
  15. #define LEDdown 9     //LED for joystick moved down  
  16. #define LEDright 10   //LED for joystick moved right  
  17. #define LEDleft  11   //LED for joystick moved left  
  18.   
  19. void setup(){  
  20.   Serial.begin(9600);  
  21.   pinMode(SW, INPUT);  
  22.   
  23.   pinMode(LEDsw, OUTPUT);  
  24.   pinMode(LEDup, OUTPUT);  
  25.   pinMode(LEDright, OUTPUT);  
  26.   pinMode(LEDleft, OUTPUT);  
  27. }  
  28.   
  29. void loop(){  
  30.   //X axis condtion  
  31.   if (analogRead(VRx)>520){  
  32.     digitalWrite(LEDup, HIGH);  
  33.     digitalWrite(LEDdown, LOW);  
  34.   }else if (analogRead(VRx)<500){  
  35.     digitalWrite(LEDup, LOW);  
  36.     digitalWrite(LEDdown, HIGH);  
  37.   }else{  
  38.     digitalWrite(LEDup, LOW);  
  39.     digitalWrite(LEDdown, LOW);  
  40.   }  
  41.   
  42.   //Y axis condition  
  43.   if (analogRead(VRy)>520){  
  44.     digitalWrite(LEDright, HIGH);  
  45.     digitalWrite(LEDleft, LOW);  
  46.   }else if (analogRead(VRy)<500){  
  47.     digitalWrite(LEDright, LOW);  
  48.     digitalWrite(LEDleft, HIGH);  
  49.   }else{  
  50.     digitalWrite(LEDright, LOW);  
  51.     digitalWrite(LEDleft, LOW);  
  52.   }  
  53.   
  54.   //Joystick button condition  
  55.   if (digitalRead(SW)== HIGH)  
  56.   {  
  57.     digitalWrite(LEDsw, LOW);  
  58.   }else{  
  59.     digitalWrite(LEDsw, HIGH);  
  60.   }  
  61.   
  62.   //Serial print  
  63.   Serial.println(">--------------------<");  
  64.   Serial.print("VRx"); Serial.println(analogRead(VRx));  
  65.   Serial.print("VRy"); Serial.println(analogRead(VRy));  
  66.   
  67.   //delay  
  68.   delay(200);  
  69. }  


អត្ថបទយោង៖ Interfacing Joystick with Arduino