quang cao hosting

Kết nối tay game PlayStation với Arduino

Xem: 302    Tải: 0   Thảo luận: 0   Mục: Hệ thống nhúng   Lĩnh vực: none

0 điểm   ( 1 đánh giá ) File đã được kiểm thử

I. Giới thiệu

Bài viết trước mình đã giới thiệu với các bạn về Joystick, đó chính là phím di chuyển trên tay PlayStation. Nhưng các bạn hãy quan sát trong các kỳ thi robocon, hầu hết các thí sinh đều dùng tay PlayStation để điều khiển robot. Vậy làm sao để sử dụng tay PlayStation ??

II. Cách kết nối

                     

Đối với điều khiển robot, chỉ cần dùng các dây sau: Clock, Data, Command, VCC & GND, Attention. Clock,Data,Command,Attention nối với các chân I/O bất kỳ. Chân Data nên được kéo nguồn bằng điện trở từ 1k-10k. Clock: xung, đồng bộ hóa quá trình truyền dữ liệu. Data: dữ liệu từ gamepad về vdk; Command: dữ liệu từ vdk đến gamepad. Attention: Chip select  VCC: 3-5V; GND:0V

Ở bài này, mình kết nối như sau:

PlayStation 2 Arduino UNO
DATA 13
Command 11
Attention 10
Clock 12
Vcc 5V
GND GND

III. Chương trình

Để làm việc với tay PS2, các bạn cần tải thư viện PS2X_lib tại đây

Code ( ở đây điều khiển động cơ thông qua module L298N ) :


 
  1. #include <PS2X_lib.h>
  2.  
  3. #define PS2_DAT 13 // data
  4. #define PS2_CMD 11 //command
  5. #define PS2_SEL 10 // attention
  6. #define PS2_CLK 12 //clock
  7.  
  8. //#define pressures true
  9. #define pressures false
  10. //#define rumble true
  11. #define rumble false
  12. PS2X ps2x; // tạo PS2 điều khiển lớp
  13. int error = 0;
  14. byte type = 0;
  15. byte vibrate = 0;
  16. //Biến cho analog
  17. int temp1;
  18. int temp2;
  19. int temp3;
  20. int temp4;
  21. int temp33;
  22. int temp44;
  23. void setup()
  24. {
  25. ​//khai báo các chân điều khiển động c
  26. ​pinMode(3, OUTPUT)
  27. ​pinMode(5, OUTPUT)
  28. ​pinMode(6, OUTPUT)
  29. ​pinMode(9, OUTPUT)
  30. ​Serial.begin(57600)
  31.  
  32. ​delay(300)
  33. ​error = ps2x.config_gamepad(PS2_CLK, PS2_CMD, PS2_SEL, PS2_DAT, pressures, rumble)
  34. ​if (error == 0)
  35. ​Serial.print("Đã tìm thấy bộ điều khiển ")
  36. ​Serial.print("pressures = ")
  37. ​if (pressures
  38. ​Serial.println("true ")
  39. ​els
  40. ​Serial.println("false")
  41. ​Serial.print("rumble = ")
  42. ​if (rumble
  43. ​Serial.println("true)")
  44. ​els
  45. ​Serial.println("false")
  46. ​Serial.println("Hãy thử tất cả các nút;")
  47. ​Serial.println("giữ L1 hoặc R1 sẽ in ra các giá trị analog.")
  48. ​else if (error == 1
  49. ​Serial.println("Không kết nối đc, thử lại...")
  50.  
  51. ​else if (error == 2
  52. ​Serial.println("Bộ điều khiển tìm thấy nhưng không chấp nhận lệnh")
  53.  
  54. ​else if (error == 3
  55. ​Serial.println("Bộ điều khiển từ chối để vào chế độ Pressures ")
  56.  
  57. ​// Serial.print(ps2x.Analog(1), HEX)
  58. ​type = ps2x.readType()
  59. ​switch (type)
  60. ​case 0
  61. ​Serial.print("Tay điều khiển không phù hợp ")
  62. ​break
  63. ​case 1
  64. ​Serial.print("Đã tìm thấy DualShock ")
  65. ​break
  66. ​case 2
  67. ​Serial.print("Đã tìm thấy GuitarHero ")
  68. ​break
  69. ​case 3
  70. ​Serial.print("Không dây của Sony DualShock điều khiển tìm thấy ")
  71. ​break
  72. }
  73.  
  74. void loop()
  75. {
  76. ​//Cho về 0 xét lạ
  77. ​temp1 = 0
  78. ​temp2 = 0
  79. ​temp3 = 0
  80. ​temp4 = 0
  81. ​if (error == 1
  82. ​return
  83.  
  84. ​if (type == 2)
  85. ​ps2x.read_gamepad()
  86. ​else { //DualShock Controlle
  87. ​ps2x.read_gamepad(false, vibrate); //read controller and set large motor to spin at 'vibrate' spee
  88.  
  89. ​if (ps2x.Analog(PSS_LY) > 128)
  90. ​temp1 = (ps2x.Analog(PSS_LY) - 128) * 2
  91. ​else if (ps2x.Analog(PSS_LY) < 128)
  92. ​temp2 = abs(ps2x.Analog(PSS_LY) - 128) * 2
  93. ​if (temp2 > 255
  94. ​temp2 = 255
  95. ​else
  96. ​temp2 = 0
  97. ​if (ps2x.Analog(PSS_RX) > 128)
  98. ​temp3 = (ps2x.Analog(PSS_RX) - 128) * 2
  99. ​else if (ps2x.Analog(PSS_RX) < 128)
  100. ​temp4 = abs(ps2x.Analog(PSS_RX) - 128) * 2
  101. ​if (temp2 > 255
  102. ​temp4 = 255
  103. ​else
  104. ​temp4 = 0
  105. ​// Serial.println (temp1)
  106. ​// Serial.println (temp2)
  107. ​// Serial.println (temp3)
  108. ​// Serial.println (temp4)
  109. ​//Quy địn
  110. ​// + pin 3 - pin 5 1 động cơ bên trái quay tớ
  111. ​// + pin 6 - pin 9 1 động cơ bên phải quay tớ
  112. ​if ((temp2 > 0) && temp3 == 0 && temp4 == 0)
  113. ​analogWrite(3, temp2)
  114. ​digitalWrite(5, LOW)
  115. ​analogWrite(6, temp2)
  116. ​digitalWrite(9, LOW)
  117. ​else
  118. ​if ((temp1 > 0) && temp3 == 0 && temp4 == 0)
  119. ​digitalWrite(3, LOW)
  120. ​analogWrite(5, temp1)
  121. ​digitalWrite(6, LOW)
  122. ​analogWrite(9, temp1)
  123. ​else
  124. ​if ((temp2 > 0) && temp4 > 0)
  125. ​temp44 = (temp2 - temp4)
  126. ​if (temp44 < 0)
  127. ​temp44 = 0
  128. ​analogWrite(3, temp44)
  129. ​digitalWrite(5, LOW)
  130. ​analogWrite(6, temp2)
  131. ​digitalWrite(9, LOW)
  132. ​else
  133. ​if ((temp2 > 0) && temp3 > 0)
  134. ​temp33 = (temp2 - temp3)
  135. ​if (temp33 < 0)
  136. ​temp33 = 0
  137. ​analogWrite(3, temp2)
  138. ​digitalWrite(5, LOW)
  139. ​analogWrite(6, temp33)
  140. ​digitalWrite(9, LOW)
  141. ​else
  142. ​if ((temp1 > 0) && temp4 > 0)
  143. ​temp44 = (temp1 - temp4)
  144. ​if (temp44 < 0)
  145. ​temp44 = 0
  146. ​analogWrite(3, LOW)
  147. ​digitalWrite(5, temp44)
  148. ​analogWrite(6, LOW)
  149. ​digitalWrite(9, temp1)
  150. ​else
  151. ​if ((temp1 > 0) && temp3 > 0)
  152. ​temp33 = (temp1 - temp3)
  153. ​if (temp33 < 0)
  154. ​temp33 = 0
  155. ​analogWrite(3, LOW)
  156. ​digitalWrite(5, temp33)
  157. ​analogWrite(6, LOW)
  158. ​digitalWrite(9, temp1)
  159. ​else
  160. ​digitalWrite(3, LOW)
  161. ​digitalWrite(5, LOW)
  162. ​digitalWrite(6, LOW)
  163. ​digitalWrite(9, LOW)
  164. }

IV. Lời kết

Với việc đọc các giá trị temp của tay game....các bạn có thể dùng để điều khiển các thiết bị, robot !!! Chúc các bạn thành công!!

Kết nối tay game PlayStation với Arduino

Kết nối tay game PlayStation với Arduino Đăng ngày 24-03-2020  Bài viết trước mình đã giới thiệu với các bạn về Joystick, đó chính là phím di chuyển trên tay PlayStation. Nhưng các bạn hãy quan sát trong các kỳ thi robocon, hầu hết các thí sinh đều dùng tay PlayStation để điều khiển robot. Vậy làm sao để sử dụng tay PlayStation ?? 5/10 302

Thảo luận:

Để bình luận bạn phải đăng nhập thành viên.

File tương tự

Files cùng mục

 
Hỗ trợ kỹ thuật cho thành viên:
Số di động (Hotline): 092.129.6329
Thời gian làm việc:
Sáng: 8h-12h; Chiều: 13h30-17h30
(Nghỉ chiều T7, CN và các ngày lễ, tết)
Chat với Megacode
https://www.facebook.com/megacodevn
File gợi ý cho bạn
File tải nhiều nhất
Megacode.vn - Thư viện mã nguồn chia sẻ, tải file cho cộng đồng
Copyright © 2013-2020. All rights reserved. Bản quyền thuộc VinaGon
Văn phòng giao dịch: 13 Nguyễn Khắc Cần, Phan Chu Trinh, Hoàn Kiếm, Hà Nội.
Điện thoại: 092.129.6329;
Công ty TNHH Công nghệ số Rồng Việt
Người đại diện: Vũ Thị Hoa.
Số chứng nhận đăng ký kinh doanh: 0105801198. Ngày đăng ký: 10/07/2012