乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      PS2手柄遙控Arduino小車

       goodwangLib 2019-06-22

      使用手柄遙控小車是經(jīng)常要用到的,看到PS2手柄很6,就拿來嘗試一下。
      PS2手柄是索尼的PlayStation2游戲機(jī)的遙控手柄,因?yàn)檫@款手柄性價比較高,按鍵豐富,方便擴(kuò)展到其它應(yīng)用中,后來有人將其通訊協(xié)議破解,使得手柄可以用在遙控其他電器上,比如遙控控制機(jī)器人小車。

      最主要的是這款手柄,拿來就可以用,有人已經(jīng)將其通訊協(xié)議破解了。
      具體可以參考極客工坊。 其PS2X_lib庫,可以參見Github.
      這種搖桿有無線的和有線的,都是連接到Arduino上,我用的是有線的。

      這里寫圖片描述

      1. 手柄測試

      將庫文件放入Arduino IDE的安裝的libaries文件夾中。 然后可以使用其中的example 例程測試一下。
      程序如下:

      #include <PS2X_lib.h>  //for v1.6
      
      /******************************************************************
       * set pins connected to PS2 controller:
       *   - 1e column: original 
       *   - 2e colmun: Stef?
       * replace pin numbers by the ones you use
       ******************************************************************/
      #define PS2_DAT        13  //14    
      #define PS2_CMD        11  //15
      #define PS2_SEL        10  //16
      #define PS2_CLK        12  //17
      
      /******************************************************************
       * select modes of PS2 controller:
       *   - pressures = analog reading of push-butttons 
       *   - rumble    = motor rumbling
       * uncomment 1 of the lines for each mode selection
       ******************************************************************/
      //#define pressures   true
      #define pressures   false
      //#define rumble      true
      #define rumble      false
      
      PS2X ps2x; // create PS2 Controller Class
      
      //right now, the library does NOT support hot pluggable controllers, meaning 
      //you must always either restart your Arduino after you connect the controller, 
      //or call config_gamepad(pins) again after connecting the controller.
      
      int error = 0;
      byte type = 0;
      byte vibrate = 0;
      
      // Reset func 
      void (* resetFunc) (void) = 0;
      
      void setup(){
      
        Serial.begin(115200);
      
        delay(500);  //added delay to give wireless ps2 module some time to startup, before configuring it
      
        //CHANGES for v1.6 HERE!!! **************PAY ATTENTION*************
      
        //setup pins and settings: GamePad(clock, command, attention, data, Pressures?, Rumble?) check for error
        error = ps2x.config_gamepad(PS2_CLK, PS2_CMD, PS2_SEL, PS2_DAT, pressures, rumble);
      
        if(error == 0){
          Serial.print("Found Controller, configured successful ");
          Serial.print("pressures = ");
          if (pressures)
            Serial.println("true ");
          else
            Serial.println("false");
          Serial.print("rumble = ");
          if (rumble)
            Serial.println("true)");
          else
            Serial.println("false");
          Serial.println("Try out all the buttons, X will vibrate the controller, faster as you press harder;");
          Serial.println("holding L1 or R1 will print out the analog stick values.");
          Serial.println("Note: Go to www.billporter.info for updates and to report bugs.");
        }  
        else if(error == 1)
          Serial.println("No controller found, check wiring, see readme.txt to enable debug. visit www.billporter.info for troubleshooting tips");
      
        else if(error == 2)
          Serial.println("Controller found but not accepting commands. see readme.txt to enable debug. Visit www.billporter.info for troubleshooting tips");
      
        else if(error == 3)
          Serial.println("Controller refusing to enter Pressures mode, may not support it. ");
      
        type = ps2x.readType(); 
        switch(type) {
          case 0:
            Serial.println("Unknown Controller type found ");
            break;
          case 1:
            Serial.println("DualShock Controller found ");
            break;
          case 2:
            Serial.println("GuitarHero Controller found ");
            break;
          case 3:
            Serial.println("Wireless Sony DualShock Controller found ");
            break;
         }
      }
      
      void loop() {
        /* You must Read Gamepad to get new values and set vibration values
           ps2x.read_gamepad(small motor on/off, larger motor strenght from 0-255)
           if you don't enable the rumble, use ps2x.read_gamepad(); with no values
           You should call this at least once a second
         */  
        if(error == 1){ //skip loop if no controller found
          resetFunc();
        }
      
        if(type == 2){ //Guitar Hero Controller
          ps2x.read_gamepad();          //read controller 
      
          if(ps2x.ButtonPressed(GREEN_FRET))
            Serial.println("Green Fret Pressed");
          if(ps2x.ButtonPressed(RED_FRET))
            Serial.println("Red Fret Pressed");
          if(ps2x.ButtonPressed(YELLOW_FRET))
            Serial.println("Yellow Fret Pressed");
          if(ps2x.ButtonPressed(BLUE_FRET))
            Serial.println("Blue Fret Pressed");
          if(ps2x.ButtonPressed(ORANGE_FRET))
            Serial.println("Orange Fret Pressed"); 
      
          if(ps2x.ButtonPressed(STAR_POWER))
            Serial.println("Star Power Command");
      
          if(ps2x.Button(UP_STRUM))          //will be TRUE as long as button is pressed
            Serial.println("Up Strum");
          if(ps2x.Button(DOWN_STRUM))
            Serial.println("DOWN Strum");
      
          if(ps2x.Button(PSB_START))         //will be TRUE as long as button is pressed
            Serial.println("Start is being held");
          if(ps2x.Button(PSB_SELECT))
            Serial.println("Select is being held");
      
          if(ps2x.Button(ORANGE_FRET)) {     // print stick value IF TRUE
            Serial.print("Wammy Bar Position:");
            Serial.println(ps2x.Analog(WHAMMY_BAR), DEC); 
          } 
        }
        else { //DualShock Controller
          ps2x.read_gamepad(false, vibrate); //read controller and set large motor to spin at 'vibrate' speed
      
          if(ps2x.Button(PSB_START))         //will be TRUE as long as button is pressed
            Serial.println("Start is being held");
          if(ps2x.Button(PSB_SELECT))
            Serial.println("Select is being held");      
      
          if(ps2x.Button(PSB_PAD_UP)) {      //will be TRUE as long as button is pressed
            Serial.print("Up held this hard: ");
            Serial.println(ps2x.Analog(PSAB_PAD_UP), DEC);
          }
          if(ps2x.Button(PSB_PAD_RIGHT)){
            Serial.print("Right held this hard: ");
            Serial.println(ps2x.Analog(PSAB_PAD_RIGHT), DEC);
          }
          if(ps2x.Button(PSB_PAD_LEFT)){
            Serial.print("LEFT held this hard: ");
            Serial.println(ps2x.Analog(PSAB_PAD_LEFT), DEC);
          }
          if(ps2x.Button(PSB_PAD_DOWN)){
            Serial.print("DOWN held this hard: ");
            Serial.println(ps2x.Analog(PSAB_PAD_DOWN), DEC);
          }   
      
          vibrate = ps2x.Analog(PSAB_CROSS);  //this will set the large motor vibrate speed based on how hard you press the blue (X) button
          if (ps2x.NewButtonState()) {        //will be TRUE if any button changes state (on to off, or off to on)
            if(ps2x.Button(PSB_L3))
              Serial.println("L3 pressed");
            if(ps2x.Button(PSB_R3))
              Serial.println("R3 pressed");
            if(ps2x.Button(PSB_L2))
              Serial.println("L2 pressed");
            if(ps2x.Button(PSB_R2))
              Serial.println("R2 pressed");
            if(ps2x.Button(PSB_TRIANGLE))
              Serial.println("Triangle pressed");        
          }
      
          if(ps2x.ButtonPressed(PSB_CIRCLE))               //will be TRUE if button was JUST pressed
            Serial.println("Circle just pressed");
          if(ps2x.NewButtonState(PSB_CROSS))               //will be TRUE if button was JUST pressed OR released
            Serial.println("X just changed");
          if(ps2x.ButtonReleased(PSB_SQUARE))              //will be TRUE if button was JUST released
            Serial.println("Square just released");     
      
          if(ps2x.Button(PSB_L1) || ps2x.Button(PSB_R1)) { //print stick values if either is TRUE
            Serial.print("Stick Values:");
            Serial.print(ps2x.Analog(PSS_LY), DEC); //Left stick, Y axis. Other options: LX, RY, RX  
            Serial.print(",");
            Serial.print(ps2x.Analog(PSS_LX), DEC); 
            Serial.print(",");
            Serial.print(ps2x.Analog(PSS_RY), DEC); 
            Serial.print(",");
            Serial.println(ps2x.Analog(PSS_RX), DEC); 
          }     
        }
        delay(50);  
      }

      在IDE中編譯后下載到Arduino中,打開串口監(jiān)視器,如果順利,會看到顯示下列提示:

      如果提示未發(fā)現(xiàn)控制器,那就需要檢查自己的連線等是不是有問題了,我在用的時候,因?yàn)槎虐罹€的問題,一直提示找不到控制器,我還懷疑是不是買的手柄有問題,又拿Stm32的板子來測試,折騰了半天竟然是線的問題。

      連接后,按下手柄上的各個鍵都會有相應(yīng)提示,可以看出哪個按鍵定義的什么名字。
      在上述代碼中,左邊的四個按鍵只是顯示按鍵按下,不會根據(jù)力的大小輸出相應(yīng)數(shù)值的,如果想要,就需要修改下列代碼:

      上述程序第20行到23行將注釋調(diào)換一下條改為:

      #define pressures   true
      //#define pressures   false
      #define rumble      true
      //#define rumble      false

      這樣就可以實(shí)現(xiàn)通過按左側(cè)”上下左右“按鍵的力度,輸出不同的模擬值。

      2. 小車電機(jī)控制

      電機(jī):有刷直流電機(jī)
      驅(qū)動器:L298n邏輯
      控制器:Arduino Mega2560

      程序功能實(shí)現(xiàn):
      - 按下START鍵,開始前進(jìn);
      - 通過按PS2手柄左邊的“上下左右”鍵實(shí)現(xiàn)前進(jìn) 、后退、左轉(zhuǎn)、右轉(zhuǎn)。
      - 按SELECT鍵停止;

      #include <PS2X_lib.h>  //for v1.6
      
      /******************************************************************
       * set pins connected to PS2 controller:
       *   - 1e column: original 
       *   - 2e colmun: Stef?
       * replace pin numbers by the ones you use
       ******************************************************************/
      //PS2手柄引腳;
      #define PS2_DAT        13  //14    
      #define PS2_CMD        11  //15
      #define PS2_SEL        10  //16
      #define PS2_CLK        12  //17
      
      // 電機(jī)控制引腳;
      #define IN1 4
      #define IN2 5
      #define IN3 6
      #define IN4 7
      
       //PWM控制引腳;
        int speedPinA = 8;
        int speedPinB = 9;
      
      int speed;
      
      /******************************************************************
       * select modes of PS2 controller:
       *   - pressures = analog reading of push-butttons 
       *   - rumble    = motor rumbling
       * uncomment 1 of the lines for each mode selection
       ******************************************************************/
      #define pressures   true
      //#define pressures   false
      #define rumble      true
      //#define rumble      false
      
      PS2X ps2x; // create PS2 Controller Class
      
      //right now, the library does NOT support hot pluggable controllers, meaning 
      //you must always either restart your Arduino after you connect the controller, 
      //or call config_gamepad(pins) again after connecting the controller.
      
      int error = 0;
      byte type = 0;
      byte vibrate = 0;
      
       void setup(){
      
         pinMode(IN1, OUTPUT);
         pinMode(IN2, OUTPUT);
         pinMode(IN3, OUTPUT);
         pinMode(IN4, OUTPUT);
      
         speed =200;
      
         Serial.begin(57600);
         delay(300) ; //added delay to give wireless ps2 module some time to startup, before configuring it
         //CHANGES for v1.6 HERE!!! **************PAY ATTENTION*************
      
        //setup pins and settings: GamePad(clock, command, attention, data, Pressures?, Rumble?) check for error
        error = ps2x.config_gamepad(PS2_CLK, PS2_CMD, PS2_SEL, PS2_DAT, pressures, rumble);
      
        if(error == 0){
          Serial.print("Found Controller, configured successful ");
          Serial.print("pressures = ");
        if (pressures)
          Serial.println("true ");
        else
          Serial.println("false");
        Serial.print("rumble = ");
        if (rumble)
          Serial.println("true)");
        else
          Serial.println("false");
          Serial.println("Try out all the buttons, X will vibrate the controller, faster as you press harder;");
          Serial.println("holding L1 or R1 will print out the analog stick values.");
          Serial.println("Note: Go to www.billporter.info for updates and to report bugs.");
        }  
        else if(error == 1)
          Serial.println("No controller found, check wiring, see readme.txt to enable debug. visit www.billporter.info for troubleshooting tips");
      
        else if(error == 2)
          Serial.println("Controller found but not accepting commands. see readme.txt to enable debug. Visit www.billporter.info for troubleshooting tips");
      
        else if(error == 3)
          Serial.println("Controller refusing to enter Pressures mode, may not support it. ");
      
       //  Serial.print(ps2x.Analog(1), HEX);
      
        type = ps2x.readType(); 
        switch(type) {
          case 0:
            Serial.print("Unknown Controller type found ");
            break;
          case 1:
            Serial.print("DualShock Controller found ");
            break;
          case 2:
            Serial.print("GuitarHero Controller found ");
            break;
        case 3:
            Serial.print("Wireless Sony DualShock Controller found ");
            break;
         }
      }
      
       void turnLeft(){
         digitalWrite(IN1,HIGH);
         digitalWrite(IN2, LOW);
         digitalWrite(IN3, LOW);
         digitalWrite(IN4,HIGH);
      }
       void turnRight(){
        digitalWrite(IN1, LOW);
        digitalWrite(IN2, LOW);
        digitalWrite(IN3, HIGH);
        digitalWrite(IN4, LOW);      
      }
      
       void forward(){
        digitalWrite(IN1, HIGH);
        digitalWrite(IN2, LOW);
        digitalWrite(IN3, HIGH);
        digitalWrite(IN4, LOW);      
      }
      
       void back(){
        digitalWrite(IN1, LOW);
        digitalWrite(IN2, HIGH);
        digitalWrite(IN3, LOW);
        digitalWrite(IN4, HIGH);     
      }
      
       void loop(){
         /* You must Read Gamepad to get new values and set vibration values
           ps2x.read_gamepad(small motor on/off, larger motor strenght from 0-255)
           if you don't enable the rumble, use ps2x.read_gamepad(); with no values
           You should call this at least once a second
         */  
        if(error == 1) //skip loop if no controller found
          return; 
      
        if(type == 2) {//Guitar Hero Controller
        return;
        }
        else  { //DualShock Controller
          ps2x.read_gamepad(false, vibrate); //read controller and set large motor to spin at 'vibrate' speed
      
      
      //start 開始運(yùn)行,電機(jī)初PWM為120;
          if(ps2x.Button(PSB_START))  {
             Serial.println("Start is being held");
             speed = 120;
             analogWrite(speedPinA, speed);
             analogWrite(speedPinB, speed);
             forward();                  
          }
      // 電機(jī)正轉(zhuǎn);
          if(ps2x.Button(PSB_PAD_UP)){
            Serial.println("Up held this hard: ");
            speed= 200;
            analogWrite(speedPinA, speed);
            analogWrite(speedPinB, speed);
            forward();                  
          }
      
      // 電機(jī)反轉(zhuǎn);
          if(ps2x.Button(PSB_PAD_DOWN)){
            Serial.print("Down held this hard: ");
            speed= 200;
            analogWrite(speedPinA, speed);
            analogWrite(speedPinB, speed);
            back();                  
          }
      
       //左轉(zhuǎn);   
          if(ps2x.Button(PSB_PAD_LEFT)){
             Serial.println("turn left ");
             analogWrite(speedPinA, speed);
             analogWrite(speedPinB, 0);
            turnLeft();        
          }
      
      //右轉(zhuǎn);
         if(ps2x.Button(PSB_PAD_RIGHT)){
          Serial.println("turn right");
          analogWrite(speedPinA, 0);
          analogWrite(speedPinB, speed);
          turnRight();
         }
      // Stop
         if(ps2x.Button(PSB_SELECT)){
         Serial.println("stop");
         speed = 0;
         analogWrite(speedPinA,speed);
         analogWrite(speedPinB,speed);
         }
      
        }
      }

      目前是拿來嘗試一下,還是基于按鍵的實(shí)現(xiàn),后面用搖桿來控制方向的速度。

      3. 搖桿控制

      功能實(shí)現(xiàn):

      • 通過按PS2搖桿的“上下左右”移動實(shí)現(xiàn)前進(jìn) 、后退、左轉(zhuǎn)、右轉(zhuǎn)。
      • 速度隨搖桿位置變化而變化;
      
      
      /* 功能:通過按PS2搖桿的“上下左右”移動實(shí)現(xiàn)前進(jìn) 、后退、左轉(zhuǎn)、右轉(zhuǎn)。
       * 
       * 作者:lcl;
       */
      #include <PS2X_lib.h>  //for v1.6
      /******************************************************************
       * set pins connected to PS2 controller:
       *   - 1e column: original
       *   - 2e colmun: Stef?
       * replace pin numbers by the ones you use
       ******************************************************************/
      //PS2手柄引腳;
      #define PS2_DAT        13  //14   
      #define PS2_CMD        11  //15
      #define PS2_SEL        10  //16
      #define PS2_CLK        12  //17
      // 電機(jī)控制引腳;
      #define IN1 4
      #define IN2 5
      #define IN3 6
      #define IN4 7
        int speedPinA = 8;
        int speedPinB = 9;
      int speed;
      //speed =200;
      /******************************************************************
       * select modes of PS2 controller:
       *   - pressures = analog reading of push-butttons
       *   - rumble    = motor rumbling
       * uncomment 1 of the lines for each mode selection
       ******************************************************************/
      #define pressures   true
      //#define pressures   false
      #define rumble      true
      //#define rumble      false
      PS2X ps2x; // create PS2 Controller Class
      //right now, the library does NOT support hot pluggable controllers, meaning
      //you must always either restart your Arduino after you connect the controller,
      //or call config_gamepad(pins) again after connecting the controller.
      int error = 0;
      byte type = 0;
      byte vibrate = 0;
       void setup(){
      
         pinMode(IN1, OUTPUT);
         pinMode(IN2, OUTPUT);
         pinMode(IN3, OUTPUT);
         pinMode(IN4, OUTPUT);
      
      
         Serial.begin(57600);
         delay(300) ; //added delay to give wireless ps2 module some time to startup, before configuring it
         //CHANGES for v1.6 HERE!!! **************PAY ATTENTION*************
      
        //setup pins and settings: GamePad(clock, command, attention, data, Pressures?, Rumble?) check for error
        error = ps2x.config_gamepad(PS2_CLK, PS2_CMD, PS2_SEL, PS2_DAT, pressures, rumble);
      
        if(error == 0){
          Serial.print("Found Controller, configured successful ");
          Serial.print("pressures = ");
        if (pressures)
          Serial.println("true ");
        else
          Serial.println("false");
        Serial.print("rumble = ");
        if (rumble)
          Serial.println("true)");
        else
          Serial.println("false");
          Serial.println("Try out all the buttons, X will vibrate the controller, faster as you press harder;");
          Serial.println("holding L1 or R1 will print out the analog stick values.");
          Serial.println("Note: Go to www.billporter.info for updates and to report bugs.");
        } 
        else if(error == 1)
          Serial.println("No controller found, check wiring, see readme.txt to enable debug. visit www.billporter.info for troubleshooting tips");
      
        else if(error == 2)
          Serial.println("Controller found but not accepting commands. see readme.txt to enable debug. Visit www.billporter.info for troubleshooting tips");
        else if(error == 3)
          Serial.println("Controller refusing to enter Pressures mode, may not support it. ");
      
       //  Serial.print(ps2x.Analog(1), HEX);
      
        type = ps2x.readType();
        switch(type) {
          case 0:
            Serial.print("Unknown Controller type found ");
            break;
          case 1:
            Serial.print("DualShock Controller found ");
            break;
          case 2:
            Serial.print("GuitarHero Controller found ");
            break;
        case 3:
            Serial.print("Wireless Sony DualShock Controller found ");
            break;
         }
      }
       void turnLeft() //左轉(zhuǎn)
       {     
        digitalWrite(IN1,HIGH);
        digitalWrite(IN2, LOW);
        digitalWrite(IN3, LOW);
        digitalWrite(IN4,LOW);
        delay(20);
      }
       void turnRight()//右轉(zhuǎn)
       {
         digitalWrite(IN1, LOW);
         digitalWrite(IN2, LOW);
         digitalWrite(IN3, HIGH);
         digitalWrite(IN4, LOW);
        delay(20);     
      }
       void forward() // 前進(jìn)
       {
        digitalWrite(IN1, HIGH);
        digitalWrite(IN2, LOW);
        digitalWrite(IN3, HIGH);
        digitalWrite(IN4, LOW);  
        delay(20);  
      }
      void stop() // 停止;
       {
        digitalWrite(IN1, LOW);
        digitalWrite(IN2, LOW);
        digitalWrite(IN3, LOW);
        digitalWrite(IN4, LOW);
        delay(20);
      }
       void back()  //后退
       {
        digitalWrite(IN1, LOW);
        digitalWrite(IN2, HIGH);
        digitalWrite(IN3, LOW);
        digitalWrite(IN4, HIGH);    
      }
       void loop(){
         /* You must Read Gamepad to get new values and set vibration values
           ps2x.read_gamepad(small motor on/off, larger motor strenght from 0-255)
           if you don't enable the rumble, use ps2x.read_gamepad(); with no values
           You should call this at least once a second
         */ 
        if(error == 1) //skip loop if no controller found
          return;
      
        if(type == 2) {//Guitar Hero Controller
        return;
           }
        else  { //DualShock Controller
          ps2x.read_gamepad(false, vibrate); //read controller and set large motor to spin at 'vibrate' speed
          if(ps2x.Button(PSB_L1) || ps2x.Button(PSB_R1)) { //print stick values if either is TRUE
                 Serial.print("Stick Values:");
                 Serial.print(ps2x.Analog(PSS_LY), DEC); //Left stick, Y axis. Other options: LX, RY, RX
                 Serial.print(",");
                 Serial.print(ps2x.Analog(PSS_LX), DEC);
                 Serial.print(",");
                 Serial.print(ps2x.Analog(PSS_RY), DEC);
                 Serial.print(",");
                 Serial.println(ps2x.Analog(PSS_RX), DEC);
      
                   int LY=ps2x.Analog(PSS_LY);
                   int LX=ps2x.Analog(PSS_LX);
                   int RY=ps2x.Analog(PSS_RY);
                   int RX=ps2x.Analog(PSS_RX);
      
                   if (LY<128)  //前進(jìn)
                   {
      
                          speed = 2*(127-LY);
                          //speed = LY;
                          analogWrite(speedPinA, speed);
                          analogWrite(speedPinB, speed);
                          forward();   
                   }
                   //后退
                   if (LY>128)
                   {
                          speed=2*(LY-128);
                          analogWrite(speedPinA, speed);
                          analogWrite(speedPinB, speed);
                          back();
                   }
                   //左轉(zhuǎn)
                   if (LX<128)
                   {
                          speed = 2*(127-LX);
                          analogWrite(speedPinA, speed);
                          analogWrite(speedPinB, speed);
                          turnLeft();
                   }
                   //右轉(zhuǎn)
                   if (LX>128)
                   {
                          speed=2*(LX -128);
                          analogWrite(speedPinA, speed);
                          analogWrite(speedPinB, speed);
                          turnRight();
                   }
                   //如果搖桿居中
                   if (LY>=128 && LY<=128 && LX>=128 && LX<=128)
                   {
                   stop();
                   }
          }
        }
      

      相關(guān)參考:
      1. http:///forum.php?mod=viewthread&tid=11561&highlight=ps2
      2. Sony PS2游戲手柄遙控智能小車https://sanwen8.cn/p/375swwM.html
      3. SONY PS2電玩手柄遙控樂高小車

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多