Exemple #1
0
/** @details
 *  This thread is started when the driver control period is started
 */
msg_t
vexOperator( void *arg )
{
	int16_t		blink = 0;

	(void)arg;

	// Must call this
	vexTaskRegister("operator");

	// Run until asked to terminate
	while(!chThdShouldTerminate())
		{
		// flash led/digi out
		vexDigitalPinSet( kVexDigital_1, (blink++ >> 3) & 1);

		// status on LCD of encoder and sonar
		vexLcdPrintf( VEX_LCD_DISPLAY_2, VEX_LCD_LINE_1, "%4.2fV   %8.1f", vexSpiGetMainBattery() / 1000.0, chTimeNow() / 1000.0 );
		vexLcdPrintf( VEX_LCD_DISPLAY_2, VEX_LCD_LINE_2, "L %3d R %3d", vexMotorGet( MotorDriveL ), vexMotorGet( MotorDriveR ) );

		// Tank drive
		// left drive
		vexMotorSet( MotorDriveL, vexControllerGet( Ch3 ) );

		// right drive
		vexMotorSet( MotorDriveR, vexControllerGet( Ch2 ) );

		// Don't hog cpu
		vexSleep( 25 );
		}

	return (msg_t)0;
}
Exemple #2
0
task
DriveTask(void *arg)
{
    short   forward, turn;

    (void)arg;
    vexTaskRegister("Drive task");

    while( TRUE )
        {
        // Get controller
        if( abs( vexControllerGet( Ch3 ) ) > 10 )
            forward = vexControllerGet( Ch3 );
        else
            forward = 0;

        if( abs( vexControllerGet( Ch4 ) ) > 10 )
            turn = vexControllerGet( Ch4 );
        else
            turn = 0;

        DriveSystemArcadeDrive( forward, turn );

        wait1Msec(25);
        }
}
/** @details
 *  This thread is started when the driver control period is started
 */
msg_t
vexOperator( void *arg )
{
    (void)arg;

    // Must call this
    vexTaskRegister("operator");

    vexLcdClearLine(VEX_LCD_DISPLAY_1, VEX_LCD_LINE_T);
    vexLcdClearLine(VEX_LCD_DISPLAY_1, VEX_LCD_LINE_B);

    // Run until asked to terminate
    while(!chThdShouldTerminate())
        {
        // show some user parameters
        vexLcdPrintf( VEX_LCD_DISPLAY_1, VEX_LCD_LINE_T, "%02X %02X %02X %02X", userp->data[0],userp->data[1],userp->data[2],userp->data[3]);

        // buttons 8 change user parameters
        if( vexControllerGet( Btn8U ) == 1 )
            {
            userp->data[0]++;
            vexControllerReleaseWait(Btn8U);
            }
        if( vexControllerGet( Btn8R ) == 1 )
            {
            userp->data[1]++;
            vexControllerReleaseWait(Btn8R);
            }
        if( vexControllerGet( Btn8D) == 1 )
            {
            userp->data[2]++;
            vexControllerReleaseWait(Btn8D);
            }
        if( vexControllerGet( Btn8L) == 1 )
            {
            userp->data[3]++;
            vexControllerReleaseWait(Btn8L);
            }

        // Button 7 Up saves
        if( vexControllerGet( Btn7U ) == 1 )
            {
            vexFlashUserParamWrite( userp );
            vexLcdPrintf( VEX_LCD_DISPLAY_1, VEX_LCD_LINE_B, "Saved...");
            vexControllerReleaseWait(Btn7U);
            }

        // Don't hog cpu
        vexSleep( 25 );
        }

    return (msg_t)0;
}
Exemple #4
0
task safetyTask(void *arg) {
  (void)arg;
  vexTaskRegister("safety");

  while (!chThdShouldTerminate()) {
    // detect if controller is face down.
    if (vexControllerGet(AcclY) < 0) { // figure this out
      vexMotorStopAll(); // kill all motors (for now)
      //vexTaskEmergencyStop(); // emergency stop, reboot required
    }

    vexSleep(10);
  }

  return (task)0;
}
Exemple #5
0
task
ManualArmClawTask(void *arg)
{
    (void)arg;
    vexTaskRegister("manual arm");

    // initialize
    SetArmPosition( vexAdcGet( armPot ) );

    // use joystick to modify the requested position
    while( TRUE )
        {
        // presets - assume joystick is centered
        if( vexControllerGet( Btn8U ) == 1 )
            SetArmPosition( ARM_PRESET_H );
        else
        if( vexControllerGet( Btn8D ) == 1 )
            SetArmPosition( ARM_PRESET_L );

        // manual control
        if( abs(vexControllerGet( Ch2 )) > 15 )
            SetArmPosition( GetArmPosition() + (vexControllerGet( Ch2 )) );

        // Claw control
        if( vexControllerGet( Btn6D ) == 1 )
            ClawOpen();
        else
        if( vexControllerGet( Btn6U ) == 1 )
            ClawClose();
        else
            ClawStop();

        // don't hog cpu
        wait1Msec(50);
        }
}
// Driver control task
msg_t
vexOperator( void *arg )
{
	int16_t		forward;
	int16_t		turn;
	int16_t     nexttune = 0;

	(void)arg;

	// Must call this
	vexTaskRegister("operator");

    RtttlDemo(nexttune);

	// Run until asked to terminate
	while(!chThdShouldTerminate())
		{
	    if( vexControllerGet( Btn7 ) )
	        {
	        if( vexControllerGet( Btn7R ) )
	            {
	            if(++nexttune == NUM_TUNES)
	                nexttune = 0;
	            }
	        if( vexControllerGet( Btn7L ) )
	            {
	            if(--nexttune < 0)
	                nexttune = NUM_TUNES-1;
	            }

	        RtttlDemo(nexttune);

	        // lazy
	        while(vexControllerGet( Btn7 ))
	            vexSleep(25);
	        }

		// status on LCD of encoder and sonar
		vexLcdPrintf( VEX_LCD_DISPLAY_2, VEX_LCD_LINE_1, "Batt %4.2fV", vexSpiGetMainBattery() / 1000.0 );

		// Get controller
		if( abs( vexControllerGet( Ch2 )) > 10 )
			forward = vexControllerGet( Ch2 );
		else
			forward = 0;

		if( abs( vexControllerGet( Ch1 )) > 10 )
			turn = vexControllerGet( Ch1 );
		else
			turn = 0;

        if( abs( vexControllerGet( Ch3 )) > 10 )
            SetMotor( 1, vexControllerGet( Ch3 ) );
        else
            SetMotor( 1, 0 );

		// arcade drive
		DriveSystemArcadeDrive( forward, turn );

		// Don't hog cpu
		vexSleep( 25 );
		}

	return (msg_t)0;
}
Exemple #7
0
/*-----------------------------------------------------------------------------*/
void
apolloUpdate()
{
    int     i;

    // all motor values
    for(i=0;i<10;i++)
        apolloUpdateMotor( i );

    // all digital values
    for(i=0;i<12;i++)
        apolloUpdateDigital( i );

    // all analog values
    for(i=0;i<8;i++)
        apolloUpdateAnalog( i );

    // update current and temp for cortex
    apolloUpdateCortex(0);
    apolloUpdateCortex(1);
    apolloUpdateSystem();

    // display the joystick data
    apolloUpdateJoystickButton( 0, 0, vexControllerGet(Btn5U), vexControllerGet(Btn5D), -1, -1 );
    apolloUpdateJoystickButton( 0, 1, vexControllerGet(Btn6U), vexControllerGet(Btn6D), -1, -1 );
    apolloUpdateJoystickButton( 0, 2, vexControllerGet(Btn7U), vexControllerGet(Btn7D), vexControllerGet(Btn7L), vexControllerGet(Btn7R) );
    apolloUpdateJoystickButton( 0, 3, vexControllerGet(Btn8U), vexControllerGet(Btn8D), vexControllerGet(Btn8L), vexControllerGet(Btn8R) );
    apolloUpdateJoystickAnalog( 0, 0, vexControllerGet(Ch4), vexControllerGet(Ch3) );
    apolloUpdateJoystickAnalog( 0, 1, vexControllerGet(Ch1), vexControllerGet(Ch2) );
    apolloUpdateJoystickAnalog( 0, 3, vexControllerGet(AcclX), vexControllerGet(AcclY) );

    if( (vexControllerCompetitonState() & kFlagXmit2 ) == kFlagXmit2 )
        {
        // display the joystick data
        apolloUpdateJoystickButton( 1, 0, vexControllerGet(Btn5UXmtr2), vexControllerGet(Btn5DXmtr2), -1, -1 );
        apolloUpdateJoystickButton( 1, 1, vexControllerGet(Btn6UXmtr2), vexControllerGet(Btn6DXmtr2), -1, -1 );
        apolloUpdateJoystickButton( 1, 2, vexControllerGet(Btn7UXmtr2), vexControllerGet(Btn7DXmtr2), vexControllerGet(Btn7LXmtr2), vexControllerGet(Btn7RXmtr2) );
        apolloUpdateJoystickButton( 1, 3, vexControllerGet(Btn8UXmtr2), vexControllerGet(Btn8DXmtr2), vexControllerGet(Btn8LXmtr2), vexControllerGet(Btn8RXmtr2) );
        apolloUpdateJoystickAnalog( 1, 0, vexControllerGet(Ch4Xmtr2), vexControllerGet(Ch3Xmtr2) );
        apolloUpdateJoystickAnalog( 1, 1, vexControllerGet(Ch1Xmtr2), vexControllerGet(Ch2Xmtr2) );
        apolloUpdateJoystickAnalog( 1, 3, vexControllerGet(AcclXXmtr2), vexControllerGet(AcclYXmtr2) );
        }

    // move cursor out of the way
    vt100_cursor(T_WIDTH, T_HEIGHT);
}
/** @details
 *  This function simulates the cortex default code, it was based on the ROBOTC
 *  implementation but with some changes in structure.
 */
void
vexCortexDefaultDriver(void)
{
    int16_t mech1_lim_ccw = 0;
    int16_t mech1_lim_cw  = 0;
    int16_t mech2_lim_ccw = 0;
    int16_t mech2_lim_cw  = 0;
    int16_t mech3_lim_ccw = 0;
    int16_t mech3_lim_cw  = 0;
    int16_t mech4_lim_ccw = 0;
    int16_t mech4_lim_cw  = 0;

    int16_t drive_left  = 0;
    int16_t drive_right = 0;
    int16_t drive_mech1 = 0;
    int16_t drive_mech2 = 0;
    int16_t drive_mech3 = 0;
    int16_t drive_mech4 = 0;

    while( !chThdShouldTerminate() )
        {
        // Set motor direction - a jumper in ports 1 through 10 reversed motor
        vexMotorDirectionSet( LeftDrive1,   vexDigitalPinGet( kVexDigital_1  ) == JUMPER_IN ? kVexMotorReversed : kVexMotorNormal );
        vexMotorDirectionSet( LeftDrive2,   vexDigitalPinGet( kVexDigital_2  ) == JUMPER_IN ? kVexMotorReversed : kVexMotorNormal );
        vexMotorDirectionSet( LeftDrive3,   vexDigitalPinGet( kVexDigital_3  ) == JUMPER_IN ? kVexMotorReversed : kVexMotorNormal );
        vexMotorDirectionSet( RightDrive4,  vexDigitalPinGet( kVexDigital_4  ) == JUMPER_IN ? kVexMotorReversed : kVexMotorNormal );
        vexMotorDirectionSet( RightDrive5,  vexDigitalPinGet( kVexDigital_5  ) == JUMPER_IN ? kVexMotorReversed : kVexMotorNormal );
        vexMotorDirectionSet( Mech1,        vexDigitalPinGet( kVexDigital_6  ) == JUMPER_IN ? kVexMotorReversed : kVexMotorNormal );
        vexMotorDirectionSet( Mech2,        vexDigitalPinGet( kVexDigital_7  ) == JUMPER_IN ? kVexMotorReversed : kVexMotorNormal );
        vexMotorDirectionSet( Mech3,        vexDigitalPinGet( kVexDigital_8  ) == JUMPER_IN ? kVexMotorReversed : kVexMotorNormal );
        vexMotorDirectionSet( Mech4,        vexDigitalPinGet( kVexDigital_9  ) == JUMPER_IN ? kVexMotorReversed : kVexMotorNormal );
        vexMotorDirectionSet( RightDrive10, vexDigitalPinGet( kVexDigital_10 ) == JUMPER_IN ? kVexMotorReversed : kVexMotorNormal );

        // Sample analog inputs - these are used as limit switches
        mech1_lim_ccw = vexAdcGet( kVexAnalog_1 ) < 200 ? 0 : 1;
        mech1_lim_cw  = vexAdcGet( kVexAnalog_2 ) < 200 ? 0 : 1;
        mech2_lim_ccw = vexAdcGet( kVexAnalog_3 ) < 200 ? 0 : 1;
        mech2_lim_cw  = vexAdcGet( kVexAnalog_4 ) < 200 ? 0 : 1;
        mech3_lim_ccw = vexAdcGet( kVexAnalog_5 ) < 200 ? 0 : 1;
        mech3_lim_cw  = vexAdcGet( kVexAnalog_6 ) < 200 ? 0 : 1;
        mech4_lim_ccw = vexAdcGet( kVexAnalog_7 ) < 200 ? 0 : 1;
        mech4_lim_cw  = vexAdcGet( kVexAnalog_8 ) < 200 ? 0 : 1;

        // SINGLE DRIVER - TANK
        if( vexDigitalPinGet( kVexDigital_11 ) == JUMPER_OUT && vexDigitalPinGet( kVexDigital_12 ) == JUMPER_OUT )
            {
            drive_left  =  vexControllerGet( Ch3 ); // up = CW
            drive_right = -vexControllerGet( Ch2 ); // up = CCW

            drive_mech1 = (vexControllerGet( Btn5U ) * 127) - (vexControllerGet( Btn5D ) * 127); // U = CW, D = CCW
            drive_mech2 = (vexControllerGet( Btn6U ) * 127) - (vexControllerGet( Btn6D ) * 127); // U = CW, D = CCW
            drive_mech3 = (vexControllerGet( Btn7U ) * 127) - (vexControllerGet( Btn7D ) * 127); // U = CW, D = CCW
            drive_mech4 = (vexControllerGet( Btn8U ) * 127) - (vexControllerGet( Btn8D ) * 127); // U = CW, D = CCW
            }
        else
        // DUAL DRIVER - TANK
        if( vexDigitalPinGet( kVexDigital_11 ) == JUMPER_IN && vexDigitalPinGet( kVexDigital_12 ) == JUMPER_OUT )
            {
            drive_left  =  vexControllerGet( Ch3 ); // up = CW
            drive_right = -vexControllerGet( Ch2 ); // up = CCW

            drive_mech1 = (vexControllerGet( Btn5UXmtr2 ) * 127) - (vexControllerGet( Btn5DXmtr2 ) * 127); // U = CW, D = CCW
            drive_mech2 = (vexControllerGet( Btn6UXmtr2 ) * 127) - (vexControllerGet( Btn6DXmtr2 ) * 127); // U = CW, D = CCW
            drive_mech3 =  vexControllerGet( Ch3Xmtr2 ); // up = CW
            drive_mech4 =  vexControllerGet( Ch2Xmtr2 ); // up = CW
            }
        else
        // SINGLE DRIVER - ARCADE
        if( vexDigitalPinGet( kVexDigital_11 ) == JUMPER_OUT && vexDigitalPinGet( kVexDigital_12 ) == JUMPER_IN )
            {
            drive_left  =  vexControllerGet( Ch1 ) + vexControllerGet( Ch2 ); // up = CW,  right = CW
            drive_right =  vexControllerGet( Ch1 ) - vexControllerGet( Ch2 ); // up = CCW, right = CW

            drive_mech1 = (vexControllerGet( Btn5U ) * 127) - (vexControllerGet( Btn5D ) * 127); // U = CW, D = CCW
            drive_mech2 = (vexControllerGet( Btn6U ) * 127) - (vexControllerGet( Btn6D ) * 127); // U = CW, D = CCW
            drive_mech3 =  vexControllerGet( Ch3 ); // up = CW
            drive_mech4 = -vexControllerGet( Ch4 ); // right = CCW
            }
        else
        // DUAL DRIVER - ARCADE
        if( vexDigitalPinGet( kVexDigital_11 ) == JUMPER_IN && vexDigitalPinGet( kVexDigital_12 ) == JUMPER_IN )
            {
            drive_left  =  vexControllerGet( Ch1 ) + vexControllerGet( Ch2 ); // up = CW,  right = CW
            drive_right =  vexControllerGet( Ch1 ) - vexControllerGet( Ch2 ); // up = CCW, right = CW

            drive_mech1 = (vexControllerGet( Btn5UXmtr2 ) * 127) - (vexControllerGet( Btn5DXmtr2 ) * 127); // U = CW, D = CCW
            drive_mech2 = (vexControllerGet( Btn6UXmtr2 ) * 127) - (vexControllerGet( Btn6DXmtr2 ) * 127); // U = CW, D = CCW
            drive_mech3 =  vexControllerGet( Ch3Xmtr2 ); // up = CW
            drive_mech4 =  vexControllerGet( Ch2Xmtr2 ); // up = CW
            }

        // Left drive motors
        vexMotorSet( LeftDrive1,   drive_left  );
        vexMotorSet( LeftDrive2,   drive_left  );
        vexMotorSet( LeftDrive3,   drive_left  );

        // Right drive motors
        vexMotorSet( RightDrive4,  drive_right );
        vexMotorSet( RightDrive5,  drive_right );
        vexMotorSet( RightDrive10, drive_right );

        // Limit switches
        if( ( !mech1_lim_cw && (drive_mech1 > 0)) || ( !mech1_lim_ccw && (drive_mech1 < 0)) )
            drive_mech1 = 0;

        if( ( !mech2_lim_cw && (drive_mech2 > 0)) || ( !mech2_lim_ccw && (drive_mech2 < 0)) )
            drive_mech2 = 0;

        if( ( !mech3_lim_cw && (drive_mech3 > 0)) || ( !mech3_lim_ccw && (drive_mech3 < 0)) )
            drive_mech3 = 0;

        if( ( !mech4_lim_cw && (drive_mech4 > 0)) || ( !mech4_lim_ccw && (drive_mech4 < 0)) )
            drive_mech4 = 0;

        // Mechanism motors
        vexMotorSet( Mech1, drive_mech1 );
        vexMotorSet( Mech2, drive_mech2 );
        vexMotorSet( Mech3, drive_mech3 );
        vexMotorSet( Mech4, drive_mech4 );

        // small delay
        vexSleep(10);
        }
}