Advertisement
timor2542

[4 DOF Robot Arm Keyestudio][Lab 11][ATX-2] ZX-PSX2 Tester

Jul 21st, 2021
1,472
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Arduino 39.23 KB | None | 0 0
  1. /*
  2.  * Copyright (c) 2014 Innovative Experiment Co.,Ltd.
  3.  *
  4.  * Permission is hereby granted, free of charge, to any person obtaining a copy
  5.  * of this software and associated documentation files (the "Software"), to deal
  6.  * in the Software without restriction, including without limitation the rights
  7.  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  8.  * copies of the Software, and to permit persons to whom the Software is
  9.  * furnished to do so, subject to the following conditions:
  10.  *
  11.  * The above copyright notice and this permission notice shall be included in
  12.  * all copies or substantial portions of the Software.
  13.  *
  14.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  15.  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  16.  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  17.  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  18.  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  19.  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  20.  * THE SOFTWARE.
  21.  */
  22.  
  23. /*
  24.  * ตัวอย่างการใช้งานบอร์ด ATX-2 ร่วมกับ PS2 Controller
  25.  *
  26.  * โปรแกรมทดสอบการทำงานของ PS2 Controller
  27.  *
  28.  * ใช้ทดสอบ PS2 Controller โดยมีหน้าจอแสดงผลเป็นเลย์เอาท์ของปุ่มต่างๆบนตัว PS2 Controller (เป็นภาพสีเทา)
  29.  * เมื่อกดปุ่มใดๆบน PS2 Controller ก็จะแสดงบนหน้าจอเป็นภาพว่าปุ่มนั้นๆถูกกดอยู่ (สีแตกต่างกันไปตามแต่ละปุ่ม)
  30.  * และแสดงพิกัดของคันโยกอะนาล็อกด้วยจุดสีแดง ซึ่งจะเคลื่อนตำแหน่งไปตามการโยกคันโยก
  31.  */
  32.  
  33. #include <ATX2.h>                                // เรียกใช้งานไลบรารีสำหรับ ATX-2
  34. #include <PS2X_lib.h>                            // เรียกใช้งานไลบรารีสำหรับ PS2 Controller
  35.  
  36. #define PS2_DAT        24                        // กำหนดขา Data    เป็นขา 24
  37. #define PS2_CMD        25                        // กำหนดขา Command เป็นขา 25
  38. #define PS2_SEL        26                        // กำหนดขา Select  เป็นขา 26
  39. #define PS2_CLK        27                        // กำหนดขา Clock   เป็นขา 27
  40.  
  41. #define GLCD_DKGRAY    colorRGB(10, 20, 10)      // กำหนดค่าสีสำหรับสีเทาเข้ม
  42. #define GLCD_GRAY      colorRGB(27, 54, 27)      // กำหนดค่าสีสำหรับสีเทา
  43. #define GLCD_DKGREEN   colorRGB(0, 50, 0)        // กำหนดค่าสีสำหรับสีเขียวเข้ม
  44. #define GLCD_ORANGE    colorRGB(31, 40, 0)       // กำหนดค่าสีสำหรับสีส้ม
  45.  
  46. PS2X ps2x;                                       // ประกาศตัวแปรสำหรับ PS2 Controller
  47.  
  48. int oldLX = 0;                                   // เก็บค่าตำแหน่งพิกัด X ก่อนหน้าขอ Analog ฝั่งซ้าย
  49. int oldLY = 0;                                   // เก็บค่าตำแหน่งพิกัด Y ก่อนหน้าขอ Analog ฝั่งซ้าย
  50. int oldRX = 0;                                   // เก็บค่าตำแหน่งพิกัด X ก่อนหน้าขอ Analog ฝั่งขวา
  51. int oldRY = 0;                                   // เก็บค่าตำแหน่งพิกัด Y ก่อนหน้าขอ Analog ฝั่งขวา
  52.  
  53. void setup()
  54. {
  55.   XIO();
  56.   delay(1000);                                   // หน่วงเวลา 1 วินาทีเพื่อรอให้บอร์ดพร้อมทำงาน
  57.   glcdClear();                                   // เคลียร์ภาพทั้งหมดบนหน้าจอแสดงผล
  58.   glcdMode(1);                                   // กำหนดให้หน้าจอแสดงผลเป็นแนวนอน
  59.   glcdFillScreen(GLCD_WHITE);                    // กำหนดพื้นหลังของหน้าจอเป็นสีขาว
  60.   setTextBackgroundColor(GLCD_WHITE);            // กำหนดพื้นหลังของตัวหนังสือเป็นสีขาว
  61.  
  62.   setTextColor(GLCD_BLACK);                      // กำหนดตัวหนังสือเป็นสีดำ
  63.   glcd(0, 0, "Connecting");                      // แสดงข้อความเพื่อให้รู้ว่ากำลังทำการเชื่อมต่อกับ PS2 Controller
  64.      
  65.   initController();                              // เรียกฟังก์ชันทำการเชื่อมต่อกับ PS2 Controller
  66. }
  67.  
  68. void loop()
  69. {
  70.   ps2x.read_gamepad(false, false);               // อ่านข้อมูลจาก PS2 Controller
  71.  
  72.   checkButtonCircle();                           // เรียกฟังก์ชันเช็คว่าปุ่มวงกลมถูกกดหรือไม่
  73.   checkButtonCross();                            // เรียกฟังก์ชันเช็คว่าปุ่มกากบาทถูกกดหรือไม่
  74.   checkButtonSquare();                           // เรียกฟังก์ชันเช็คว่าปุ่มสี่เหลี่ยมถูกกดหรือไม่
  75.   checkButtonTriangle();                         // เรียกฟังก์ชันเช็คว่าปุ่มสามเหลี่ยมถูกกดหรือไม่
  76.  
  77.   checkButtonUp();                               // เรียกฟังก์ชันเช็คว่าปุ่มขึ้นถูกกดหรือไม่
  78.   checkButtonDown();                             // เรียกฟังก์ชันเช็คว่าปุ่มลงถูกกดหรือไม่
  79.   checkButtonLeft();                             // เรียกฟังก์ชันเช็คว่าปุ่มซ้ายถูกกดหรือไม่
  80.   checkButtonRight();                            // เรียกฟังก์ชันเช็คว่าปุ่มขวาถูกกดหรือไม่  
  81.  
  82.   checkButtonL1();                               // เรียกฟังก์ชันเช็คว่าปุ่ม L1 ถูกกดหรือไม่  
  83.   checkButtonL2();                               // เรียกฟังก์ชันเช็คว่าปุ่ม L2 ถูกกดหรือไม่
  84.   checkButtonL3();                               // เรียกฟังก์ชันเช็คว่าปุ่ม L3 ถูกกดหรือไม่
  85.   checkButtonR1();                               // เรียกฟังก์ชันเช็คว่าปุ่ม R1 ถูกกดหรือไม่
  86.   checkButtonR2();                               // เรียกฟังก์ชันเช็คว่าปุ่ม R2 ถูกกดหรือไม่
  87.   checkButtonR3();                               // เรียกฟังก์ชันเช็คว่าปุ่ม R3 ถูกกดหรือไม่
  88.  
  89.   checkButtonSelect();                           // เรียกฟังก์ชันเช็คว่าปุ่ม Select ถูกกดหรือไม่
  90.   checkButtonStart();                            // เรียกฟังก์ชันเช็คว่าปุ่ม Start ถูกกดหรือไม่
  91.  
  92.   checkAnalogL();                                // เรียกฟังก์ชันเช็คตำแหน่ง XY ของคันโยก Analog ฝั่งซ้าย
  93.   checkAnalogR();                                // เรียกฟังก์ชันเช็คตำแหน่ง XY ของคันโยก Analog ฝั่งขวา
  94.  
  95.   delay(50);                                     // หน่วงเวลา 50 มิลลิวินาที
  96. }
  97.  
  98. void initController() {                          // ฟังก์ชันสำหรับเชื่อมต่อกับ PS2 Controller
  99.   while(true)                                    // วนการทำงานเพื่อรอการเชื่อมต่อกับ PS2 Controller
  100.   {
  101.     // กำหนดขาที่จะเชื่อมต่กับ PS2 Controller โดยมีการเก็บค่าที่ส่งกลับมาเป็น Integer เพื่อรู้ได้ว่าเชื่อมต่อได้หรือไม่
  102.     int error = ps2x.config_gamepad(PS2_CLK, PS2_CMD, PS2_SEL, PS2_DAT, false, false);
  103.  
  104.     if(error == 0)                               // กรณีที่เชื่อมต่อได้ ไม่มีปัญหาอะไร (Error = 0)
  105.     {
  106.       initGlcd();                                // เตรียมภาพบนหน้าจอ
  107.       break;                                     // ออกจาก while(true)
  108.     }
  109.     delay(500);                                  // หน่วงเวลา 500 มิลลิวินาทีเพื่อรอการเชื่อมต่อครั้งต่อไปในกรณีที่เชื่อมต่อไม่สำเร็จ
  110.   }
  111. }
  112.  
  113. void initGlcd()                                  // ฟังก์ชันเตรียมภาพบนหน้าจอตอนเริ่มต้นทำงาน
  114. {
  115.   glcdClear();                                   // เคลียร์ภาพบนหน้าจอ
  116.   setTextColor(GLCD_RED);                        // กำหนดตัวอักษรเป็นสีแดง
  117.   glcd(0, 7, "PlayStation 2");                   // แสดงคำว่า PlayStation 2 ที่แถวแรกสุดตรงกลาง
  118.   setTextColor(GLCD_BLUE);                       // กำหนดตัวอักษรเป็นสีแดง
  119.   glcd(1, 9, "Controller");                      // แสดงคำว่า Controller ที่แถวที่สองตรงกลาง
  120.   setTextColor(GLCD_BLACK);                      // กำหนดตัวอักษรเป็นสีแดง
  121.   glcd(2, 13, "OK");                             // แสดงคำว่า OK ที่แถวที่สามตรงกลาง
  122.    
  123.   drawButtonUpOff();                             // เรียกฟังก์ชันวาดภาพปุ่มขึ้นที่ยังไม่ถูกกด (เป็นภาพสีเทา)
  124.   drawButtonDownOff();                           // เรียกฟังก์ชันวาดภาพปุ่มลงที่ยังไม่ถูกกด (เป็นภาพสีเทา)
  125.   drawButtonLeftOff();                           // เรียกฟังก์ชันวาดภาพปุ่มซ้ายที่ยังไม่ถูกกด (เป็นภาพสีเทา)
  126.   drawButtonRightOff();                          // เรียกฟังก์ชันวาดภาพปุ่มขวาที่ยังไม่ถูกกด (เป็นภาพสีเทา)
  127.  
  128.   drawButtonCircleOff();                         // เรียกฟังก์ชันวาดภาพปุ่มวงกลมที่ยังไม่ถูกกด (เป็นภาพสีเทา)
  129.   drawButtonSquareOff();                         // เรียกฟังก์ชันวาดภาพปุ่มสี่เหลี่ยมที่ยังไม่ถูกกด (เป็นภาพสีเทา)
  130.   drawButtonCrossOff();                          // เรียกฟังก์ชันวาดภาพปุ่มกากบาทที่ยังไม่ถูกกด (เป็นภาพสีเทา)
  131.   drawButtonTriangleOff();                       // เรียกฟังก์ชันวาดภาพปุ่มสามเหลี่ยมที่ยังไม่ถูกกด (เป็นภาพสีเทา)
  132.  
  133.   drawButtonR1Off();                             // เรียกฟังก์ชันวาดภาพปุ่ม R1 ที่ยังไม่ถูกกด (เป็นภาพสีเทา)
  134.   drawButtonR2Off();                             // เรียกฟังก์ชันวาดภาพปุ่ม R2 ที่ยังไม่ถูกกด (เป็นภาพสีเทา)
  135.   drawButtonR3Off();                             // เรียกฟังก์ชันวาดภาพปุ่ม R3 ที่ยังไม่ถูกกด (เป็นภาพสีเทา)
  136.   drawButtonL1Off();                             // เรียกฟังก์ชันวาดภาพปุ่ม L1 ที่ยังไม่ถูกกด (เป็นภาพสีเทา)
  137.   drawButtonL2Off();                             // เรียกฟังก์ชันวาดภาพปุ่ม L2 ที่ยังไม่ถูกกด (เป็นภาพสีเทา)
  138.   drawButtonL3Off();                             // เรียกฟังก์ชันวาดภาพปุ่ม L3 ที่ยังไม่ถูกกด (เป็นภาพสีเทา)
  139.  
  140.   drawButtonSelectOff();                         // เรียกฟังก์ชันวาดภาพปุ่ม Select ที่ยังไม่ถูกกด (เป็นภาพสีเทา)
  141.   drawButtonStartOff();                          // เรียกฟังก์ชันวาดภาพปุ่ม Start ที่ยังไม่ถูกกด (เป็นภาพสีเทา)
  142.  
  143.   drawAnalogBorder();                            // เรียกฟังก์ชันวาดกรอบสี่เหลี่ยมสำหรับพื้นที่แสดงพิกัด XY ของคันโยก Analog
  144. }
  145.  
  146. void checkButtonUp()                             // ฟังก์ชันเช็คว่าปุ่มขึ้นถูกกดหรือไม่
  147. {
  148.   if(ps2x.ButtonPressed(PSB_PAD_UP))             // ถ้าปุ่มขึ้นถูกกด  
  149.   {
  150.     drawButtonUpOn();                            // เรียกฟังก์ชันวาดภาพปุ่มขึ้นถูกกด
  151.   }                                          
  152.   else if(ps2x.ButtonReleased(PSB_PAD_UP))       // ถ้าปุ่มขึ้นไม่ถูกกด
  153.   {
  154.     drawButtonUpOff();                           // เรียกฟังก์ชันวาดภาพปุ่มขึ้นไม่ถูกกด
  155.   }
  156. }
  157.  
  158. void drawButtonUpOn()                            // ฟังก์ชันสำหรับวาดภาพปุ่มขึ้นที่กำลังถูกกดอยู่
  159. {
  160.   glcdFillRect(25, 29, 10, 12, GLCD_DKGRAY);
  161.   glcdPixel(26, 40, GLCD_WHITE);
  162.   glcdPixel(27, 40, GLCD_WHITE);
  163.   glcdPixel(26, 39, GLCD_WHITE);
  164.   glcdPixel(35, 40, GLCD_WHITE);
  165.   glcdPixel(34, 40, GLCD_WHITE);
  166.   glcdPixel(35, 39, GLCD_WHITE);
  167. }
  168.  
  169. void drawButtonUpOff()                           // ฟังก์ชันสำหรับวาดภาพปุ่มขึ้นที่ไม่ถูกกด
  170. {
  171.   glcdFillRect(25, 29, 10, 12, GLCD_GRAY);
  172.   glcdPixel(26, 40, GLCD_WHITE);
  173.   glcdPixel(27, 40, GLCD_WHITE);
  174.   glcdPixel(26, 39, GLCD_WHITE);
  175.   glcdPixel(35, 40, GLCD_WHITE);
  176.   glcdPixel(34, 40, GLCD_WHITE);
  177.   glcdPixel(35, 39, GLCD_WHITE);
  178. }
  179.  
  180. void checkButtonDown()                           // ฟังก์ชันเช็คว่าปุ่มลงถูกกดหรือไม่            
  181. {
  182.   if(ps2x.ButtonPressed(PSB_PAD_DOWN))           // ถ้าปุ่มลงถูกกด  
  183.   {
  184.     drawButtonDownOn();                          // เรียกฟังก์ชันวาดภาพปุ่มลงถูกกด
  185.   }
  186.   else if(ps2x.ButtonReleased(PSB_PAD_DOWN))     // ถ้าปุ่มลงไม่ถูกกด  
  187.   {
  188.     drawButtonDownOff();                         // เรียกฟังก์ชันวาดภาพปุ่มลงไม่ถูกกด
  189.   }
  190. }
  191.  
  192. void drawButtonDownOn()                          // ฟังก์ชันสำหรับวาดภาพปุ่มลงที่กำลังถูกกดอยู่
  193. {
  194.   glcdFillRect(25, 60, 10, 12, GLCD_DKGRAY);
  195.   glcdPixel(26, 60, GLCD_WHITE);
  196.   glcdPixel(27, 60, GLCD_WHITE);
  197.   glcdPixel(26, 61, GLCD_WHITE);
  198.   glcdPixel(35, 60, GLCD_WHITE);
  199.   glcdPixel(34, 60, GLCD_WHITE);
  200.   glcdPixel(35, 61, GLCD_WHITE);
  201. }
  202.  
  203. void drawButtonDownOff()                         // ฟังก์ชันสำหรับวาดภาพปุ่มลงที่ไม่ถูกกด
  204. {
  205.   glcdFillRect(25, 60, 10, 12, GLCD_GRAY);
  206.   glcdPixel(26, 60, GLCD_WHITE);
  207.   glcdPixel(27, 60, GLCD_WHITE);
  208.   glcdPixel(26, 61, GLCD_WHITE);
  209.   glcdPixel(35, 60, GLCD_WHITE);
  210.   glcdPixel(34, 60, GLCD_WHITE);
  211.   glcdPixel(35, 61, GLCD_WHITE);
  212. }
  213.  
  214. void checkButtonLeft()                           // ฟังก์ชันเช็คว่าปุ่มซ้ายถูกกดหรือไม่  
  215. {
  216.   if(ps2x.ButtonPressed(PSB_PAD_LEFT))           // ถ้าปุ่มซ้ายถูกกด  
  217.   {
  218.     drawButtonLeftOn();                          // เรียกฟังก์ชันวาดภาพปุ่มซ้ายถูกกด
  219.   }
  220.   else if(ps2x.ButtonReleased(PSB_PAD_LEFT))     // ถ้าปุ่มซ้ายไม่ถูกกด  
  221.   {
  222.     drawButtonLeftOff();                         // เรียกฟังก์ชันวาดภาพปุ่มซ้ายไม่ถูกกด
  223.   }
  224. }
  225.  
  226. void drawButtonLeftOn()                          // ฟังก์ชันสำหรับวาดภาพปุ่มซ้ายที่กำลังถูกกด
  227. {
  228.   glcdFillRect(10, 45, 12, 10, GLCD_DKGRAY);
  229.   glcdPixel(22, 45, GLCD_WHITE);
  230.   glcdPixel(21, 45, GLCD_WHITE);
  231.   glcdPixel(22, 46, GLCD_WHITE);
  232.   glcdPixel(22, 54, GLCD_WHITE);
  233.   glcdPixel(21, 54, GLCD_WHITE);
  234.   glcdPixel(22, 53, GLCD_WHITE);
  235. }
  236.  
  237. void drawButtonLeftOff()                         // ฟังก์ชันสำหรับวาดภาพปุ่มซ้ายที่ไม่ถูกกด
  238. {
  239.   glcdFillRect(10, 45, 12, 10, GLCD_GRAY);
  240.   glcdPixel(22, 45, GLCD_WHITE);
  241.   glcdPixel(21, 45, GLCD_WHITE);
  242.   glcdPixel(22, 46, GLCD_WHITE);
  243.   glcdPixel(22, 54, GLCD_WHITE);
  244.   glcdPixel(21, 54, GLCD_WHITE);
  245.   glcdPixel(22, 53, GLCD_WHITE);
  246. }
  247.  
  248.  
  249. void checkButtonRight()                          // ฟังก์ชันเช็คว่าปุ่มขวาถูกกดหรือไม่    
  250. {
  251.   if(ps2x.ButtonPressed(PSB_PAD_RIGHT))          // ถ้าปุ่มขวาถูกกด
  252.   {
  253.     drawButtonRightOn();                         // เรียกฟังก์ชันวาดภาพปุ่มขวาถูกกด
  254.   }
  255.   else if(ps2x.ButtonReleased(PSB_PAD_RIGHT))    // ถ้าปุ่มขวาไม่ถูกกด  
  256.   {
  257.     drawButtonRightOff();                        // เรียกฟังก์ชันวาดภาพปุ่มขวาไม่ถูกกด
  258.   }
  259. }
  260.  
  261. void drawButtonRightOn()                         // ฟังก์ชันสำหรับวาดภาพปุ่มขวาที่กำลังถูกกด
  262. {
  263.   glcdFillRect(38, 45, 12, 10, GLCD_DKGRAY);
  264.   glcdPixel(39, 45, GLCD_WHITE);
  265.   glcdPixel(40, 45, GLCD_WHITE);
  266.   glcdPixel(39, 46, GLCD_WHITE);
  267.   glcdPixel(39, 54, GLCD_WHITE);
  268.   glcdPixel(40, 54, GLCD_WHITE);
  269.   glcdPixel(39, 53, GLCD_WHITE);
  270. }
  271.  
  272. void drawButtonRightOff()                        // ฟังก์ชันสำหรับวาดภาพปุ่มขวาที่ไม่ถูกกด
  273. {
  274.   glcdFillRect(38, 45, 12, 10, GLCD_GRAY);
  275.   glcdPixel(39, 45, GLCD_WHITE);
  276.   glcdPixel(40, 45, GLCD_WHITE);
  277.   glcdPixel(39, 46, GLCD_WHITE);
  278.   glcdPixel(39, 54, GLCD_WHITE);
  279.   glcdPixel(40, 54, GLCD_WHITE);
  280.   glcdPixel(39, 53, GLCD_WHITE);
  281. }
  282.  
  283. void checkButtonR1()                             // ฟังก์ชันเช็คว่าปุ่ม R1 ถูกกดหรือไม่    
  284. {
  285.   if(ps2x.ButtonPressed(PSB_R1))                 // ถ้าปุ่ม R1 ถูกกด
  286.   {
  287.     drawButtonR1On();                            // เรียกฟังก์ชันวาดภาพปุ่ม R1 ถูกกด
  288.   }
  289.   else if(ps2x.ButtonReleased(PSB_R1))           // ถ้าปุ่ม R1 ไม่ถูกกด
  290.   {
  291.     drawButtonR1Off();                           // เรียกฟังก์ชันวาดภาพปุ่ม R1 ไม่ถูกกด
  292.   }
  293. }
  294.  
  295. void drawButtonR1On()                            // ฟังก์ชันสำหรับวาดภาพปุ่ม R1 ที่กำลังถูกกด
  296. {  
  297.   setTextBackgroundColor(GLCD_DKGRAY);
  298.   glcdFillRect(149, 10, 10, 8, GLCD_DKGRAY);
  299.   setTextColor(GLCD_WHITE);
  300.   glcd(1, 21, "  R1");
  301. }
  302.  
  303. void drawButtonR1Off()                           // ฟังก์ชันสำหรับวาดภาพปุ่ม R1 ที่ไม่ถูกกด
  304. {
  305.   setTextBackgroundColor(GLCD_GRAY);
  306.   setTextColor(GLCD_WHITE);
  307.   glcdFillRect(149, 10, 10, 8, GLCD_GRAY);
  308.   glcd(1, 21, "  R1");
  309. }
  310.  
  311. void checkButtonR2()                             // ฟังก์ชันเช็คว่าปุ่ม R2 ถูกกดหรือไม่  
  312. {
  313.   if(ps2x.ButtonPressed(PSB_R2))                 // ถ้าปุ่ม R2 ถูกกด
  314.   {
  315.     drawButtonR2On();                            // เรียกฟังก์ชันวาดภาพปุ่ม R2 ถูกกด
  316.   }
  317.   else if(ps2x.ButtonReleased(PSB_R2))           // ถ้าปุ่ม R2 ไม่ถูกกด
  318.   {
  319.     drawButtonR2Off();                           // เรียกฟังก์ชันวาดภาพปุ่ม R2 ไม่ถูกกด
  320.   }
  321. }
  322.  
  323. void drawButtonR2On()                            // ฟังก์ชันสำหรับวาดภาพปุ่ม R2 ที่กำลังถูกกด
  324. {
  325.   setTextBackgroundColor(GLCD_DKGRAY);
  326.   setTextColor(GLCD_WHITE);
  327.   glcdFillRect(149, 0, 10, 8, GLCD_DKGRAY);
  328.   glcd(0, 21, "  R2");
  329. }
  330.  
  331. void drawButtonR2Off()                           // ฟังก์ชันสำหรับวาดภาพปุ่ม R2 ที่ไม่ถูกกด
  332. {
  333.   setTextBackgroundColor(GLCD_GRAY);
  334.   setTextColor(GLCD_WHITE);
  335.   glcdFillRect(149, 0, 10, 8, GLCD_GRAY);
  336.   glcd(0, 21, "  R2");
  337. }
  338.  
  339. void checkButtonR3()                             // ฟังก์ชันเช็คว่าปุ่ม R3 ถูกกดหรือไม่  
  340. {
  341.   if(ps2x.ButtonPressed(PSB_R3))                 // ถ้าปุ่ม R3 ถูกกด
  342.   {
  343.     drawButtonR3On();                            // เรียกฟังก์ชันวาดภาพปุ่ม R3 ถูกกด
  344.   }
  345.   else if(ps2x.ButtonReleased(PSB_R3))           // ถ้าปุ่ม R3 ไม่ถูกกด
  346.   {
  347.     drawButtonR3Off();                           // เรียกฟังก์ชันวาดภาพปุ่ม R3 ไม่ถูกกด
  348.   }
  349. }
  350.  
  351. void drawButtonR3On()                            // ฟังก์ชันสำหรับวาดภาพปุ่ม R3 ที่กำลังถูกกด  
  352. {
  353.   setTextBackgroundColor(GLCD_DKGRAY);
  354.   setTextColor(GLCD_WHITE);
  355.   glcdFillRect(149, 120, 10, 8, GLCD_DKGRAY);
  356.   glcd(12, 21, "  R3");
  357. }
  358.  
  359. void drawButtonR3Off()                           // ฟังก์ชันสำหรับวาดภาพปุ่ม R3 ที่ไม่ถูกกด  
  360. {
  361.   setTextBackgroundColor(GLCD_GRAY);
  362.   setTextColor(GLCD_WHITE);
  363.   glcdFillRect(149, 120, 10, 8, GLCD_GRAY);
  364.   glcd(12, 21, "  R3");
  365. }
  366.  
  367. void checkButtonL1()                             // ฟังก์ชันเช็คว่าปุ่ม L1 ถูกกดหรือไม่    
  368. {
  369.   if(ps2x.ButtonPressed(PSB_L1))                 // ถ้าปุ่ม L1 ถูกกด
  370.   {
  371.     drawButtonL1On();                            // เรียกฟังก์ชันวาดภาพปุ่ม L1 ถูกกด
  372.   }
  373.   else if(ps2x.ButtonReleased(PSB_L1))           // ถ้าปุ่ม L1 ไม่ถูกกด  
  374.   {                                              
  375.     drawButtonL1Off();                           // เรียกฟังก์ชันวาดภาพปุ่ม L1 ไม่ถูกกด
  376.   }
  377. }
  378.  
  379. void drawButtonL1On()                            // ฟังก์ชันสำหรับวาดภาพปุ่ม L1 ที่กำลังถูกกด  
  380. {
  381.   setTextBackgroundColor(GLCD_DKGRAY);
  382.   setTextColor(GLCD_WHITE);
  383.   glcd(1, 0, "  L1  ");
  384. }
  385.  
  386. void drawButtonL1Off()                           // ฟังก์ชันสำหรับวาดภาพปุ่ม L1 ที่ไม่ถูกกด
  387. {
  388.   setTextBackgroundColor(GLCD_GRAY);
  389.   setTextColor(GLCD_WHITE);
  390.   glcd(1, 0, "  L1  ");
  391. }
  392.  
  393. void checkButtonL2()                             // ฟังก์ชันเช็คว่าปุ่ม L2 ถูกกดหรือไม่  
  394. {
  395.   if(ps2x.ButtonPressed(PSB_L2))                 // ถ้าปุ่ม L2 ถูกกด  
  396.   {
  397.     drawButtonL2On();                            // เรียกฟังก์ชันวาดภาพปุ่ม L2 ถูกกด
  398.   }
  399.   else if(ps2x.ButtonReleased(PSB_L2))           // ถ้าปุ่ม L2 ไม่ถูกกด  
  400.   {
  401.     drawButtonL2Off();                           // เรียกฟังก์ชันวาดภาพปุ่ม L2 ไม่ถูกกด
  402.   }
  403. }
  404.  
  405. void drawButtonL2On()                            // ฟังก์ชันสำหรับวาดภาพปุ่ม L2 ที่กำลังถูกกด  
  406. {
  407.   setTextBackgroundColor(GLCD_DKGRAY);
  408.   setTextColor(GLCD_WHITE);
  409.   glcd(0, 0, "  L2  ");
  410. }
  411.  
  412. void drawButtonL2Off()                           // ฟังก์ชันสำหรับวาดภาพปุ่ม L2 ที่ไม่ถูกกด  
  413. {
  414.   setTextBackgroundColor(GLCD_GRAY);
  415.   setTextColor(GLCD_WHITE);
  416.   glcd(0, 0, "  L2  ");
  417. }
  418.  
  419. void checkButtonL3()                             // ฟังก์ชันเช็คว่าปุ่ม L3 ถูกกดหรือไม่  
  420. {
  421.   if(ps2x.ButtonPressed(PSB_L3))                 // ถ้าปุ่ม L3 ถูกกด  
  422.   {
  423.     drawButtonL3On();                            // เรียกฟังก์ชันวาดภาพปุ่ม L3 ถูกกด
  424.   }
  425.   else if(ps2x.ButtonReleased(PSB_L3))           // ถ้าปุ่ม L3 ไม่ถูกกด    
  426.   {
  427.     drawButtonL3Off();                           // เรียกฟังก์ชันวาดภาพปุ่ม L3 ไม่ถูกกด
  428.   }
  429. }
  430.  
  431. void drawButtonL3On()                            // ฟังก์ชันสำหรับวาดภาพปุ่ม L3 ที่กำลังถูกกด  
  432. {
  433.   setTextBackgroundColor(GLCD_DKGRAY);
  434.   setTextColor(GLCD_WHITE);
  435.   glcd(12, 0, "  L3  ");
  436. }
  437.  
  438. void drawButtonL3Off()                           // ฟังก์ชันสำหรับวาดภาพปุ่ม L3 ที่ไม่ถูกกด  
  439. {
  440.   setTextBackgroundColor(GLCD_GRAY);
  441.   setTextColor(GLCD_WHITE);
  442.   glcd(12, 0, "  L3  ");
  443. }
  444.  
  445. void checkButtonCircle()                         // ฟังก์ชันเช็คว่าปุ่มวงกลมถูกกดหรือไม่    
  446. {
  447.   if(ps2x.ButtonPressed(PSB_CIRCLE))             // ถ้าปุ่มวงกลมถูกกด    
  448.   {
  449.     drawButtonCircleOn();                        // เรียกฟังก์ชันวาดภาพปุ่มวงกลมถูกกด
  450.   }
  451.   else if(ps2x.ButtonReleased(PSB_CIRCLE))       // ถ้าปุ่มวงกลมไม่ถูกกด  
  452.   {
  453.     drawButtonCircleOff();                       // เรียกฟังก์ชันวาดภาพปุ่มวงกลมไม่ถูกกด
  454.   }
  455. }
  456.  
  457. void drawButtonCircleOn()                        // ฟังก์ชันสำหรับวาดภาพปุ่มวงกลมที่กำลังถูกกด
  458. {
  459.   glcdCircle(140, 48, 6, GLCD_RED);
  460. }
  461.  
  462. void drawButtonCircleOff()                       // ฟังก์ชันสำหรับวาดภาพปุ่มวงกลมที่ไม่ถูกกด    
  463. {
  464.   glcdCircle(140, 48, 6, GLCD_GRAY);
  465. }
  466.  
  467. void checkButtonCross()                          // ฟังก์ชันเช็คว่าปุ่มกากบาทถูกกดหรือไม่  
  468. {
  469.   if(ps2x.ButtonPressed(PSB_CROSS))              // ถ้าปุ่มกากบาทถูกกด    
  470.   {
  471.     drawButtonCrossOn();                         // เรียกฟังก์ชันวาดภาพปุ่มกากบาทถูกกด
  472.   }
  473.   else if(ps2x.ButtonReleased(PSB_CROSS))        // ถ้าปุ่มกากบาทไม่ถูกกด  
  474.   {
  475.     drawButtonCrossOff();                        // เรียกฟังก์ชันวาดภาพปุ่มกากบาทไม่ถูกกด
  476.   }
  477. }
  478.  
  479. void drawButtonCrossOn()                         // ฟังก์ชันสำหรับวาดภาพปุ่มกากบาทที่กำลังถูกกด
  480. {
  481.   glcdLine(118, 58, 130, 70, GLCD_BLUE);
  482.   glcdLine(130, 58, 118, 70, GLCD_BLUE);
  483. }
  484.  
  485. void drawButtonCrossOff()                        // ฟังก์ชันสำหรับวาดภาพปุ่มกากบาทที่ไม่ถูกกด    
  486. {
  487.   glcdLine(118, 58, 130, 70, GLCD_GRAY);
  488.   glcdLine(130, 58, 118, 70, GLCD_GRAY);
  489. }
  490.  
  491. void checkButtonSquare()                         // ฟังก์ชันเช็คว่าปุ่มสี่เหลี่ยมถูกกดหรือไม่
  492. {
  493.   if(ps2x.ButtonPressed(PSB_SQUARE))             // ถ้าปุ่มสี่เหลี่ยมถูกกด    
  494.   {
  495.     drawButtonSquareOn();                        // เรียกฟังก์ชันวาดภาพปุ่มสี่เหลี่ยมถูกกด
  496.   }
  497.   else if(ps2x.ButtonReleased(PSB_SQUARE))       // ถ้าปุ่มสี่เหลี่ยมไม่ถูกกด  
  498.   {
  499.     drawButtonSquareOff();                       // เรียกฟังก์ชันวาดภาพปุ่มสี่เหลี่ยมไม่ถูกกด
  500.   }
  501. }
  502.  
  503. void drawButtonSquareOn()                        // ฟังก์ชันสำหรับวาดภาพปุ่มสี่เหลี่ยมที่กำลังถูกกด
  504. {
  505.   glcdRect(102, 43, 12, 12, GLCD_MAGENTA);
  506. }
  507.  
  508. void drawButtonSquareOff()                       // ฟังก์ชันสำหรับวาดภาพปุ่มสี่เหลี่ยมที่ไม่ถูกกด  
  509. {
  510.   glcdRect(102, 43, 12, 12, GLCD_GRAY);
  511. }
  512.  
  513. void checkButtonTriangle()                       // ฟังก์ชันเช็คว่าปุ่มสามเหลี่ยมถูกกดหรือไม่
  514. {
  515.   if(ps2x.ButtonPressed(PSB_TRIANGLE))           // ถ้าปุ่มสามเหลี่ยมถูกกด
  516.   {
  517.     drawButtonTriangleOn();                      // เรียกฟังก์ชันวาดภาพปุ่มสามเหลี่ยมถูกกด
  518.   }
  519.   else if(ps2x.ButtonReleased(PSB_TRIANGLE))     // ถ้าปุ่มสามเหลี่ยมไม่ถูกกด
  520.   {
  521.     drawButtonTriangleOff();                     // เรียกฟังก์ชันวาดภาพปุ่มสามเหลี่ยมไม่ถูกกด
  522.   }  
  523. }
  524.  
  525. void drawButtonTriangleOn()                      // ฟังก์ชันสำหรับวาดภาพปุ่มสามเหลี่ยมที่ถูกกด  
  526. {
  527.   glcdLine(117, 40, 131, 40, GLCD_DKGREEN);
  528.   glcdLine(117, 40, 124, 28, GLCD_DKGREEN);
  529.   glcdLine(131, 40, 124, 28, GLCD_DKGREEN);
  530. }
  531.  
  532. void drawButtonTriangleOff()                     // ฟังก์ชันสำหรับวาดภาพปุ่มสามเหลี่ยมที่ไม่ถูกกด  
  533. {
  534.   glcdLine(117, 40, 131, 40, GLCD_GRAY);
  535.   glcdLine(117, 40, 124, 28, GLCD_GRAY);
  536.   glcdLine(131, 40, 124, 28, GLCD_GRAY);
  537. }
  538.  
  539. void checkButtonSelect()                         // ฟังก์ชันเช็คว่าปุ่ม Select ถูกกดหรือไม่  
  540. {
  541.   if(ps2x.ButtonPressed(PSB_SELECT))             // ถ้าปุ่ม Select ถูกกด
  542.   {
  543.     drawButtonSelectOn();                        // เรียกฟังก์ชันวาดภาพปุ่ม Select ถูกกด
  544.   }
  545.   else if(ps2x.ButtonReleased(PSB_SELECT))       // ถ้าปุ่ม Select ไม่ถูกกด  
  546.   {
  547.     drawButtonSelectOff();                       // เรียกฟังก์ชันวาดภาพปุ่ม Select ไม่ถูกกด
  548.   }  
  549. }
  550.  
  551. void drawButtonSelectOn()                        // ฟังก์ชันสำหรับวาดภาพปุ่ม Select ที่ถูกกด  
  552. {
  553.   glcdFillRect(62, 65, 12, 9, GLCD_ORANGE);
  554. }
  555.  
  556. void drawButtonSelectOff()                       // ฟังก์ชันสำหรับวาดภาพปุ่ม Select ที่ไม่ถูกกด  
  557. {
  558.   glcdFillRect(62, 65, 12, 9, GLCD_GRAY);
  559. }
  560.  
  561. void checkButtonStart()                          // ฟังก์ชันเช็คว่าปุ่ม Start ถูกกดหรือไม่  
  562. {
  563.   if(ps2x.ButtonPressed(PSB_START))              // ถ้าปุ่ม Start ถูกกด
  564.   {
  565.     drawButtonStartOn();                         // เรียกฟังก์ชันวาดภาพปุ่ม Start ถูกกด
  566.   }
  567.   else if(ps2x.ButtonReleased(PSB_START))        // ถ้าปุ่ม Start ไม่ถูกกด  
  568.   {
  569.     drawButtonStartOff();                        // เรียกฟังก์ชันวาดภาพปุ่ม Start ไม่ถูกกด
  570.   }  
  571. }
  572.  
  573. void drawButtonStartOn()                         // ฟังก์ชันสำหรับวาดภาพปุ่ม Start ที่ถูกกด
  574. {
  575.   glcdLine(84, 65, 84, 73, GLCD_ORANGE);
  576.   glcdLine(85, 65, 85, 73, GLCD_ORANGE);
  577.   glcdLine(86, 65, 86, 73, GLCD_ORANGE);
  578.   glcdLine(87, 66, 87, 72, GLCD_ORANGE);
  579.   glcdLine(88, 66, 88, 72, GLCD_ORANGE);
  580.   glcdLine(89, 66, 89, 72, GLCD_ORANGE);
  581.   glcdLine(90, 67, 90, 71, GLCD_ORANGE);
  582.   glcdLine(91, 67, 91, 71, GLCD_ORANGE);
  583.   glcdLine(92, 67, 92, 71, GLCD_ORANGE);
  584.   glcdLine(93, 68, 93, 70, GLCD_ORANGE);
  585.   glcdLine(94, 68, 94, 70, GLCD_ORANGE);
  586.   glcdLine(95, 68, 95, 70, GLCD_ORANGE);
  587.   glcdPixel(96, 69, GLCD_ORANGE);
  588. }
  589.  
  590. void drawButtonStartOff()                        // ฟังก์ชันสำหรับวาดภาพปุ่ม Start ที่ไมถูกกด
  591. {
  592.   glcdLine(84, 65, 84, 73, GLCD_GRAY);
  593.   glcdLine(85, 65, 85, 73, GLCD_GRAY);
  594.   glcdLine(86, 65, 86, 73, GLCD_GRAY);
  595.   glcdLine(87, 66, 87, 72, GLCD_GRAY);
  596.   glcdLine(88, 66, 88, 72, GLCD_GRAY);
  597.   glcdLine(89, 66, 89, 72, GLCD_GRAY);
  598.   glcdLine(90, 67, 90, 71, GLCD_GRAY);
  599.   glcdLine(91, 67, 91, 71, GLCD_GRAY);
  600.   glcdLine(92, 67, 92, 71, GLCD_GRAY);
  601.   glcdLine(93, 68, 93, 70, GLCD_GRAY);
  602.   glcdLine(94, 68, 94, 70, GLCD_GRAY);
  603.   glcdLine(95, 68, 95, 70, GLCD_GRAY);
  604.   glcdPixel(96, 69, GLCD_GRAY);
  605. }
  606.  
  607. void checkAnalogL()                              // ฟังก์ชันสำหรับเช็คค่าจากคันโยก Analog ฝั่งซ้าย
  608. {
  609.   int x = ps2x.Analog(PSS_LX);                   // อ่านค่าคันโยก Analog ในแกน X
  610.   int y = ps2x.Analog(PSS_LY);                   // อ่านค่าคันโยก Analog ในแกน Y
  611.  
  612.   if(x != oldLX || y != oldLY)                   // ถ้า X หรือ Y มีค่าไม่เท่ากับของเดิมที่เก็บไว้ในตัวแปร oldLX และ oldLY
  613.   {
  614.     oldLX = map(oldLX, 0, 255, 26, 54);          // ลบภาพเดิมออกแล้ววาดใหม่ให้เป็นพิกัด XY ล่าสุดตามคันโยก Analog ฝั่งซ้าย
  615.     oldLY = map(oldLY, 0, 255, 82, 110);
  616.     glcdPixel(oldLX, oldLY, GLCD_WHITE);
  617.     glcdCircle(oldLX, oldLY, 1, GLCD_WHITE);
  618.     oldLX = x;
  619.     oldLY = y;
  620.     x = map(x, 0, 255, 26, 54);
  621.     y = map(y, 0, 255, 82, 110);
  622.     glcdPixel(x, y, GLCD_RED);
  623.     glcdCircle(x, y, 1, GLCD_RED);
  624.   }
  625. }
  626.  
  627. void checkAnalogR()                              // ฟังก์ชันสำหรับเช็คค่าจากคันโยก Analog ฝั่งขวา
  628. {
  629.   int x = ps2x.Analog(PSS_RX);                   // อ่านค่าคันโยก Analog ในแกน X
  630.   int y = ps2x.Analog(PSS_RY);                   // อ่านค่าคันโยก Analog ในแกน Y
  631.  
  632.   if(x != oldRX || y != oldRY)                  
  633.   {
  634.     oldRX = map(oldRX, 0, 255, 106, 134);        // ลบภาพเดิมออกแล้ววาดใหม่ให้เป็นพิกัด XY ล่าสุดตามคันโยก Analog ฝั่งขวา
  635.     oldRY = map(oldRY, 0, 255, 82, 110);
  636.     glcdPixel(oldRX, oldRY, GLCD_WHITE);
  637.     glcdCircle(oldRX, oldRY, 1, GLCD_WHITE);
  638.     oldRX = x;
  639.     oldRY = y;
  640.     x = map(x, 0, 255, 106, 134);
  641.     y = map(y, 0, 255, 82, 110);
  642.     glcdPixel(x, y, GLCD_RED);
  643.     glcdCircle(x, y, 1, GLCD_RED);
  644.   }
  645. }
  646.  
  647. void drawAnalogBorder()                          // ฟังก์ชันสำหรับวาดกรอบแสดงขอบเขตของพื้นที่ที่แสดงตำแหน่งคันโยก Analog
  648. {
  649.   glcdRect(24, 80, 33, 33, GLCD_GRAY);           // วาดกรอบสำหรับคันโยก Analog ฝั่งซ้าย
  650.   glcdRect(104, 80, 33, 33, GLCD_GRAY);          // วาดกรอบสำหรับคันโยก Analog ฝั่งขวา
  651. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement