View Single Post
  #4   Spotlight this post!  
Unread 10-04-2006, 13:44
GlennGraham's Avatar
GlennGraham GlennGraham is offline
Registered User
AKA: Glenn Graham
FLL #0006 (Shark Bait!)
Team Role: Coach
 
Join Date: Jan 2006
Rookie Year: 2003
Location: Beaverton, Oregon
Posts: 20
GlennGraham is an unknown quantity at this point
Re: Programming: MotorRcControl() vs GetRxInput()/SetServo()

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);
      }
}

Last edited by GlennGraham : 10-04-2006 at 20:42.
Reply With Quote