|
|
|
![]() |
|
|||||||
|
||||||||
![]() |
| Thread Tools | Rate Thread | Display Modes |
|
#1
|
|||
|
|||
|
Iterative Robot - Need Help!!!
Hi,
This code is iterative robot template based. If you can spot something that is wrong in the code below, please let me know so I can fix the error. Suggestions would also be nice. Will this code work for the following functions: 1. Mobility 2. Moving wheels through motors 3. Pneumatics -> Piston Also, for function #3, I know I have two instances of the code. One is the relay version and the other is the solenoid version. Which one do I use? Also, I'd appreciate it if anyone can look over the parameters to see if they are correct in the constructors. Here is the code: Code:
package edu.wpi.first.wpilibj.templates;
import edu.wpi.first.wpilibj.Compressor;
import edu.wpi.first.wpilibj.IterativeRobot;
import edu.wpi.first.wpilibj.Jaguar;
import edu.wpi.first.wpilibj.Joystick;
import edu.wpi.first.wpilibj.Relay;
import edu.wpi.first.wpilibj.RobotDrive;
import edu.wpi.first.wpilibj.Solenoid;
import edu.wpi.first.wpilibj.Victor;
public class RobotTemplate extends IterativeRobot {
int joystickPort = 1;
int leftMotorChannel = 2;
int rightMotorChannel = 1;
int pressureSwitchChannel = 1;
//The GPIO channel that the pressure switch is attached to.
int compressorRelayChannel = 1;
//The relay channel that the compressor relay is attached to.
int relayModuleNumber = 1;
int relayChannelNumber = 2;
int victorOneChannel = 3;
int victorTwoChannel = 4;
RobotDrive theRobot = new RobotDrive(leftMotorChannel, rightMotorChannel);
Joystick driveStick = new Joystick(joystickPort);
Compressor mainCompressor = new Compressor(pressureSwitchChannel, compressorRelayChannel);
Relay spike = new Relay(relayModuleNumber, relayChannelNumber);
Victor wheelOne = new Victor(victorOneChannel);
Victor wheelTwo = new Victor(victorTwoChannel);
//if relay doesn't work - use this:
Solenoid pistonExtract = new Solenoid (1);
Solenoid pistonRetract = new Solenoid (2);
public void robotInit() {
mainCompressor.start();
}
public void autonomousPeriodic() {
// will fill later
}
public void teleopPeriodic() {
//variables expected to update periodically
double moveValue = driveStick.getAxis(Joystick.AxisType.kY);
double rotateValue = driveStick.getAxis(Joystick.AxisType.kX);
theRobot.arcadeDrive(moveValue, -rotateValue); //robot driving
double speed = 1.0; //adjustment back of joystick
if (driveStick.getTrigger()) { //shooter wheels
wheelOne.set(speed);
wheelTwo.set(speed);
}else{
wheelOne.set(0.0);
wheelTwo.set(0.0);
}
//one variation to work with piston
if (driveStick.getRawButton(3)) { //top-middle button
spike.setDirection(Relay.Direction.kForward);
} else if (driveStick.getRawButton(4)) {
spike.setDirection(Relay.Direction.kReverse);
}else{
spike.set(Relay.Value.kOff);
}
//which one to choose?
//second variation to work with piston
if (driveStick.getRawButton(5)) {
pistonExtract.set(true);
pistonRetract.set(false);
}else if (driveStick.getRawButton(6)) {
pistonRetract.set(false);
pistonExtract.set(true);
}else{
pistonExtract.set(false);
pistonExtract.set(false);
}
}
public void testPeriodic() {
}
}
|
|
#2
|
||||||
|
||||||
|
Re: Iterative Robot - Need Help!!!
Quote:
You could also use the DoubleSolenoid class, instead of two Solenoid objects. I don't see anything obviously wrong with the code. |
|
#3
|
||||
|
||||
|
Re: Iterative Robot - Need Help!!!
Even someone with experience will not be able to answer this question perfectly. There are only 2 ways to guarantee that code will work: running it in a (very good) simulator, or running it on the robot. The former is not currently possible with Java, so you'll have to go with the latter. The more you test the code on the actual machine it must run on, the more bugs will become apparent and can be fixed. Your code will fail in some way at some point, so you should do your best to make sure that the failure happens during build season, instead of at a competition.
|
|
#4
|
|||
|
|||
|
Re: Iterative Robot - Need Help!!!
Code:
package edu.wpi.first.wpilibj.templates;
import edu.wpi.first.wpilibj.Compressor;
import edu.wpi.first.wpilibj.IterativeRobot;
import edu.wpi.first.wpilibj.Jaguar;
import edu.wpi.first.wpilibj.Joystick;
import edu.wpi.first.wpilibj.Relay;
import edu.wpi.first.wpilibj.RobotDrive;
import edu.wpi.first.wpilibj.Solenoid;
import edu.wpi.first.wpilibj.Victor;
public class RobotTemplate extends IterativeRobot {
int joystickPort = 1;
int leftMotorChannel = 2;
int rightMotorChannel = 1;
int pressureSwitchChannel = 1;
//The GPIO channel that the pressure switch is attached to.
int compressorRelayChannel = 1;
//The relay channel that the compressor relay is attached to.
int relayModuleNumber = 1;
int relayChannelNumber = 2;
int victorOneChannel = 3;
int victorTwoChannel = 4;
final int victorOneChannel = 3; Code:
RobotDrive theRobot = new RobotDrive(leftMotorChannel, rightMotorChannel);
Joystick driveStick = new Joystick(joystickPort);
Compressor mainCompressor = new Compressor(pressureSwitchChannel, compressorRelayChannel);
Relay spike = new Relay(relayModuleNumber, relayChannelNumber);
Victor wheelOne = new Victor(victorOneChannel);
Victor wheelTwo = new Victor(victorTwoChannel);
//if relay doesn't work - use this:
Solenoid pistonExtract = new Solenoid (1);
Solenoid pistonRetract = new Solenoid (2);
public void robotInit() {
mainCompressor.start();
}
Code:
public void autonomousPeriodic() {
// will fill later
}
public void teleopPeriodic() {
//variables expected to update periodically
double moveValue = driveStick.getAxis(Joystick.AxisType.kY);
double rotateValue = driveStick.getAxis(Joystick.AxisType.kX);
theRobot.arcadeDrive(moveValue, -rotateValue); //robot driving
double speed = 1.0; //adjustment back of joystick
if (driveStick.getTrigger()) { //shooter wheels
wheelOne.set(speed);
wheelTwo.set(speed);
}else{
wheelOne.set(0.0);
wheelTwo.set(0.0);
}
)Code:
//one variation to work with piston
if (driveStick.getRawButton(3)) { //top-middle button
spike.setDirection(Relay.Direction.kForward);
} else if (driveStick.getRawButton(4)) {
spike.setDirection(Relay.Direction.kReverse);
}else{
spike.set(Relay.Value.kOff);
}
Code:
//which one to choose?
//second variation to work with piston
if (driveStick.getRawButton(5)) {
pistonExtract.set(true);
pistonRetract.set(false);
}else if (driveStick.getRawButton(6)) {
pistonRetract.set(false);
pistonExtract.set(true);
}else{
pistonExtract.set(false);
pistonExtract.set(false);
}
Code:
}
public void testPeriodic() {
}
}
|
|
#5
|
|||
|
|||
|
Hello all,
I am a rookie mentor w/ only one experienced programmer. He is learning Java. I am an EE for process controls & automation, but my programming is platform specific. I can read the existing Java code from last year's robot, but we are adding & changing things. I have a few quick questions 1) Where can I find who to use the "iterative Robot" class's methods? 2) Where can I see or program to map the physical I/O to things like Jaguars & ultrasonic sensors? 3) Can I use a relay output point to turn on a motor (w/ the 3 wire pig tail and the 2 power wires) or should I wire them to a PWM point and simply send it a full speed signal? 4) Is there an input that will work with the PWM output of an ultrasonic sensor (300 micro-seconds to 9999 micro-seconds) or do I have to use the voltage analog output from the sensor? ![]() |
|
#6
|
||||
|
||||
|
Re: Iterative Robot - Need Help!!!
Quote:
Quote:
Quote:
Code:
motor.set(Relay.Value.kForward) // relay motor.set(1); // PWM Quote:
Code:
AnalogChannel input = new AnalogChannel(<port>); // change <port> for your setup input.getAverageVoltage(); // returns analog signal |
![]() |
| Thread Tools | |
| Display Modes | Rate This Thread |
|
|