From f60fcd1bb7b1044a7da5f6ecff89289f091a2773 Mon Sep 17 00:00:00 2001 From: Clyne Sullivan Date: Thu, 22 Oct 2015 14:47:59 -0400 Subject: [PATCH] hey --- bin/auto.o | Bin 822 -> 0 bytes bin/init.o | Bin 1352 -> 0 bytes bin/opcontrol.o | Bin 2668 -> 0 bytes bin/output.bin | Bin 18052 -> 0 bytes bin/output.elf | Bin 61952 -> 0 bytes bin/robot.o | Bin 707 -> 0 bytes common.mk | 2 +- include/5106z.h | 121 +++++++++++++++++++++++++++++++++++++++++ include/main.h | 9 +-- src/5106z.c | 105 +++++++++++++++++++++++++++++++++++ src/auto.c | 52 +----------------- src/init.c | 16 ++---- src/opcontrol.c | 142 ++++++++++++++++++++++++++++++------------------ 13 files changed, 328 insertions(+), 119 deletions(-) delete mode 100644 bin/auto.o delete mode 100644 bin/init.o delete mode 100644 bin/opcontrol.o delete mode 100755 bin/output.bin delete mode 100755 bin/output.elf delete mode 100644 bin/robot.o create mode 100644 include/5106z.h create mode 100644 src/5106z.c diff --git a/bin/auto.o b/bin/auto.o deleted file mode 100644 index eaac07352ff26779f3aebc12501fc71347360ec5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 822 zcma)4O;5r=5S^t31TRYbHZj$hSQFU*MGht&un{hB(ZqXOHo~ElwA(~Z`a3-N6ZIG9 zOuK8*6O&Beo0&Jev)g^W9}O5|ppAhIMFjAf7s}lXZKy*P7DE`i?u}(XMrj;~cxk!O zMBIsaFttWADXdPb-Qg{#dEL9Ty1d67=y$N+6P`ZE+ULDs;4ReR> zvVG%#9kL^KVxBSJ$ug9lk0|3Dr2@@DoUH5zi2EedWuLoL&g7f`Ytc9zOjbx3N`=t)qBwvn%^p2 zi;`$P^mfMb53NByK*!k@c^2RqiK7EVJ>NEReFiGOqdyT*rgemR1}eQ_@PSxUZX#|e zzPg@;!5-$d>GgE1aW!wk*SF3S8o$%#S>w+nRA1eZVl%t*Vhx(EFayd(fXu+Zy@{yL R*uZ|EN5um;ml;#f>j#DbMFju= diff --git a/bin/init.o b/bin/init.o deleted file mode 100644 index 46004b7e7539fa90b9374a370c6fd568d7961093..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1352 zcma)6&2G~`5T4B+Nua0=MT8<%4n!hIbd@G02ZRK{f;OTN5?tVd;v}oak`oulkq8%_ zgE!y>I3iwvmw^j6!Z%)TVhjgH8h`W6-|o)Z{_y1VsStvU2x`!V5k1l*e-tG&Xp71u zEUK-3{`y+{EG*zkKdF|9ShiOjus8FpIw*cIed*Y??^}(R{vsHuU}@R@SUpy=(Zo7+ zLuIv^hb`G`AKdHQv5sU%wyE1fsiT~sOQHcYZ~H;0-W~MYR48BQmok;yuDB|$Wvk-4 z*c1D?n}XzgISrj5Fbp(KjD^yW%+pH9^b z_1zbJ>4ah64i}-Cug~@$#tr1~C<}3}p68}86Pq<4=VfD_&ePXHbQ|$vDlZq;Fc`ZD zJH0N~88PeLg`;Gg!0o*5e-SqKV&%GHXtLh}aIQ6C*0teC_N$^F?}hvE3{1aQu(=<{ zSSHZJ$kGpvu{u!9hrcR59w}uIEJ& og4gyJ_`;+0_i=b$w~URK8Szq881dL+yh2n5W_AgGOCXYe19C}r5%rnCf|BT>L18GOI#M z1=-oHozmRy^%pU+eJ7O`TDzwo_U~MqyZ?R-8K3-$nmyaRH396{?w^{wPpi}$%OE4p z3P3R#^Dq|hvGKU?*V@tvucoOxg8MOVHmuBzG^J_hR{Cfmp{3>Y=TJ#%@BP`);pu6~ z(75D(j5B1L=8wWU`8D{pba^vxHETb$rkyg0uH^GiYuR~c%`IAPL(4m+HEvalC9Pmf zOB>7$4C=X|bLU6SXv6x5K15@K{Jw@|EZQWp+)d^kS6b`mW{0S){lM(OSZAV391%z3 z-Qt)yE_xEZg7kW$B8^2x>H1hwJsv7aHw|f!zF4o5?pkFXPQ7Xw?u51MT2{#E)GXJK zj+=L?(sjy({KSKU9C09wSqJn1(u+=|VpVy%v8%JXA*E|Cu1Two4g8;Wg7a_>+Jb!l z{I>@C*MfKp{k-@C@}L1b%`L?(oY#dwV2J>8jL~^71u=liJInopA^$T>ut^UGImp9& zm$`-YB=fJiDN}l5>{F)nUS&sE?=F+K*#|w;rS#Uh z4?UbU*j*-S&A|~vdn-V!59~K~4)|T~sq!|M@fz1u=mc-nkRpu8gFVVk?FIProVSTi zU@8x&_8OsDl4ye+k8r=68{VUX8{RdnhnKvlL^u}eGHY4bpP+kttqAnOQSfjj;QMA| zmf){**b-iCqfM9E9p4e>mEND<=H-9d%n$Db=1WELQ;~e^Y|G-*?#08N#{z;%1S|G3 z`hA~2$y}We#BuK)YUadgg8Nu+tPJAwjMz)Xx!bfj9cuQ`iL;U!@<3-b!f!_SI}v`H zIp(^=t&=PNm{A$@zEFe_{5x*Q$DQls_5O)b8R9=H!U+CLg#RAle?@qb#i5To*vTt* z1SBx%X%Rjc;pEhc{ufp+QlF$glkBQAR;;UzG^FiR$u`%?u2?S{s)?=P~jR9{0zTc`_#@B>JVta9c$}yY$UhL=yBHsCoZogW$a~!X zZnXFC-oVd;a=^5Irhqfxd@=A11+EA9CXnab2>5Lv&-W29Lxg*a`91@35nloMgX_)D z7pn_-{3G(}%m#HbKMOze5g^Yu9^fm1-wd!C_^$`()xqOF0B4;|AoG3oJQ38xb^QY} Ca=!im diff --git a/bin/output.bin b/bin/output.bin deleted file mode 100755 index 3c052d66aae3bda36e7e0aa3b39b846a5fc9939e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18052 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 diff --git a/bin/robot.o b/bin/robot.o deleted file mode 100644 index dce8405287323ce31cc773e6e16c638c822af03f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 707 zcma)2%}&BV5T2z4L@#PI{w1b*u_m$s3LLy)gLKGzHr|YHb8%^33y}G0ro#wXXND*2;Z+TC9O@8cl;-g_(u)ec}?hZ9{r-dM+e(l0D2h|8Y1iqP?EPz7C z;{ci8JwTslqw+gqNKR?2Bj%l`^o#*Dr +#include +#include + +/* + * motor_init - Initialize motors + * + * `count` - The number of motors to enable + * `...` - The port numbers of the motors to enable + * + * Enables motors on the ports specified in the `...` arguments after + * `count`, which should say how many ports are currently being + * initialized. Motors not initialized now will be unusable until they + * are enabled. + * +*/ +void motor_init(uint8_t count,...); +/* + * motor_initIMEs + * + * Sets up IMEs for the motors that have them. This function expects the + * motors passed to it to be in order of how they are plugged in to the + * cortex. There is _no_ error checking, so... yeah. + * +*/ +void motor_initIMEs(uint8_t count,...); +/* + * motor_imeReset + * + * Resets the IME on the motor at port `port` if the motor was init'd + * using motor_initIMEs() and is enabled. + * +*/ +int motor_imeReset(uint8_t port); +/* + * motor_imeRead + * + * Returns the IME reading of the port `port` if it was init'd using + * motor_initIMEs() and is enabled. + * +*/ +int motor_imeRead(uint8_t port); +/* + * motor_enable & motor_disable + * + * `port` - The port of the motor to enable/disable + * + * These calls modify the `enable` bit of the motor. If a motor is disabled + * its speed will be set to 0 and rendered unchangeable until the motor is + * re-enabled. Any motor_* calls made to a disabled motor will immediately + * return -1. + * +*/ +void motor_enable(uint8_t port); +void motor_disable(uint8_t port); +/* + * motor_togglePolarity + * + * `port` - The port to toggle polarity on + * + * Flips the polarity of the motor on port `port` if its enabled. When a + * motor's polarity is enabled the speed written to it is inverted as it + * is passed to motorSet(). For example, if a motor's speed is 127 and it's + * polarity is enabled, the speed passed to motorSet() is -127. + * +*/ +int motor_togglePolarity(uint8_t port); +/* + * motor_setSpeed + * + * `port` - The port to set the speed of + * `speed` - The speed to set the motor to + * + * Sets the motor to the given speed, if it is enabled. Keep in mind that + * the change is not applied immediately, to apply the speeds you must + * call motor_applySpeeds(). + * +*/ +int motor_setSpeed(uint8_t port,int8_t speed); +/* + * motor_setSpeedSum + * + * `port` - The port to set the speed of + * `args` - The number of arguments following this one + * `...` - `args` variables to use for setting the speed + * + * Functions the same as motor_setSpeed(), but sets the speed to the sum + * of the arguments passed after `args`. + * +*/ +int motor_setSpeedSum(uint8_t port,uint8_t args,...); +/* + * TODO + * +*/ +int motor_setSpeedPointer(uint8_t port,int8_t *sp); +/* + * motor_setThreshold + * + * `port` - The port to set the threshold of + * `threshold` - The threshold to give the motor + * + * Sets a threshold for the motor's speed. This means that when calls to + * set this motor's speed are made in the future, the speed will only be + * applied if it's greater than `threshold` or less than -`threshold`. + * Otherwise, the speed is set to 0. + * +*/ +int motor_setThreshold(uint8_t port,uint8_t threshold); +/* + * motor_applySpeeds + * + * Applys the speeds of the enabled motors to the actual motors. + * +*/ +int motor_applySpeeds(void); + +#endif // _5106Z_H_ diff --git a/include/main.h b/include/main.h index f73b7e3..9b87513 100644 --- a/include/main.h +++ b/include/main.h @@ -3,16 +3,17 @@ #include +#define LCD_PORT uart2 + +#define ANALOG_PORT(x) (x+13) + #ifdef __cplusplus extern "C" { #endif -extern Gyro gyro; -extern unsigned int imeCount; - +void autonomous(); void initializeIO(); void initialize(); -void autonomous(); void operatorControl(); #ifdef __cplusplus diff --git a/src/5106z.c b/src/5106z.c new file mode 100644 index 0000000..83462ce --- /dev/null +++ b/src/5106z.c @@ -0,0 +1,105 @@ +#include <5106z.h> +#include + +typedef struct { + int8_t *speedP; + int8_t speed; + uint8_t thresh; + uint8_t polarity :1; + uint8_t enable :1; + uint8_t useptr :1; + uint8_t imeable :3; +} __attribute__ ((packed)) motor_t; + +static motor_t motor[11]; + +void motor_init(uint8_t count,...){ + va_list m; + uint8_t i; + memset(motor,0,11*sizeof(motor_t)); + va_start(m,count); + for(i=0;imotor[port].thresh?speed:0); +} + +int motor_setSpeedSum(uint8_t port,uint8_t args,...){ + va_list s; + uint8_t i; + int8_t speed=0; + if(!motor[port].enable)return -1; + va_start(s,args); + for(i=0;i -#include "main.h" - -/* - * Runs the user autonomous code. This function will be started in its own task with the default - * priority and stack size whenever the robot is enabled via the Field Management System or the - * VEX Competition Switch in the autonomous mode. If the robot is disabled or communications is - * lost, the autonomous task will be stopped by the kernel. Re-enabling the robot will restart - * the task, not re-start it from where it left off. - * - * Code running in the autonomous task cannot access information from the VEX Joystick. However, - * the autonomous function can be invoked from another task if a VEX Competition Switch is not - * available, and it can access joystick information if called in this way. - * - * The autonomous task may exit, unlike operatorControl() which should never exit. If it does - * so, the robot will await a switch to another mode or disable/enable cycle. - */ -void autonomous() { +void autonomous(){ } diff --git a/src/init.c b/src/init.c index f3948f0..24b5b50 100644 --- a/src/init.c +++ b/src/init.c @@ -1,15 +1,11 @@ -#include "main.h" +#include -Gyro gyro; -unsigned int imeCount=0; +unsigned int imeCount; -void initializeIO(void){ - pinMode(1,INPUT_ANALOG); +void initializeIO(){ + pinMode(ANALOG_PORT(1),INPUT_ANALOG); } -void initialize(void){ - lcdInit(uart1); - lcdClear(uart1); - gyro=gyroInit(2,0); - imeCount=imeInitializeAll(); +void initialize(){ + imeCount = imeInitializeAll(); } diff --git a/src/opcontrol.c b/src/opcontrol.c index b2896a2..6a2adee 100644 --- a/src/opcontrol.c +++ b/src/opcontrol.c @@ -1,72 +1,106 @@ -#include "main.h" +#include +#include +#include <5106z.h> -#define NEAR_THRESH 0.05f - -enum MOTOR { +enum MOTOR_PORT_MAP { UNUSED = 0, ROTATER, DRIVEL, DRIVER, LIFT1, LIFT2, - INTAKE, - UNUSED7, - UNUSED8, - UNUSED9, - UNUSED10 + INTAKE1, + INTAKE2, + INTAKE3, + INTAKE4, + PULLER, }; -static unsigned char idx=0; -static float intakeRotation=0; - -int nearDegree(float target){ - if(intakeRotationtarget+NEAR_THRESH)return -1; - else return 0; -} +static int8_t joyx = 0, // Contains the left joystick's x position + joyy = 0, // Contains the left joystick's y position + lift = 0, // Contains the desired speed for the lift + rotate = 0; // Contains the desired speed for the lift's axis -void operatorControlLCD(void *param){ - static int imeValue=0; - static float nearTarget=0; +void shell(void *unused){ + char *input=(char *)malloc(4*sizeof(char)); while(1){ - imeGet(idx,&imeValue); - intakeRotation=imeValue/1037.0f; - lcdPrint(uart1,1,"%u %d",imeCount,nearDegree(nearTarget)); - lcdPrint(uart1,2,"%u %d",idx,imeValue); - if(joystickGetDigital(1,7,JOY_LEFT)){ - if(idx)idx--; - }else if(joystickGetDigital(1,7,JOY_RIGHT)){ - if(idx "); + memset(input,0,4); + //fgets(input,4,stdin); + input[0]=fgetc(stdin); + printf("\n\r"); + switch(input[0]){ + case 'v': + input[2]=fgetc(stdin); + printf("\n\r"); + if(input[2]=='m') + printf("Main voltage: %1.3f V\n\r",powerLevelMain()/1000.0f); + else if(input[2]=='e') + printf("Expander voltage: %1.3f V\n\r",analogRead(1)/70.0f); + break; + case 't': + printf("Test\n\r"); + break; } - if(joystickGetDigital(1,8,JOY_LEFT)){ - nearTarget-=.25; - }else if(joystickGetDigital(1,8,JOY_RIGHT)){ - nearTarget+=.25; - } - delay(300); } } -void operatorControl(void){ - static char liftSpeed=0; - static char intakeSpeed=0; - taskCreate(operatorControlLCD,TASK_DEFAULT_STACK_SIZE,NULL,TASK_PRIORITY_DEFAULT); +void operatorControl(){ + + motor_init(10, // Initialize 6 motor ports + ROTATER, + DRIVEL, + DRIVER, + LIFT1, + LIFT2, + INTAKE1, + INTAKE2, + INTAKE3, + INTAKE4, + PULLER); + + motor_togglePolarity(DRIVER ); // Flip the right drive motors + motor_togglePolarity(ROTATER); // Flip the lift's rotation motor + + + + motor_setSpeedPointer(LIFT1 ,&lift ); // Always set the lift speed with `lift` + motor_setSpeedPointer(LIFT2 ,&lift ); // + motor_setSpeedPointer(ROTATER,&rotate); // Always set the lift's axis speed + // with `rotate` + + extern unsigned int imeCount; + motor_initIMEs(imeCount, + DRIVER, + DRIVEL, + 0, + 0, + ROTATER); + + // Launch the shell + taskCreate(shell,TASK_DEFAULT_STACK_SIZE,NULL,TASK_PRIORITY_DEFAULT); + while(1){ - // Set drive motors - motorSet(DRIVEL, joystickGetAnalog(1,3)); - motorSet(DRIVER,-joystickGetAnalog(1,2)); - liftSpeed=-(joystickGetDigital(1,6,JOY_UP )? 127: - joystickGetDigital(1,6,JOY_DOWN)?-127:0); - motorSet(LIFT1,liftSpeed); - motorSet(LIFT2,liftSpeed); - intakeSpeed=-(joystickGetDigital(1,5,JOY_UP )? 127: - joystickGetDigital(1,5,JOY_DOWN)?-127:0); - motorSet(INTAKE,intakeSpeed); - motorSet(ROTATER,joystickGetAnalog(1,1)); - - // test motor - //motorSet(10,joystickGetDigital(1,7,JOY_UP)?127:0); - - delay(20); + + digitalWrite(1,lcdReadButtons(LCD_PORT)); + + joyx = joystickGetAnalog(1,4); // Get joystick positions + joyy = joystickGetAnalog(1,3); // + lift = joystickGetAnalog(1,2); // + rotate = joystickGetAnalog(1,1); // + + motor_setSpeedSum(DRIVEL,2,joyy, joyx); // Set drive speeds + motor_setSpeedSum(DRIVER,2,joyy,-joyx); // + + static char huh; + huh=joystickGetDigital(1,8,JOY_UP)?127:joystickGetDigital(1,8,JOY_DOWN)?-127:0; + motor_setSpeed(INTAKE1,huh); + motor_setSpeed(INTAKE2,huh); + motor_setSpeed(INTAKE3,huh); + motor_setSpeed(INTAKE4,huh); + + motor_setSpeed(PULLER,joystickGetDigital(1,7,JOY_UP)?127:joystickGetDigital(1,7,JOY_DOWN)?-127:0); + + motor_applySpeeds(); // Apply the motor speeds } } -- 2.39.5