View Single Post
  #8   Spotlight this post!  
Unread 13-02-2006, 19:14
Greg Ross's Avatar
Greg Ross Greg Ross is offline
Grammar Curmudgeon
AKA: gwross
FRC #0330 (Beach 'Bots)
Team Role: Mentor
 
Join Date: Jun 2001
Rookie Year: 1998
Location: Hermosa Beach, CA
Posts: 2,245
Greg Ross has a reputation beyond reputeGreg Ross has a reputation beyond reputeGreg Ross has a reputation beyond reputeGreg Ross has a reputation beyond reputeGreg Ross has a reputation beyond reputeGreg Ross has a reputation beyond reputeGreg Ross has a reputation beyond reputeGreg Ross has a reputation beyond reputeGreg Ross has a reputation beyond reputeGreg Ross has a reputation beyond reputeGreg Ross has a reputation beyond repute
Send a message via AIM to Greg Ross Send a message via Yahoo to Greg Ross
Re: GTS code Problems

Quote:
Originally Posted by caderader
Still no movement or response. Thanks though.
OK. I took another look at the code you posted before. Here it is again, prettified, and with the change I suggested before (It's a lot easier to read code with proper indentation ):
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! */
    }
  }
}
And here's my analysis:
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.
This will initialize the variables at compile time only, rather than on every call. If you make these changes, and still get nothing, I would ask: Are you actually in autonomous mode, and is this routine actually being called?
__________________
Greg Ross (The Grammar Curmudgeon formerly known as gwross)
S/W Engineer, Team 330, the Beach 'Bots
<--The Grammar Curmudgeon loves this cartoon.
“Life should not be a journey to the grave with the intention of arriving safely in a pretty and well preserved body, but rather to skid in broadside in a cloud of smoke, thoroughly used up, totally worn out, and loudly proclaiming "Wow! What a Ride!" Hunter S. Thompson
"Playing a practical joke means doing something mean and calling it funny." Me