I wanted to know how to make a motor wait and then move in autonomous.
Autonomous Code So Far:
public void autonomousPeriodic()
{
ShooterFront.set(50);
ShooterBack.set(50);
//Wanted to add 3 second wait
servo.setAngle(90);
//Wanted to add 3 second wait
servo.setAngle(180);
//Wanted to add 3 second wait
servo.setAngle(90);
//Wanted to add 3 second wait
servo.setAngle(180);
//Wanted to add 3 second wait
servo.setAngle(90);
//Wanted to add 3 second wait
servo.setAngle(180);
}
Are you using the Command-Based template? Create a command for each thing you want to do, then string them together with a Command Group.
In RobotMain
private Command autonomousCommand;
public void autonomousInit() {
autonomousCommand = new Auton0();
autonomousCommand.start();
}
public void autonomousPeriodic() {
Scheduler.getInstance().run();
}
In command group
public class Auton0 extends CommandGroup {
public Auton0() {
addSequential(new SetFrontSpeed(50);
addParallel(new SetBackSpeed(50);
addSequential(new SetAngle(90));
addSequential(new WaitCommand(3));
addSequential(new SetAngle(45));
etc. etc.
}
Just as a warning, you currently have 18 seconds of waits for a 15 second autonomous period. Once you get it tested you’ll probably want to trim down some of the wait times if you can.
This won’t work in the iterative framework (but it will in the simple framework). The AutonomousPeriodic needs to execute quickly and then return. Here’s an (untested) way to do the same thing, that will work in the iterative framework
double startTime;
public void autonomousInit() {
startTime = Timer.getFPGATimestamp();
}
public void autonomousPeriodic() {
if ((Timer.getFPGATimestamp() - startTime) < 3000)
{
ShooterFront.set(50);
ShooterBack.set(50);
}
else if ((Timer.getFPGATimestamp() - startTime) < 6000)
{
servo.setAngle(90);
}
else if ((Timer.getFPGATimestamp() - startTime) < 9000)
{
servo.setAngle(180);
}
}
I’ll send you a copy of my code tomorrow but I use a state machine switch case in which I create a timer instance. Start it. and compare if the timer is greater than 100 microseconds. if it is move to the next case in the switch, reset the timer, start it again, chose the next amount of wait time needed, compare the value of the timer until it is greater than or equal to the new wait time. and repeat. It’s easier to understand what I do once you see my code.
It worked for my team last year and this year and we use the Iterative framework. You just have to use up the full 15 seconds or tell it to do nothing when your done executing everything or it will start over.