Joystick ត្រូវបានស្គាល់ច្រើនតាមរយៈដៃបញ្ជាហ្គេម ដែលជាធម្មតាមាន២ ប្រើសម្រាប់បញ្ជារអោយទៅមុខ ទៅក្រោយ ទៅឆ្វេងឫទៅស្តាំ។
ធ្វើការតសៀគ្វីដូចរូបខាក្រោម៖
Arduino | Joystick
----------------------------------------
5V | VCC
GND | GND
A0 | VRx
A1 | VRy
2 | SW
-----------------------------------------
7 | LEDsw
8 | LEDup
9 | LEDdown
10 | LEDright
11 | LEDleft
-----------------------------------------
លក្ខណៈរបស់ Joystick
ជាទូទៅ Joystick មាន ២ អ័ក្សគឺ លើក្រោម/ឆ្វេងស្តាំ និងប៊ូតុងចុចមួយ(នៅពេលសង្កត់ Joystick)។ គេប្រើប្រាស់រេស៊ីស្តរប្រែប្រួល(Potentiometer) នៅលើអ័ក្សនីមួយៗដើម្បីតាមដានបម្រែបម្រួលនៃការបញ្ជារ ដែលមានន័យថាវាជាសញ្ញាអាណាឡូក(Analog)។
ដោយយើងប្រើប្រាស់ Arduino សម្រាប់តាមដាន Joystick មានន័យថា Potentiometer នីមួយៗនឹងផ្តល់តម្លៃចន្លោះ 0-1023 (ស្វែងយល់ពី Analog ក្នុង Arduino)។ តែដោយសារតែបង្គោលរបស់ Joystick ត្រូវបញ្ឈរត្រង់ ដែលធ្វើអោយ Potentiometer ស្ថិតនៅចំនុចកណ្តាល (ចន្លោះ 0-1023) ដែលមានតម្លៃ Analog ប្រហែលនឹង 511 នៅពេលគ្មានការបញ្ជារ (រូបខាងលើ)។
ឧ. នៅលើអ័ក្ស X (លើ/ក្រោម) នឹងផ្តល់តម្លៃពី 511 -> 1023 នៅពេលរុញទៅលើ និងផ្តល់តម្លៃពី 511 -> 0 នៅពេលទាញយកក្រោយ។
សៀគ្វីជាមួយ Joystick
ដោយសារតែ Joystick ផ្តល់ជាសញ្ជារអាណាឡូក(Analog) នោះនៅលើ Arduino ក៏ត្រូវប្រើជើង Analog ដើម្បីទាញយក(Read) ទិន្ន័យដែរ។ធ្វើការតសៀគ្វីដូចរូបខាក្រោម៖
Arduino | Joystick
----------------------------------------
5V | VCC
GND | GND
A0 | VRx
A1 | VRy
2 | SW
-----------------------------------------
7 | LEDsw
8 | LEDup
9 | LEDdown
10 | LEDright
11 | LEDleft
-----------------------------------------
កូដសម្រាប់ Joystick
ការសរសេរកូដនឹងធ្វើលក្ខខណ្ឌទៅតាមតម្លៃរបស់ Analog៖
- /*
- * Arduino with Joystick
- * https://www.etronicskh.com/
- * By: Theara Kong
- *
- */
- #define VRx A0
- #define VRy A1
- #define SW 2
- #define LEDsw 7 //LED for pushing joystick
- #define LEDup 8 //LED for joystick moved up
- #define LEDdown 9 //LED for joystick moved down
- #define LEDright 10 //LED for joystick moved right
- #define LEDleft 11 //LED for joystick moved left
- void setup(){
- Serial.begin(9600);
- pinMode(SW, INPUT);
- pinMode(LEDsw, OUTPUT);
- pinMode(LEDup, OUTPUT);
- pinMode(LEDright, OUTPUT);
- pinMode(LEDleft, OUTPUT);
- }
- void loop(){
- //X axis condtion
- if (analogRead(VRx)>520){
- digitalWrite(LEDup, HIGH);
- digitalWrite(LEDdown, LOW);
- }else if (analogRead(VRx)<500){
- digitalWrite(LEDup, LOW);
- digitalWrite(LEDdown, HIGH);
- }else{
- digitalWrite(LEDup, LOW);
- digitalWrite(LEDdown, LOW);
- }
- //Y axis condition
- if (analogRead(VRy)>520){
- digitalWrite(LEDright, HIGH);
- digitalWrite(LEDleft, LOW);
- }else if (analogRead(VRy)<500){
- digitalWrite(LEDright, LOW);
- digitalWrite(LEDleft, HIGH);
- }else{
- digitalWrite(LEDright, LOW);
- digitalWrite(LEDleft, LOW);
- }
- //Joystick button condition
- if (digitalRead(SW)== HIGH)
- {
- digitalWrite(LEDsw, LOW);
- }else{
- digitalWrite(LEDsw, HIGH);
- }
- //Serial print
- Serial.println(">--------------------<");
- Serial.print("VRx"); Serial.println(analogRead(VRx));
- Serial.print("VRy"); Serial.println(analogRead(VRy));
- //delay
- delay(200);
- }