TRC Library for FTC (2011) 2011
TRC Library Code Project

C:/Users/Michael/Ftc/2011/code/trclib/servo.h

Go to the documentation of this file.
00001 #if 0
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 #endif
00014 
00015 #ifndef _SERVO_H
00016 #define _SERVO_H
00017 
00018 #pragma systemFile
00019 
00020 #ifdef MOD_ID
00021     #undef MOD_ID
00022 #endif
00023 #define MOD_ID                  MOD_SERVO
00024 
00025 //
00026 // Constants.
00027 //
00028 #define MIN_SERVO_VALUE         0
00029 #define MAX_SERVO_VALUE         255
00030 #if 0
00031 #define SERVOF_USER_MASK        0x00ff
00032 #define SERVOF_ENABLE_EVENTS    0x0001
00033 #endif
00034 
00035 //
00036 // Type definitions.
00037 //
00038 typedef struct
00039 {
00040     int   servoMotor;
00041     float posPerDegree;
00042 #if 0
00043     int   servoFlags;
00044     int   servoPos;
00045 #endif
00046 } SERVO;
00047 
00048 #if 0
00049 //
00050 // Import function prototypes.
00051 //
00052 void
00053 ServoEvent(
00054     __in SERVO &serv
00055     );
00056 #endif
00057 
00067 void
00068 ServoInit(
00069     __out SERVO &serv,
00070     __in  int servoMotor,
00071     __in  float posPerDegree,
00072     __in  float initDegrees
00073 #if 0
00074     __in  int servoFlags
00075 #endif
00076     )
00077 {
00078     TFuncName("ServoInit");
00079     TLevel(INIT);
00080     TEnter();
00081 
00082     serv.servoMotor = servoMotor;
00083     serv.posPerDegree = posPerDegree;
00084 #if 0
00085     serv.servoFlags = servoFlags & SERVOF_USER_MASK;
00086     serv.servoPos = 0;
00087 #endif
00088     servo[servoMotor] = initDegrees*posPerDegree;
00089 
00090     TExit();
00091     return;
00092 }   //ServoInit
00093 
00101 float
00102 ServoGetAngle(
00103     __out SERVO &serv
00104     )
00105 {
00106     float degree;
00107 
00108     TFuncName("ServoGetPos");
00109     TLevel(API);
00110     TEnter();
00111 
00112     degree = (float)ServoValue[serv.servoMotor]/serv.posPerDegree;
00113 
00114     TExitMsg(("=%5.1f", degree));
00115     return degree;
00116 }   //ServoGetAngle
00117 
00124 void
00125 ServoSetAngle(
00126     __out SERVO &serv,
00127     __in  float degree
00128     )
00129 {
00130     int servoPos;
00131 
00132     TFuncName("ServoSetPos");
00133     TLevel(API);
00134     TEnterMsg(("degree=%5.1f", degree));
00135 
00136     servoPos = (int)(degree*serv.posPerDegree);
00137     if (servoPos > MAX_SERVO_VALUE)
00138     {
00139         servoPos = MAX_SERVO_VALUE;
00140     }
00141     else if (servoPos < MIN_SERVO_VALUE)
00142     {
00143         servoPos = MIN_SERVO_VALUE;
00144     }
00145     servo[serv.servoMotor] = servoPos;
00146 
00147     TExit();
00148     return;
00149 }   //ServoSetAngle
00150 
00151 #if 0
00152 
00157 void
00158 ServoTask(
00159     __inout SERVO &serv
00160     )
00161 {
00162     int output;
00163 
00164     TFuncName("ServoTask");
00165     TLevel(TASK);
00166     TEnter();
00167 
00168     servo[serv.servoMotor] = serv.servoPos;
00169     if ((serv.servoFlags & SERVOF_ENABLE_EVENTS) &&
00170         (ServoValue[serv.servoMotor] == serv.servoPos))
00171     {
00172         ServoEvent(serv);
00173     }
00174 
00175     TExit();
00176     return;
00177 }   //ServoTask
00178 #endif
00179 
00180 #endif  //ifndef _SERVO_H
 All Data Structures Files Functions Variables Defines