Quote:
|
Originally Posted by michael714
These commands look interesting. Are they available in EasyC 1.1 or are they from EasyC 2.0? I'm looking for a way to control the two motors in the SquareBot using channel 2 and 3 and then also control the servo using Channel 3 joystick with a side to side motion. The default system works this way, but when I use EasyC to combine autonomy with RC, this ability goes away. Any ideas would be appreciated.
|
As you can see from the messages above, I'm new to programming Vex (many years writing C/C++ code for EDA software though). I've installed EasyC 1.1 but have been using the MPLAB IDE for development (as described in another thread). I believe all the routines are available from EasyC (each routine in my program maps to an EasyC block. You should be able to see the equivelent C code listed in the window next to the block diagram). For reference, my full program is listed at the bottom (if anyone has additional tips, please let me know):
Code:
#include "UserAPI.h"
#define OUTPUT 0
#define INPUT 1
void IO_Initialization(void)
{
DefineControllerIO ( 4, INPUT ,INPUT ,INPUT ,INPUT ,INPUT ,INPUT ,INPUT ,INPUT ,INPUT ,INPUT ,OUTPUT ,INPUT ,OUTPUT ,OUTPUT ,OUTPUT ,OUTPUT ) ;
}
/**************************************************************************
* This code implements the behavior for controlling our 6 wheel robot with
* a articulated arm consisting of multiple parts. Each part will be
* referenced as armA, armB, etc.
**************************************************************************/
void main ( void )
{
// Connections to the controller
unsigned char uCMotorLeft = 3; // uController connection for left motor
unsigned char uCMotorRight = 2; // uController connection for right motor
unsigned char uCButton1 = 10;
unsigned char uCArmA = 8; // uController connection for armA
unsigned char uCArmB = 1; // uController connection for armB
// Radio Channels and their behavior
unsigned char channelMove = 2; // Radio channel used for move;
unsigned char channelRotate = 1; // Radion channel used for rotate;
unsigned char channelArmA = 3; // Radio channel used for armA;
unsigned char channelArmB = 5; // Radio channel used for armB;
// Position, speed, state variables
unsigned char button1 = 1; // Button changes state from radio to <other>
unsigned char armASpeed = 0; // Value for arm #1 position
unsigned char armBPos = 127;
while ( 1 )
{
unsigned char c5 = 127;
unsigned char c3 = 127;
// Use the "canned" one stick maneuvering
Arcade2(1, channelMove, channelRotate, uCMotorLeft, uCMotorRight, 1, 1);
// Get transmitter value for arm joint A
c3 = GetRxInput(1, channelArmA);
// Joint A uses geared-down motor, so run forward or back
// Provide a "dead" range from 117 to 137 otherwise use value as-is.
if(c3 > 137) {
armASpeed = c3;
} else if(c3 < 117) {
armASpeed = c3;
} else {
armASpeed = 127;
}
// Get transmitter value for arm joint B
c5 = GetRxInput(1, channelArmB);
// Joint B is a claw utilizing a servo motor.
// Controlled with button on back of transmitter.
// Set position to open/closed depending on button state.
if(c5 > 137) {
armBPos = 255;
} else {
armBPos = 0;
}
SetPWM(uCArmA, armASpeed);
SetPWM(uCArmB, armBPos);
}
}