|
|
|
![]() |
|
|||||||
|
||||||||
![]() |
|
|
Thread Tools | Rate Thread | Display Modes |
|
|
|
#1
|
||||
|
||||
|
GTS code Problems
I've been working on and revising the geartooth sensor autonoumous code for a few days now but no matter how I change it the code won't work. If anyone just has a quick example of working gear tooth sensor code it would be very helpful.The code that i'm using right now with Kevin's FRC code is right here...
Code:
void User_Autonomous_Code(void)
{
/* Initialize all PWMs and Relays when entering Autonomous mode, or else it
will be stuck with the last values mapped from the joysticks. Remember,
even when Disabled it is reading inputs from the Operator Interface.
*/
pwm01 = pwm02 = pwm03 = pwm04 = pwm05 = pwm06 = pwm07 = pwm08 = 127;
pwm09 = pwm10 = pwm11 = pwm12 = pwm13 = pwm14 = pwm15 = pwm16 = 127;
relay1_fwd = relay1_rev = relay2_fwd = relay2_rev = 0;
relay3_fwd = relay3_rev = relay4_fwd = relay4_rev = 0;
relay5_fwd = relay5_rev = relay6_fwd = relay6_rev = 0;
relay7_fwd = relay7_rev = relay8_fwd = relay8_rev = 0;
i=0;
Cnt_L=0;
Cnt_R=0;
Total_Count=0.0;
Total_Count_R=0.0;
Total_Count_L=0.0;
while (autonomous_mode) /* DO NOT CHANGE! */
{
if (statusflag.NEW_SPI_DATA) /* 26.2ms loop area */
{
Getdata(&rxdata); /* DO NOT DELETE, or you will be stuck here forever! */
pwm01=pwm02=170;
pwm02=255-pwm02 ;
pwm01=170;
pwm02=170;
Cnt_L=Get_Encoder_1_Count();
Cnt_R=Get_Encoder_2_Count();
if(i<5)
{
Total_Count=(Cnt_L+Cnt_R)/2;
if (Total_Count>50)
{
i++;
Total_Count_L+=Cnt_L;
Total_Count_R+=Cnt_R;
Reset_Encoder_1_Count();
Reset_Encoder_2_Count();
Cnt_L=0;
Cnt_R=0;
}
}
if (i=5)
{
i++;
Total_Count_L+=Get_Encoder_1_Count();
Total_Count_R+=Get_Encoder_2_Count();
Reset_Encoder_1_Count();
Reset_Encoder_2_Count();
pwm01=100;
pwm02=160;
}
if (i>=6)
{
i++;
Total_Count_L+=Get_Encoder_1_Count();
Total_Count_R+=Get_Encoder_2_Count();
Reset_Encoder_1_Count();
Reset_Encoder_2_Count();
pwm01=127;
pwm02=127;
/* Add your own autonomous code here. */
Generate_Pwms(pwm13,pwm14,pwm15,pwm16);
Putdata(&txdata); /* DO NOT DELETE, or you will get no PWM outputs! */
}
}
}
}
Cnt_L, and Cnt_R as Long's. and i as an int. Thank You in advance |
|
#2
|
|||||
|
|||||
|
Re: GTS code Problems
Quote:
|
|
#3
|
||||
|
||||
|
Re: GTS code Problems
pretty much right now I'm trying to use a sample code to let the robot run for a certain number of gear counts(the exact number doesn't matter right now) and then after that time change the direction for another number of gear counts and then stop the robot. This should work as far as I can tell with the way I have the code but I can't right now when running the code the robot does NOTHING at all. This is very confusing so any help at all would be appreciated. If i can not make the gts work I'll be forced to use dead reconing...ughhh.
|
|
#4
|
|||||
|
|||||
|
Re: GTS code Problems
I think the main reason it is doing NOTHING is that you have a misplaced closing brace. As your code stands now, your putdata() call is inside the "if (i>=6)" braces. You will need to add a "}" before /* Add your own autonomous code here. */, and get rid of one at the end of the routine.
I haven't digested the whole thing yet, but that might get you started. |
|
#5
|
||||
|
||||
|
Re: GTS code Problems
Thank you very much. I'll try that tommorow when I get time to test on the robot.
|
|
#6
|
||||
|
||||
|
Re: GTS code Problems
Still no movement or response. Thanks though.
|
|
#7
|
|||||
|
|||||
|
Re: GTS code Problems
Quote:
):Code:
float Total_Count, Total_Count_R, Total_Count_L;
long Cnt_L, Cnt_R;
int i;
void User_Autonomous_Code(void)
{
/* Initialize all PWMs and Relays when entering Autonomous mode, or else it
will be stuck with the last values mapped from the joysticks. Remember,
even when Disabled it is reading inputs from the Operator Interface.
*/
pwm01 = pwm02 = pwm03 = pwm04 = pwm05 = pwm06 = pwm07 = pwm08 = 127;
pwm09 = pwm10 = pwm11 = pwm12 = pwm13 = pwm14 = pwm15 = pwm16 = 127;
relay1_fwd = relay1_rev = relay2_fwd = relay2_rev = 0;
relay3_fwd = relay3_rev = relay4_fwd = relay4_rev = 0;
relay5_fwd = relay5_rev = relay6_fwd = relay6_rev = 0;
relay7_fwd = relay7_rev = relay8_fwd = relay8_rev = 0;
i=0;
Cnt_L=0;
Cnt_R=0;
Total_Count=0.0;
Total_Count_R=0.0;
Total_Count_L=0.0;
while (autonomous_mode) /* DO NOT CHANGE! */
{
if (statusflag.NEW_SPI_DATA) /* 26.2ms loop area */
{
Getdata(&rxdata); /* DO NOT DELETE, or you will be stuck here forever! */
pwm01=pwm02=170;
pwm02=255-pwm02 ;
pwm01=170;
pwm02=170;
Cnt_L=Get_Encoder_1_Count();
Cnt_R=Get_Encoder_2_Count();
if(i<5) {
Total_Count=(Cnt_L+Cnt_R)/2;
if (Total_Count>50) {
i++;
Total_Count_L+=Cnt_L;
Total_Count_R+=Cnt_R;
Reset_Encoder_1_Count();
Reset_Encoder_2_Count();
Cnt_L=0;
Cnt_R=0;
}
}
if (i=5) {
i++;
Total_Count_L+=Get_Encoder_1_Count();
Total_Count_R+=Get_Encoder_2_Count();
Reset_Encoder_1_Count();
Reset_Encoder_2_Count();
pwm01=100;
pwm02=160;
}
if (i>=6) {
i++;
Total_Count_L+=Get_Encoder_1_Count();
Total_Count_R+=Get_Encoder_2_Count();
Reset_Encoder_1_Count();
Reset_Encoder_2_Count();
pwm01=127;
pwm02=127;
}
/* Add your own autonomous code here. */
Generate_Pwms(pwm13,pwm14,pwm15,pwm16);
Putdata(&txdata); /* DO NOT DELETE, or you will get no PWM outputs! */
}
}
}
You set "i" to 0 on every call to User_Autonomous_Code, so "i" is guaranteed to always be less than 5. (If it were not for the fact that your putdata() call was within the (i>=6) block, you still should have seen SOME movement, since you set your PWMs outside of the if statements.) I guess you probably want something like: Code:
void User_Autonomous_Code(void)
{
static int i=0;
static float Total_Count_R=0.0;
static float Total_Count_L=0.0;
long Cnt_L=0;
long Cnt_R=0;
float Total_Count=0.0;
/* Initialize all PWMs and Relays when entering Autonomous mode, or else it
will be stuck with the last values mapped from the joysticks. Remember,
even when Disabled it is reading inputs from the Operator Interface.
*/
pwm01 = pwm02 = pwm03 = pwm04 = pwm05 = pwm06 = pwm07 = pwm08 = 127;
pwm09 = pwm10 = pwm11 = pwm12 = pwm13 = pwm14 = pwm15 = pwm16 = 127;
relay1_fwd = relay1_rev = relay2_fwd = relay2_rev = 0;
relay3_fwd = relay3_rev = relay4_fwd = relay4_rev = 0;
relay5_fwd = relay5_rev = relay6_fwd = relay6_rev = 0;
relay7_fwd = relay7_rev = relay8_fwd = relay8_rev = 0;
while (autonomous_mode) /* DO NOT CHANGE! */
{
etc.
|
|
#8
|
|||||
|
|||||
|
Re: GTS code Problems
In order to get into autonomus mode you need to jumper two pins on the OI's competition port. Which pins are specified in the manual.
|
|
#9
|
||||
|
||||
|
Re: GTS code Problems
Quote:
first you set pwm02 to 170, then to 85, then to 170 again... maybe clean that up? |
![]() |
| Thread Tools | |
| Display Modes | Rate This Thread |
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Gyroscope Code | Kevin Watson | Programming | 65 | 01-03-2008 23:46 |
| Gyro Code Problems | railerobotics | Programming | 8 | 27-01-2006 10:45 |
| Code problems | doyler | Programming | 14 | 15-02-2005 16:23 |
| heres the code. y this not working | omega | Programming | 16 | 31-03-2004 15:18 |
| Wierd gyro code problems...pls help | Salik Syed | Programming | 4 | 14-03-2004 01:29 |