James O.
for Programming Officer
#pragma region VEXcode Generated Robot Configuration
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <math.h>
#include <string.h>
#include "vex.h"
using namespace vex;
brain Brain;
#define waitUntil(condition) \
do { \
wait(5, msec); \
} while (!(condition))
#define repeat(iterations) \
for (int iterator = 0; iterator < iterations; iterator++)
controller Controller1 = controller(primary);
motor Motor1 = motor(PORT5, ratio6_1, false);
motor Motor2 = motor(PORT2, ratio6_1, false);
servo ServoNeuralNet = servo(Brain.ThreeWirePort.H);
motor GrabberArm = motor(PORT4, ratio6_1, false);
motor MotorNetExtendyThing = motor(PORT3, ratio6_1, false);
servo KeyTurn = servo(Brain.ThreeWirePort.G);
void initializeRandomSeed(){
int systemTime = Brain.Timer.systemHighResolution();
double batteryCurrent = Brain.Battery.current();
double batteryVoltage = Brain.Battery.voltage(voltageUnits::mV);
int seed = int(batteryVoltage + batteryCurrent * 100) + systemTime;
srand(seed);
}
void vexcodeInit() {
initializeRandomSeed();
}
void playVexcodeSound(const char *soundName) {
printf("VEXPlaySound:%s\n", soundName);
wait(5, msec);
}
bool RemoteControlCodeEnabled = true;
#pragma endregion VEXcode Generated Robot Configuration
#include "vex.h"
using namespace vex;
enum SelectorState {
Idle,
Pause,
TurningLeft,
TurningRight
};
SelectorState selectorState = Idle;
void makeIdle() {
selectorState = Idle;
}
void makePaused() {
selectorState = Pause;
}
enum DriveMode {
Tank,
SingleStick
};
DriveMode driveMode = SingleStick;
void showDriveMode() {
Controller1.Screen.clearLine(1);
Controller1.Screen.setCursor(1, 1);
if(driveMode == Tank) {
Controller1.Screen.print("Tank Drive Mode");
} else if(driveMode == SingleStick) {
Controller1.Screen.print("Single-Stick Mode");
}
}
void swapDriveMode() {
if(driveMode == Tank) {
driveMode = SingleStick;
} else if(driveMode == SingleStick) {
driveMode = Tank;
}
showDriveMode();
}
int main() {
vexcodeInit();
Controller1.ButtonUp.pressed(swapDriveMode);
showDriveMode();
bool extendedArm = false;
bool extendedFront = false;
while(true) {
double mult = 1;
if(Controller1.ButtonL2.pressing()) {
mult = 0.15;
Motor1.setStopping(hold);
Motor2.setStopping(hold);
} else {
Motor1.setStopping(coast);
Motor2.setStopping(coast);
}
if(!Controller1.ButtonL1.pressing()) {
if(driveMode == SingleStick) {
Motor1.spin(forward, ((Controller1.Axis4.position() + Controller1.Axis3.position()) / 100.0) * 12.0 * mult, volt);
Motor2.spin(forward, ((Controller1.Axis4.position() - Controller1.Axis3.position()) / 100.0) * 12.0 * mult, volt);
}
if(driveMode == Tank) {
Motor1.spin(reverse, (-Controller1.Axis3.position() / 100.0) * 12.0 * mult, volt);
Motor2.spin(reverse, (Controller1.Axis2.position() / 100.0) * 12.0 * mult, volt);
}
} else {
if(driveMode == SingleStick) {
Motor1.spin(forward, ((100 + Controller1.Axis4.position() * 2) / 100.0) * 12.0 * mult, volt);
Motor2.spin(forward, ((-100 + Controller1.Axis4.position() * 2) / 100.0) * 12.0 * mult, volt);
}
if(driveMode == Tank) {
Motor1.spin(reverse, ((-100 - Controller1.Axis3.position()) / 100.0) * 12.0 * mult, volt);
Motor2.spin(reverse, ((100 + Controller1.Axis2.position()) / 100.0) * 12.0 * mult, volt);
}
}
if(Controller1.ButtonDown.pressing()) {
ServoNeuralNet.setPosition(-50, degrees);
} else {
ServoNeuralNet.setPosition(50, degrees);
}
if (Controller1.ButtonR1.pressing()) {
extendedArm = true;
}
if (Controller1.ButtonR2.pressing()) {
extendedFront = true;
}
MotorNetExtendyThing.spin(reverse, extendedFront ? 12.0 : 0.0, volt);
GrabberArm.spin(forward, extendedArm ? 12.0 : 0.0, volt);
if(selectorState == Idle) {
if(Controller1.ButtonLeft.pressing()) {
selectorState = TurningLeft;
Brain.Timer.event(makePaused, 291);
Brain.Timer.event(makeIdle, 600);
}
if(Controller1.ButtonRight.pressing()) {
selectorState = TurningRight;
Brain.Timer.event(makePaused, 291);
Brain.Timer.event(makeIdle, 600);
}
}
wait(50, msec);
}
}
Click to enter fullscreen mode