Hey guys,
can u please tell why the limit switch isn’t working?
It should be just activated during the preautonom phase and should use a if then funktion. Thanks!
Here is the code:
/*----------------------------------------------------------------------------*/
/* */
/* Module: main.cpp */
/* Author: Vex */
/* Created: 1/21/2025, 5:38:31 PM */
/* Description: V5 project */
/* */
/*----------------------------------------------------------------------------*/
#include "vex.h"
using namespace vex;
//Brain
brain Brain;
// A global instance of competition
competition Competition;
// define your global instances of motors and other devices here
// Motoren definieren (an Ports 1, 2, 3, 4 für die Fahrt)
motor Motor1(PORT20, gearSetting::ratio18_1, false); // Motor 1 (links vorne)
motor Motor2(PORT19, gearSetting::ratio18_1, false); // Motor 2 (links hinten)
motor Motor3(PORT11, gearSetting::ratio18_1, false); // Motor 3 (rechts vorne)
motor Motor4(PORT17, gearSetting::ratio18_1, false); // Motor 4 (rechts hinten)
// Motoren für das Band (Ports 5 und 6)
motor BandMotor1(PORT16, gearSetting::ratio18_1, false); // Motor 5 für Band vorwärts
motor BandMotor2(PORT9, gearSetting::ratio18_1, true); // Motor 6 für Band rückwärts
// Motoren für den Arm (Ports 7 und 8)
motor ArmMotor1(PORT15, gearSetting::ratio36_1, false); // Motor 7 für Arm (bewegt in eine Richtung)
motor ArmMotor2(PORT13, gearSetting::ratio36_1, false); // Motor 8 für Arm (bewegt in die andere Richtung)
// Pneumatik-Setup (Solenoide für Kolben)
digital_out upone = digital_out(Brain.ThreeWirePort.A);
digital_out arm = digital_out(Brain.ThreeWirePort.B);
// limitswitch Zaehler
limit limitSwitch(Brain.ThreeWirePort.C);
// Controller definieren
controller Controller1;
/*---------------------------------------------------------------------------*/
/* Pre-Autonomous Functions */
/* */
/* You may want to perform some actions before the competition starts. */
/* Do them in the following function. You must return from this function */
/* or the autonomous and usercontrol tasks will not be started. This */
/* function is only called once after the V5 has been powered on and */
/* not every time that the robot is disabled. */
/*---------------------------------------------------------------------------*/
void pre_auton(void) {
// All activities that occur before the competition starts
// Example: clearing encoders, setting servo positions, ...
Motor1.setVelocity(100, pct);
Motor1.setMaxTorque(100, pct);
Motor2.setVelocity(100, pct);
Motor2.setMaxTorque(100, pct);
Motor3.setVelocity(100, pct);
Motor3.setMaxTorque(100, pct);
Motor4.setVelocity(100, pct);
Motor4.setMaxTorque(100, pct);
BandMotor1.setVelocity(100, pct);
BandMotor1.setMaxTorque(100, pct);
BandMotor2.setVelocity(100, pct);
BandMotor2.setMaxTorque(100, pct);
ArmMotor1.setVelocity(100, pct);
ArmMotor1.setMaxTorque(100, pct);
ArmMotor2.setVelocity(100, pct);
ArmMotor2.setMaxTorque(100, pct);
}
/*---------------------------------------------------------------------------*/
/* */
/* Autonomous Task */
/* */
/* This task is used to control your robot during the autonomous phase of */
/* a VEX Competition. */
/* */
/* You must modify the code to add your own robot specific commands here. */
/*---------------------------------------------------------------------------*/
void autonomous(void) {
// ..........................................................................
// Insert autonomous user code here.
// ..........................................................................
//Turm holen
BandMotor1.spin(forward);
BandMotor2.spin(reverse);
Motor1.spin(reverse);
Motor2.spin(reverse);
Motor3.spin(forward);
Motor4.spin(forward);
task::sleep(950);
Motor1.stop();
Motor2.stop();
Motor3.stop();
Motor4.stop();
Motor1.spin(reverse);
Motor2.spin(reverse);
Motor3.spin(reverse);
Motor4.spin(reverse);
task::sleep(225);
Motor1.stop();
Motor2.stop();
Motor3.stop();
Motor4.stop();
upone.set(true);
Motor1.spin(reverse);
Motor2.spin(reverse);
Motor3.spin(forward);
Motor4.spin(forward);
task::sleep(400);
Motor1.stop();
Motor2.stop();
Motor3.stop();
Motor4.stop();
upone.set(false);
BandMotor1.spin(forward);
BandMotor2.spin(reverse);
// Turm holen
//Stack6 holen (drinbehalten nicht auf Turm maachen)
Motor1.spin(reverse);
Motor2.spin(reverse);
Motor3.spin(reverse);
Motor4.spin(reverse);
task::sleep(350);
Motor1.stop();
Motor2.stop();
Motor3.stop();
Motor4.stop();
// Autonomer Ablauf mit Überwachung des Limit Switches
Motor1.spin(forward);
Motor2.spin(forward);
Motor3.spin(reverse);
Motor4.spin(reverse);
task::sleep(1000);
Motor1.stop();
Motor2.stop();
Motor3.stop();
Motor4.stop();
BandMotor1.stop();
BandMotor2.stop();
//Stack6 holen
//1vonDoubleStack holen (drinbehalten nicht auf Turm maachen)
BandMotor1.spin(forward);
BandMotor2.spin(reverse);
Motor1.spin(reverse);
Motor2.spin(reverse);
Motor3.spin(reverse);
Motor4.spin(reverse);
task::sleep(550);
Motor1.stop();
Motor2.stop();
Motor3.stop();
Motor4.stop();
Motor1.spin(forward);
Motor2.spin(forward);
Motor3.spin(reverse);
Motor4.spin(reverse);
task::sleep(900);
Motor1.stop();
Motor2.stop();
Motor3.stop();
Motor4.stop();
//DoubleStackholen
//wallstakebefüllen
BandMotor1.stop();
BandMotor1.stop();
Motor1.spin(reverse);
Motor2.spin(reverse);
Motor3.spin(forward);
Motor4.spin(forward);
task::sleep(300);
Motor1.stop();
Motor2.stop();
Motor3.stop();
Motor4.stop();
Motor1.spin(reverse);
Motor2.spin(reverse);
Motor3.spin(reverse);
Motor4.spin(reverse);
task::sleep(1000);
Motor1.stop();
Motor2.stop();
Motor3.stop();
Motor4.stop();
Motor1.spin(forward);
Motor2.spin(forward);
Motor3.spin(reverse);
Motor4.spin(reverse);
task::sleep(1500);
Motor1.stop();
Motor2.stop();
Motor3.stop();
Motor4.stop();
Motor1.spin(forward);
Motor2.spin(forward);
Motor3.spin(forward);
Motor4.spin(forward);
task::sleep(600);
Motor1.stop();
Motor2.stop();
Motor3.stop();
Motor4.stop();
Motor1.spin(forward);
Motor2.spin(forward);
Motor3.spin(reverse);
Motor4.spin(reverse);
task::sleep(1900);
Motor1.stop();
Motor2.stop();
Motor3.stop();
Motor4.stop();
}
/*---------------------------------------------------------------------------*/
/* */
/* User Control Task */
/* */
/* This task is used to control your robot during the user control phase of */
/* a VEX Competition. */
/* */
/* You must modify the code to add your own robot specific commands here. */
/*---------------------------------------------------------------------------*/
void usercontrol(void) {
// User control code here, inside the loop
while (1) {
// This is the main execution loop for the user control program.
// Each time through the loop your program should update motor + servo
// values based on feedback from the joysticks.
// ........................................................................
// Insert user code here. This is where you use the joystick values to
// update your motors, etc.
// ........................................................................
// Achse 1 (links/rechts) für die Vorwärtsbewegung
int forwardSpeed = Controller1.Axis1.position(); // Achse 1 (vorwärts)
// Achse 3 (vorwärts/rückwärts) für die Lenkung
int turnSpeed = Controller1.Axis3.position(); // Achse 3 (lenken)
// Vorwärtsbewegung: Alle Motoren gleich ansteuern
Motor1.spin(directionType::fwd, forwardSpeed, velocityUnits::pct);
Motor2.spin(directionType::fwd, forwardSpeed, velocityUnits::pct);
Motor3.spin(directionType::fwd, forwardSpeed, velocityUnits::pct);
Motor4.spin(directionType::fwd, forwardSpeed, velocityUnits::pct);
// Lenkung (Drehen): Motoren links und rechts in entgegengesetzte Richtungen steuern
if (turnSpeed != 0) {
Motor1.spin(directionType::fwd, turnSpeed, velocityUnits::pct);
Motor2.spin(directionType::fwd, turnSpeed, velocityUnits::pct);
Motor3.spin(directionType::fwd, -turnSpeed, velocityUnits::pct); // Motor 3 dreht entgegengesetzt
Motor4.spin(directionType::fwd, -turnSpeed, velocityUnits::pct); // Motor 4 dreht entgegengesetzt
}
// Steuerung der Band-Motoren mit R1 und R2
if (Controller1.ButtonR1.pressing()) {
// Band vorwärts drehen, wenn R1 gedrückt wird
BandMotor1.spin(directionType::fwd, 100, velocityUnits::pct); // Vorwärts bei R1
BandMotor2.spin(directionType::rev, 100, velocityUnits::pct); // Band rückwärts stoppen
}
else if (Controller1.ButtonR2.pressing()) {
// Band rückwärts drehen, wenn R2 gedrückt wird
BandMotor1.spin(directionType::rev, 100, velocityUnits::pct); // Band vorwärts stoppen
BandMotor2.spin(directionType::fwd, 100, velocityUnits::pct); // Rückwärts bei R2
}
else {
// Band stoppen, wenn keine der Tasten gedrückt wird
BandMotor1.stop();
BandMotor2.stop();
}
// Steuerung des Arm-Motors mit A, B und X
if (Controller1.ButtonA.pressing()) {
// Arm auf 45 Grad drehen (Motoren entgegengesetzt)
ArmMotor1.spin(directionType::fwd, 50, velocityUnits::pct); // Motor 1 dreht den Arm nach oben
ArmMotor2.spin(directionType::rev, 50, velocityUnits::pct); // Motor 2 dreht entgegengesetzt
}
else if (Controller1.ButtonB.pressing()) {
// Arm auf 0 Grad zurückdrehen
ArmMotor1.spin(directionType::rev, 50, velocityUnits::pct); // Motor 1 dreht den Arm nach unten
ArmMotor2.spin(directionType::fwd, 50, velocityUnits::pct); // Motor 2 dreht entgegengesetzt
}
else if (Controller1.ButtonX.pressing()) {
// Arm auf 135 Grad drehen
ArmMotor1.spin(directionType::fwd, 100, velocityUnits::pct); // Motor 1 dreht den Arm nach oben
ArmMotor2.spin(directionType::rev, 100, velocityUnits::pct); // Motor 2 dreht entgegengesetzt
}
else {
// Arm stoppen, wenn keine der Tasten gedrückt wird (Arm bleibt in Position)
ArmMotor1.stop();
ArmMotor2.stop();
}
if(Controller1.ButtonB.pressing()) {
upone.set(true); // Kolben ausfahren
} else {
upone.set(false); // Kolben einfahren
}
if(Controller1.ButtonA.pressing()) {
arm.set(true); // Kolben ausfahren
} else {
arm.set(false); // Kolben einfahren
}
wait(20, msec); // Sleep the task for a short amount of time to
// prevent wasted resources.
}
}
//
// Main will set up the competition functions and callbacks.
//
int main() {
// Set up callbacks for autonomous and driver control periods.
Competition.autonomous(autonomous);
Competition.drivercontrol(usercontrol);
// Run the pre-autonomous function.
pre_auton();
// Prevent main from exiting with an infinite loop.
while (true) {
wait(100, msec);
}
}
edit: code tags added by mods, please remember to use them