Задержка с пультом от пс2

загружаю чуть чуть изменённый код из примеров к библиотеке PS2X_lib для ардуино мега проблема в том, что после нажатия кнопки проходит 1-- 2 секунды до того как на нее среагирует робот

#include <PS2X_lib.h>  //for v1.6
  const int motor1Pin1 = 4;
  const int motor1Pin2 = 5;
  const int motor2Pin1 = 6;
  const int motor2Pin2 = 7;
/*
  right now, the library does NOT support hot pluggable controllers, meaning 
  you must always either restart your Arduino after you conect the controller, 
  or call config_gamepad(pins) again after connecting the controller.
*/

// create PS2 Controller Class
PS2X ps2x;
int error = 0; 
byte type = 0;
byte vibrate = 0;

void setup()
{
  pinMode(motor1Pin1, OUTPUT);
  pinMode(motor1Pin2, OUTPUT);
  pinMode(motor2Pin1, OUTPUT);
  pinMode(motor2Pin2, OUTPUT);
  pinMode(13, OUTPUT);
  Serial.begin(57600);
  // 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(22,23,24,25, true, true);

  if(error == 0)
  {
    Serial.println("Found Controller, configured successful");
    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("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.println("Unknown Controller type");
      break;
    case 1:
      Serial.println("DualShock Controller Found");
      break;
    case 2:
      Serial.println("GuitarHero Controller Found");
      break;
  }
}

void loop()
{
  /*
    You must Read Gamepad to get new values
    Read GamePad 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
  */
  // skip loop if no controller found
  if(error == 1)
    return; 
  
  if(type == 2)
  {
    // Guitar Hero Controller
    // read controller
    ps2x.read_gamepad();
    
    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");
    
    // will be TRUE as long as button is pressed
    if(ps2x.Button(UP_STRUM))
      Serial.println("Up Strum");
    if(ps2x.Button(DOWN_STRUM))
      Serial.println("DOWN Strum");
    
    // will be TRUE as long as button is pressed
    if(ps2x.Button(PSB_START))
      Serial.println("Start is being held");
    if(ps2x.Button(PSB_SELECT))
      Serial.println("Select is being held");
    
    // print stick value IF TRUE
    if(ps2x.Button(ORANGE_FRET))
    {
      Serial.print("Wammy Bar Position:");
      Serial.println(ps2x.Analog(WHAMMY_BAR), DEC); 
    } 
  }
  else
  {
    // DualShock Controller
    // read controller and set large motor to spin at 'vibrate' speed
    ps2x.read_gamepad(false, vibrate);
    
    // will be TRUE as long as button is pressed
    if(ps2x.Button(PSB_START))
      Serial.println("Start is being held");
    if(ps2x.Button(PSB_SELECT))
      Serial.println("Select is being held");
    
    // will be TRUE as long as button is pressed
    if(ps2x.Button(PSB_PAD_UP))
    {
      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);
    }
    
    // this will set the large motor vibrate speed based on how hard you press the blue (X) button
    vibrate = ps2x.Analog(PSAB_BLUE);
    
    // will be TRUE if any button changes state (on to off, or off to on)
    if (ps2x.NewButtonState())
    {
      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.print("R2 pressed");
        digitalWrite(13,HIGH);
        delay(1000);
        digitalWrite(13,LOW);
      if(ps2x.Button(PSB_GREEN))
        Serial.println("Triangle pressed");
    }
    
    // will be TRUE if button was JUST pressed
    if(ps2x.ButtonPressed(PSB_RED))
    Serial.println("Circle just pressed");
    
    // will be TRUE if button was JUST released
    if(ps2x.ButtonReleased(PSB_PINK))
      Serial.println("Square just released");     
    
    // will be TRUE if button was JUST pressed OR released
    if(ps2x.NewButtonState(PSB_BLUE))
      Serial.println("X just changed");    
    
    // print stick values if either is TRUE
    if(ps2x.Button(PSB_L1) || ps2x.Button(PSB_R1))
    {
      if(ps2x.Analog(PSS_LY)<100)
      {
          digitalWrite(motor1Pin1, HIGH);
          digitalWrite(motor1Pin2, LOW);
          digitalWrite(motor2Pin1, HIGH);
          digitalWrite(motor2Pin2, LOW);
      }
      else
      {
        if(ps2x.Analog(PSS_LY)>140)
        {
          digitalWrite(motor1Pin1, LOW);
          digitalWrite(motor1Pin2, HIGH);
          digitalWrite(motor2Pin1, LOW);
          digitalWrite(motor2Pin2, HIGH);

        }
      }
        
      Serial.print("Stick Values:");
      // Left stick, Y axis. Other options: LX, RY, RX  
      Serial.print(ps2x.Analog(PSS_LY), DEC);
      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);
}

это я криворукий или в пульте проблема?

строка 161 - задержка 1 секунда на нажатие любой кнопки…

1 лайк

А сами-то как думаете?
Строка №161

1 лайк

это я криворукий, извините

2 лайка

отрадно видеть, что хотя бы некоторые новички воспринимают себя адекватно :slight_smile:

не криворукий, а пока неопытный

огромноe спасибо админам теперь все работает а робот двигается

как вопрос закрыть?

нет, куда же вы? Это невежливо
а рассказать нам, в чем же было дело?

в моей глупости, я забыл поставить остановку и убрать delay