/คลิก คู่มือ และการประกอบ
/////////////
#include <PS2X_lib.h>                  // เรียกใช้งานไลบรารีสำหรับจอยสติ๊ก PS2
#include <Servo.h>
Servo myservo1;////ตีวยืด
Servo myservo2;////ตีวคีบ
int potpin = 0;
int pos1=90;
int pos2=90;
int DLS=50;
const int Pin_A =  4;
const int Pin_B =  5;
const int Pin_C =  6;
const int Pin_D =  7;
const int Pin_E =  8;
const int Pin_F =  9;
const int Pin_G =  10;
const int Pin_H =  11;
///////////////////////////////////////////////////////---------------------------------
int lelay = 2;
#define PS2_DAT   A1                   // 
#define PS2_CMD   A2                  // 
#define PS2_CLK   A3
#define PS2_SEL   A4                  //
PS2X ps2x;                             // ประกาศตัวแปรสำหรับจอยสติ๊ก PS2
/////////////////////////////////////////////
int posA = 20 ;
void setup()
{
pinMode(Pin_A, OUTPUT);
pinMode(Pin_B, OUTPUT);
pinMode(Pin_C, OUTPUT);
pinMode(Pin_D, OUTPUT);
pinMode(Pin_E, OUTPUT);
pinMode(Pin_F, OUTPUT);
pinMode(Pin_G, OUTPUT);
pinMode(Pin_H, OUTPUT);
  myservo1.attach(2); //ตัวยืด
  myservo2.attach(3);//ตัวคีบ
 digitalWrite(Pin_A, LOW);
digitalWrite(Pin_B, LOW);
digitalWrite(Pin_C, LOW);
digitalWrite(Pin_D, LOW);
digitalWrite(Pin_E, LOW);
digitalWrite(Pin_F, LOW);
digitalWrite(Pin_G, LOW);
digitalWrite(Pin_H, LOW); 
  delay(100);
  Serial.begin(9600);
  Serial.println("Connecting");        // แสดงข้อความเพื่อแจ้งว่า กำลังเชื่อมต่อกับจอยสติ๊ก
  while (true)                         // วนรอการเชื่อมต่อกับจอยสติ๊ก
  {
    int error = ps2x.config_gamepad(PS2_CLK, PS2_CMD, PS2_SEL, PS2_DAT, false, false);
    if (error == 0)                    // กรณีที่เชื่อมต่อได้ Error = 0
    {
      Serial.println("OK");            // แสดงข้อความว่า เชื่อมต่อกับจอยสติ๊กเรียบร้อยแล้ว
      delay(1000);                     // หน่วงเวลา 1 วินาที
      break;                           // ออกจาก while(true)
    }
    delay(500);                        // หน่วงเวลา 500 มิลลิวินาทีเพื่อรอการเชื่อมต่อครั้งต่อไปในกรณีที่เชื่อมต่อไม่สำเร็จ
  }
}
void loop()
{
  ps2x.read_gamepad(false, false);     // อ่านข้อมูลจาก PS2 Controller
////////////////////////////////----------------------------------------------------
  if (ps2x.Button(PSB_CIRCLE))         // ถ้าปุ่มวงกลมถูกกด
  {
Serial.println("O");
if(pos1<=0)
  {
   pos1=0;  
  }
  else
  {
  pos1=pos1-5;
  myservo1.write(pos1);  
  delay(100);    
  }
  }
////////////////////////////////----------------------------------------------------
  else if (ps2x.Button(PSB_CROSS))     // ถ้าปุ่มกากบาทถูกกด
  {
Serial.println("X");
      if(pos2<=60)
      {
       pos2=60;  
       }
       else
       {
   pos2=pos2-5;
  myservo2.write(pos2); 
   delay(100);
       }
  }
////////////////////////////////----------------------------------------------------
  else if (ps2x.Button(PSB_SQUARE))    // ถ้าปุ่มสี่เหลี่ยมถูกกด
  {
Serial.println("S"); 
    if(pos2>=180)
    {
     pos2=180; 
      }
      else
      { 
 pos2=pos2+5;
  myservo2.write(pos2); 
  delay(100);
     }
  }
////////////////////////////////----------------------------------------------------
  else if (ps2x.Button(PSB_TRIANGLE))  // ถ้าปุ่มสามเหลี่ยมถูกกด
  {
Serial.println("T");
if(pos1>=180)
   {
     pos1=180;
   }
    else
    {    
  pos1=pos1+5;
  myservo1.write(pos1); 
  delay(100);
    }
  }
  
  ////////////////////////////////----------------------------------------------------
  
  else if (ps2x.Button(PSB_L1))        // ถ้าปุ่ม L1 ถูกกด
  {
Serial.println("L1");
LL();//หมุนซ้าย
  }
  else if (ps2x.Button(PSB_L2))        // ถ้าปุ่ม L2 ถูกกด
  {
Serial.println("L2");
LL();//หมุนซ้าย
  }
  else if (ps2x.Button(PSB_R1))        // ถ้าปุ่ม R1 ถูกกด
  {
Serial.println("R1");
RR();//หมุนขวา
  }
  else if (ps2x.Button(PSB_R2))        // ถ้าปุ่ม R2 ถูกกด
  {
Serial.println("R2");
RR();//หมุนขวา
  }
////////////////////////////////----------------------------------------------------
  else if (ps2x.Button(PSB_START))     // ถ้าปุ่ม Start ถูกกด
  {
Serial.println("Start"); 
 DLS=50;// แสดงข้อความว่า Start
  }
  else if (ps2x.Button(PSB_SELECT))    // ถ้าปุ่ม Select ถูกกด
  {
Serial.println("Select");
DLS=10;        
  }
////////////////////////////////----------------------------------------------------
  else if (ps2x.Button(PSB_PAD_UP))    // ถ้าปุ่ม Up ถูกกด
  {
     Serial.println("UP");
    DD();//เดินหน้า
  }
  
  else if (ps2x.Button(PSB_PAD_DOWN))  // ถ้าปุ่ม Down ถูกกด
  {
Serial.println("DOWN");
BK();//ถอย
  }
  else if (ps2x.Button(PSB_PAD_LEFT))  // ถ้าปุ่ม Left ถูกกด
  {
Serial.println("LEFT");
RRR();//สไลด์ขวา
  }
  else if (ps2x.Button(PSB_PAD_RIGHT)) // ถ้าปุ่ม Right ถูกกด
  {
 Serial.println("RIGHT");
 LLL();//สไลด์ซ้าย
  }
////////////////////////////////----------------------------------------------------
  else
  {
digitalWrite(Pin_A, LOW);
digitalWrite(Pin_B, LOW);
digitalWrite(Pin_C, LOW);
digitalWrite(Pin_D, LOW);
digitalWrite(Pin_E, LOW);
digitalWrite(Pin_F, LOW);
digitalWrite(Pin_G, LOW);
digitalWrite(Pin_H, LOW);
    delay(10);
  }
  delay(10);
}
//////////////////////////////////
////////////////////////////////----------------------------------------------------เดินหน้า
void DD()
{
digitalWrite(Pin_A, LOW);
digitalWrite(Pin_B, HIGH);
digitalWrite(Pin_C, LOW);
digitalWrite(Pin_D, HIGH);
digitalWrite(Pin_E, LOW);
digitalWrite(Pin_F, HIGH);
digitalWrite(Pin_G, LOW);
digitalWrite(Pin_H, HIGH);
    delay(DLS);  
    digitalWrite(Pin_A, LOW);
digitalWrite(Pin_B, LOW);
digitalWrite(Pin_C, LOW);
digitalWrite(Pin_D, LOW);
digitalWrite(Pin_E, LOW);
digitalWrite(Pin_F, LOW);
digitalWrite(Pin_G, LOW);
digitalWrite(Pin_H, LOW);
    delay(10);
}
////////////////////////////////----------------------------------------------------ถอยหลัง
void BK()//ถอย
{
digitalWrite(Pin_A, HIGH);
digitalWrite(Pin_B, LOW);
digitalWrite(Pin_C, HIGH);
digitalWrite(Pin_D, LOW);
digitalWrite(Pin_E,  HIGH);
digitalWrite(Pin_F, LOW);
digitalWrite(Pin_G, HIGH);
digitalWrite(Pin_H,LOW);
    delay(DLS);
    digitalWrite(Pin_A, LOW);
digitalWrite(Pin_B, LOW);
digitalWrite(Pin_C, LOW);
digitalWrite(Pin_D, LOW);
digitalWrite(Pin_E, LOW);
digitalWrite(Pin_F, LOW);
digitalWrite(Pin_G, LOW);
digitalWrite(Pin_H, LOW);
    delay(10);  
}
////////////////////////////////----------------------------------------------------หมุนขวา
void RR()//หมุนขวา
{
digitalWrite(Pin_A, HIGH);
digitalWrite(Pin_B, LOW);
digitalWrite(Pin_C, HIGH);
digitalWrite(Pin_D, LOW);
digitalWrite(Pin_E, LOW);
digitalWrite(Pin_F, HIGH);
digitalWrite(Pin_G, LOW);
digitalWrite(Pin_H, HIGH);
    delay(DLS);
    digitalWrite(Pin_A, LOW);
digitalWrite(Pin_B, LOW);
digitalWrite(Pin_C, LOW);
digitalWrite(Pin_D, LOW);
digitalWrite(Pin_E, LOW);
digitalWrite(Pin_F, LOW);
digitalWrite(Pin_G, LOW);
digitalWrite(Pin_H, LOW);
    delay(10);  
}
////////////////////////////////----------------------------------------------------หมุนซ้าย
void LL()//หมุนซ้าย
{
digitalWrite(Pin_A, LOW);
digitalWrite(Pin_B, HIGH);
digitalWrite(Pin_C, LOW);
digitalWrite(Pin_D, HIGH);
digitalWrite(Pin_E, HIGH);
digitalWrite(Pin_F, LOW);
digitalWrite(Pin_G, HIGH);
digitalWrite(Pin_H, LOW);
    delay(DLS);  
    digitalWrite(Pin_A, LOW);
digitalWrite(Pin_B, LOW);
digitalWrite(Pin_C, LOW);
digitalWrite(Pin_D, LOW);
digitalWrite(Pin_E, LOW);
digitalWrite(Pin_F, LOW);
digitalWrite(Pin_G, LOW);
digitalWrite(Pin_H, LOW);
    delay(10);
}
////////////////////////////////----------------------------------------------------สไลด์ขวา
void RRR()//
{
digitalWrite(Pin_A, HIGH);
digitalWrite(Pin_B, LOW);
digitalWrite(Pin_C, LOW);
digitalWrite(Pin_D, HIGH);
digitalWrite(Pin_E, LOW);
digitalWrite(Pin_F, HIGH);
digitalWrite(Pin_G, HIGH);
digitalWrite(Pin_H, LOW);
    delay(DLS); 
    digitalWrite(Pin_A, LOW);
digitalWrite(Pin_B, LOW);
digitalWrite(Pin_C, LOW);
digitalWrite(Pin_D, LOW);
digitalWrite(Pin_E, LOW);
digitalWrite(Pin_F, LOW);
digitalWrite(Pin_G, LOW);
digitalWrite(Pin_H, LOW);
    delay(10);
}
////////////////////////////////----------------------------------------------------สไลด์ซ้าย
void LLL()//
{
digitalWrite(Pin_A, LOW);
digitalWrite(Pin_B, HIGH);//
digitalWrite(Pin_C, HIGH);
digitalWrite(Pin_D, LOW);//
digitalWrite(Pin_E, HIGH);
digitalWrite(Pin_F, LOW);//
digitalWrite(Pin_G, LOW);
digitalWrite(Pin_H, HIGH); // 
delay(DLS);  
digitalWrite(Pin_A, LOW);
digitalWrite(Pin_B, LOW);
digitalWrite(Pin_C, LOW);
digitalWrite(Pin_D, LOW);
digitalWrite(Pin_E, LOW);
digitalWrite(Pin_F, LOW);
digitalWrite(Pin_G, LOW);
digitalWrite(Pin_H, LOW);
    delay(10);