2016-11-20 4 views
0

Мне нужно запрограммировать робота на 50% скорость, когда кнопка «a» на игровой контроллер нажат и отпустит, а затем диск на 100%, когда «a» будет нажат и снова выпущен, как кнопка с фиксацией. У меня есть следующий код, который делает робот-диск 50%, когда «а» удерживается постоянно, а при 100% при выпуске «а» он отлично работает.Я пытаюсь запрограммировать «запертую кнопку» для робота, однако, когда я просматриваю код, робот не отвечает

telemetry.addData("Status", "Running: " + runtime.toString()); 
    if(gamepad1.a) 
    { 
     telemetry.addData("Status", "A pressed"); 
       leftMotor.setPower(-gamepad1.left_stick_y*0.5); 
       rightMotor.setPower(-gamepad1.right_stick_y*0.5); 
       telemetry.addData("Status", "Running Slow"); 
      } 

      else { 
       leftMotor.setPower(-gamepad1.left_stick_y); 
       rightMotor.setPower(-gamepad1.right_stick_y); 
       telemetry.addData("Status", "Running regular"); 
           } 



} 

И это код, который у меня есть для запертой кнопки, при запуске он не работает. Я думаю, что это просто вопрос фиксации операторов if и else, но я не могу точно определить проблему.

telemetry.addData("Status", "Running: " + runtime.toString()); 
    if(gamepad1.a) 
    { 
     telemetry.addData("Status", "A pressed"); 
     //if A was pressed 
     if(aPressed == false) 
     { 
      aPressed = true; 
      if(goingSlow) 
      { 
       leftMotor.setPower(-gamepad1.left_stick_y); 
       rightMotor.setPower(-gamepad1.right_stick_y); 
       telemetry.addData("Status", "Running Regular"); 
       goingSlow = false; 
      } 

        else { 
        leftMotor.setPower(-gamepad1.left_stick_y*0.5); 
        rightMotor.setPower(-gamepad1.right_stick_y*0.5); 
        telemetry.addData("Status", "Running Slow"); 
        goingSlow = true; 
       } 
      } 
     } 
     else 
     { 
      aPressed = false; 
     } 

ответ

0

Я думаю, что вы пытаетесь сделать слишком много внутри ветвей оператора if. Перемещение некоторых функций в другие методы должно облегчить понимание.

Трудно точно узнать, что происходит, поскольку вы не показываете весь метод или не указываете какой-либо контекст о том, как вы будете уведомлены о нажатии кнопки/выпусках, но вы можете попробовать что-то вроде этого, один раз вы имели дело с кнопкой прессах и выяснили, стоит ли идти медленно или быстро:

if(shouldGoFast) { 
goFast(); 
} else { 
goSlow(); 
} 

public void goFast() { 
    leftMotor.setPower(-gamepad1.left_stick_y); 
    rightMotor.setPower(-gamepad1.right_stick_y); 
    telemetry.addData("Status", "Running Regular"); 
} 

public void goSlow() { 
    leftMotor.setPower(-gamepad1.left_stick_y*0.5); 
    rightMotor.setPower(-gamepad1.right_stick_y*0.5); 
    telemetry.addData("Status", "Running Slow"); 
} 

Я предполагаю, что вы на самом деле не нужно следить за ли вы в настоящее время происходит медленно или быстро, т.е. нет проблем, если вы выполняете goFast(), когда вы уже продвигаетесь быстро.