Go to Post We are all insane aren't we? I just want to build a robot now. :P - Lowfategg [more]
Home
Go Back   Chief Delphi > Technical > Programming
CD-Media   CD-Spy  
portal register members calendar search Today's Posts Mark Forums Read FAQ rules

 
Closed Thread
Thread Tools Rate Thread Display Modes
  #1   Spotlight this post!  
Unread 24-03-2004, 09:37
CrashZero's Avatar
CrashZero CrashZero is offline
Computer Nerd
#1352 (Huskie Robotics)
Team Role: Programmer
 
Join Date: Mar 2004
Location: Stratford Northwestern
Posts: 44
CrashZero will become famous soon enoughCrashZero will become famous soon enough
Exclamation What is wrong with this code???? It won't Compile and I don't know why? Please Help

/************************************************** *****************************
*
* TITLE: navigate.c
*
* VERSION: 1.0
*
* DATE: 08-Jan-2004
*
* AUTHOR: Richard D. Petras
*
* COMMENTS:
*
************************************************** ******************************
*
* CHANGE LOG:
*
* DATE REV DESCRIPTION
* ----------- --- ----------------------------------------------------------
* 04-Dec-2003 0.2 RDP Added Tracker to drive robot to goal
* 06-Dec-2003 0.3 RDP First implementation of drive algorithm
* 07-Dec-2003 0.4 RDP Got rid of servo glich by NOT disabling interrupts in
* Timer 1 handler
* 08-Jan-2004 1.0 RDP The version used at the 2004 kickoff
*
************************************************** *****************************/

#include "ifi_picdefs.h"
#include "ifi_default.h"
#include "ifi_aliases.h"
#include "ifi_utilities.h"
#include "printf_lib.h"
#include "user_routines.h"
#include "navigate.h"

// Global Variables

int Navigator_State = WAIT_TO_DRIVE;

/************************************************** *****************************
*
* FUNCTION: Navigate()
*
* PURPOSE: Controls the left and right drive motors in order to
* drive to an infrared beacon. This routine depends on two
* beacon trackers to point the the IR beacon. It then uses
* the current servo angles to determine when to turn
* the robot to get to the goal. When the angles are
* sufficiently small, we are at the target and stop.
* The vehicle starts out stopped (WAIT_TO_DRIVE)
* You might want to skip this state in autonomous mode :-)
* When a button is pressed it starts to drive (DRIVE_TO_CENTER).
* This drive is very short(just enough to move away from the
* wall. Next we search until one of the trackers sees the
* beacon (TURN_TO_TARGET). Then we drive toward the target
* (DRIVE_TO_TARGET) until we pass it (PASSED_TARGET). Then
* drive until the trackers are both beyond the goal point
* (AT_TARGET). During all of this we are watching the current
* to see if it exceeds the expected maximum value(OVER_CURRENT).
*
* PARAMETERS: none
*
* RETURNS: nothing
*
* COMMENTS: The values set in navigate.h are very dependent on the
* particular robot configuration and will require some tuning
* for your robot.
*
************************************************** *****************************/

void Navigate()
{

// Note: Statics are used to retain the variable values across
// calls. Otherwise, the values stored inside a function are not
// guarenteed to remain the same.
static unsigned int Old_Clock = 0; // A place to store the last clock value
static unsigned char drive_timer = 0; // Timer for driving forward in 26 msec steps

static unsigned char left_drive_set = LSTOP; // Start out stopped
static unsigned char right_drive_set = RSTOP;
static unsigned char left_servo_set = 127; // Trackers pointed straight ahead
static unsigned char right_servo_set = 127;

int left_error, right_error; // Errors from the tracker goal
int left_state, right_state; // Left and right tracker state
static unsigned int left_current[10] = {0}; // This is a circular buffer for
static unsigned int right_current[10] = {0}; // storing current values. We
// need this because the sensors
// are noisy. We'll take an avg
// of the last ten values.
static int i = 0; // Current buffer counter
unsigned int left_current_avg, right_current_avg;
int n; // Counter
int drive_state = DR_UNDEFINED;
if (Clock > Old_Clock) // stay synchronized to beacon data updates (this is important)
{
left_current[i] = Get_Analog_Value( rc_ana_in01 ); // Get the currents for
right_current[i] = Get_Analog_Value( rc_ana_in02 ); // each wheel. Just comment
// out all the current code
// if not using current sensors

// If we get a high current value, check the last ten to be sure its not just a glitch
if (((left_current[i] > MAX_CURRENT) || (right_current[i] > MAX_CURRENT)) &&
(Navigator_State != WAIT_TO_DRIVE) && (Navigator_State != AT_TARGET))
{
// Maybe this is real, but current sensors can be noisy
// Check the last ten values to see if they agree
left_current_avg = 0;
right_current_avg = 0;
for (n = 0; n < 10; n++)
{
left_current_avg += left_current[n];
right_current_avg += right_current[n];
}
left_current_avg /= 10;
right_current_avg /= 10;
if ((left_current_avg > MAX_CURRENT) || (right_current_avg > MAX_CURRENT))
{
Navigator_State = OVER_CURRENT;
printf("Left_current = %d Right_current = %d\n", left_current_avg, right_current_avg);
printf("OVER_CURRENT\n"); // Over current
drive_timer = 0;
}
}
if (i++ >= 10) i=0; // Reset our circular buffer counter if needed

// This is the main Navigator state machine implemented as a switch statement
switch (Navigator_State)
{
// Just wait until a button is pressed before we start (skip for autonomous mode)
// case WAIT_TO_DRIVE:
{
// Don't go anywhere
left_drive_set = LSTOP;
right_drive_set = RSTOP;
// Eyes forward
left_servo_set = 127;
right_servo_set = 127;
if (p1_sw_trig)
{
Navigator_State = DRIVE_TO_CENTER;
printf("DRIVE_TO_CENTER\n"); // Driving to center
left_servo_set = 127;
right_servo_set = 127;
}
break;
}
case DRIVE_TO_CENTER:
{
// Drive away from the wall.
left_drive_set = FFWD;
right_drive_set = FFWD;
if (drive_timer++ > DRIVE_TO_CENTER_TIME)
{
Navigator_State = TURN_TO_TARGET;
printf("TURN_TO_TARGET\n"); // Done driving to center
left_servo_set = 127;
right_servo_set = 127;
}
break;
}
case OVER_CURRENT:
{
// If we get here let's back off a little and start over
// Note: we could do better here if we remembered that we
// passed the target. (Exercise left to the student :-))
left_drive_set = LSTOP;
right_drive_set = RSTOP;
if (drive_timer++ > DRIVE_TO_CENTER_TIME)
{
Navigator_State = TURN_TO_TARGET;
printf("TURN_TO_TARGET\n"); // Done driving to center
left_servo_set = 127;
right_servo_set = 127;
}
break;
}
case TURN_TO_TARGET:
{
// Point trackers straight ahead, then turn
// until at least one tracker sees the beacon
left_servo_set = 127;
right_servo_set = 127;
left_drive_set = SBWD;
right_drive_set = SFWD;
if (((LL) && (LR)) || ((RL) && (RR)))
{
Navigator_State = DRIVE_TO_TARGET; // At least one sensor sees the target
printf("DRIVE_TO_TARGET\n");
}
break;
}
case DRIVE_TO_TARGET:
case PASSED_TARGET:
{
// As long as we are locked on to the beacons with both targets
// drive toward them
Track_Beacon(LEFT); // allow the left beacon tracker state machine to run
Track_Beacon(RIGHT); // allow the right beacon tracker state machine to run

// update the servo PWM values with the values calculated by Track_Beacon() above
left_servo_set = Tracker_Data[left].Position;
right_servo_set = Tracker_Data[right].Position;

if ((Tracker_Data[left].Status == BOTH_IN_VIEW) &&
(Tracker_Data[right].Status == BOTH_IN_VIEW))
{
// We are locked on with both targets, so drive!

// Find out which way the servoes are pointed
if (left_servo_set < 127) // Left servo pointed left
{
left_state = DR_LEFT;
}
else if (left_servo_set > LEFT_GOAL) // Left servo pointed right
{
left_state = DR_RIGHT;
}
else
{
left_state = DR_CENTER;
}

if (right_servo_set > 127) // Right servo pointed right
{
right_state = DR_RIGHT;
}
else if (right_servo_set < RIGHT_GOAL) // Right servo pointed left
{
right_state = DR_LEFT;
}
else
{
right_state = DR_CENTER;
}

// Now find out the drive state
if (left_state == DR_LEFT && right_state == DR_LEFT)
drive_state = DR_BOTH_LEFT;
else if (left_state == DR_RIGHT && right_state == DR_RIGHT)
drive_state = DR_BOTH_RIGHT;
else if (left_state == DR_RIGHT && right_state == DR_LEFT)
drive_state = DR_BOTH_CENTER; // At goal
else if (left_state == DR_CENTER && right_state == DR_CENTER)
drive_state = DR_BOTH_STRAIGHT;
else if (left_state == DR_CENTER)
drive_state = DR_LEFT_STRAIGHT;
else if (right_state == DR_CENTER)
drive_state = DR_RIGHT_STRAIGHT;
else
drive_state = DR_REFLECTION; // Impossible angle, but could happen


drive_timer = 0; // As long as we see the target keep driving

// Drive logic starts here
switch (drive_state)
{
case DR_UNDEFINED:
{
// We should not be able to get here
printf("DR_UNDEFINED\n");
break;
}
case DR_BOTH_LEFT:
{
// Go straight until we pass the target
if (Navigator_State == DRIVE_TO_TARGET)
{
// Don't turn left
left_drive_set = SFWD;
right_drive_set = SFWD;
}
else
{
// We are in PASSED_TARGET state
// Turn left
left_drive_set = SBWD;
right_drive_set = SFWD;
}
if (left_servo_set < LEFT_PASS)
{
Navigator_State = PASSED_TARGET;
printf("PASSED_TARGET\n");
}
break;
}
case DR_BOTH_RIGHT:
{
// Go straight until we pass the target
if (Navigator_State == DRIVE_TO_TARGET)
{
// Don't turn right
left_drive_set = SFWD;
right_drive_set = SFWD;
}
else
{
// We are in PASSED_TARGET state
// Turn right
left_drive_set = SFWD;
right_drive_set = SBWD;
}
if (right_servo_set > RIGHT_PASS)
{
Navigator_State = PASSED_TARGET;
printf("PASSED_TARGET\n");
}
break;
}


// The beacon is ahead in all these cases so just drive
case DR_BOTH_STRAIGHT:
case DR_LEFT_STRAIGHT:
case DR_RIGHT_STRAIGHT:
// Note: we don't know what to do here but we might as well keep
// going.
case DR_REFLECTION:
{
// Find the error from ideal on each side
left_error = (int)LEFT_GOAL - (int)Tracker_Data[left].Position;
right_error = (int)Tracker_Data[right].Position - (int)RIGHT_GOAL;

// Scale the error
left_error *= DRIVE_GAIN;
right_error *= DRIVE_GAIN;

// Use these if you want fractional gain values
// Be sure to comment out the above gain lines
// left_error /= DRIVE_GAIN;
// right_error /= DRIVE_GAIN;

// Make sure the errors are in range
if (left_error > (255 - SFWD)) left_error = 255 - SFWD;
if (right_error > (255 - SFWD)) right_error = 255 - SFWD;
if (left_error < -SFWD) left_error = -SFWD;
if (right_error < -SFWD) right_error = -SFWD;

// If we are pointed left, drive the right drive faster and vice versa
// Use the next two lines to turn toward the goal
// left_drive_set = SFWD + right_error;
// right_drive_set = SFWD + left_error;
// These two lines keep driving straight
left_drive_set = SFWD;
right_drive_set = SFWD;

// printf("Lerr = %d Rerr = %d\n",left_error,right_error);
// End of drive logic
break;
}
case DR_BOTH_CENTER:
{
Navigator_State = AT_TARGET; // Both servos are within the target threshold
printf("AT_TARGET\n");
break;
}
}
}
else
{
// We are not locked on - Stop
// give the trackers a chance to catch up
left_drive_set = LSTOP;
right_drive_set = RSTOP;
drive_timer++ ;
if (drive_timer > LOST_TARGET_TIMEOUT)
{
Navigator_State = TURN_TO_TARGET;
printf("TURN_TO_TARGET\n"); // Done driving to center
left_servo_set = 127;
right_servo_set = 127;
}
}
break;
}
case AT_TARGET:
{
// We are at the goal - Stop driving
left_drive_set = LSTOP;
right_drive_set = RSTOP;
break;
}
default:
{
left_drive_set = LSTOP;
right_drive_set = RSTOP;
printf("Not a valid state\n");
break;
}
}

// Send all the control values to the pwm controller

//printf("Left = %d Right = %d\n", (int)left_drive_set, (int)right_drive_set);

left_servo = left_servo_set;
right_servo = right_servo_set;
left_drive = left_drive_set;
right_drive = right_drive_set;
// left_drive = 255 - left_drive_set; // This drive is reversed
// right_drive = 255 - right_drive_set; // This drive is reversed

Old_Clock = Clock; // take a snapshot of the clock
}

}



//PLEASE HELP ME IF YOU CAN!!!!!!
__________________
This is our world now... the world of the electron and the switch, the beauty of the baud. We make use of a service already existing without paying for what could be dirt-cheap if it wasn't run by profiteering gluttons, and you call us criminals. We explore... and you call us criminals. We seek after knowledge... and you call us criminals. We exist without skin color, without nationality, without religious bias... and you call us criminals. You build atomic bombs, you wage wars, you murder, cheat, and lie to us and try to make us believe it's for our own good, yet we're the criminals. Yes, I am a criminal. My crime is that of curiosity. My crime is that of judging people by what they say and think, not what they look like. My crime is that of outsmarting you, something that you will never forgive me for. I am a hacker, and this is my manifesto. You may stop me, but you can't stop us all...

quote from:

+++ The Mentor +++
  #2   Spotlight this post!  
Unread 24-03-2004, 09:40
Dave Flowerday Dave Flowerday is offline
Software Engineer
VRC #0111 (Wildstang)
Team Role: Engineer
 
Join Date: Feb 2002
Rookie Year: 1995
Location: North Barrington, IL
Posts: 1,366
Dave Flowerday has a reputation beyond reputeDave Flowerday has a reputation beyond reputeDave Flowerday has a reputation beyond reputeDave Flowerday has a reputation beyond reputeDave Flowerday has a reputation beyond reputeDave Flowerday has a reputation beyond reputeDave Flowerday has a reputation beyond reputeDave Flowerday has a reputation beyond reputeDave Flowerday has a reputation beyond reputeDave Flowerday has a reputation beyond reputeDave Flowerday has a reputation beyond repute
Re: What is wrong with this code???? It won't Compile and I don't know why? Please He

Post the output of the compiler where it gives the error - right now we don't even know which lines to be looking at!
  #3   Spotlight this post!  
Unread 24-03-2004, 09:43
CrashZero's Avatar
CrashZero CrashZero is offline
Computer Nerd
#1352 (Huskie Robotics)
Team Role: Programmer
 
Join Date: Mar 2004
Location: Stratford Northwestern
Posts: 44
CrashZero will become famous soon enoughCrashZero will become famous soon enough
Exclamation Re: What is wrong with this code???? It won't Compile and I don't know why? Please Help

Sorry.. here it is:

Deleting intermediary files... done.
Executing: "C:\mcc18\bin\mcc18.exe" -p=18F8520 "ifi_startup.c" -fo="ifi_startup.o" /i"C:\MCC18\h" -D_FRC_BOARD -O-
Executing: "C:\mcc18\bin\mcc18.exe" -p=18F8520 "ifi_utilities.c" -fo="ifi_utilities.o" /i"C:\MCC18\h" -D_FRC_BOARD -O-
Executing: "C:\mcc18\bin\mcc18.exe" -p=18F8520 "main.c" -fo="main.o" /i"C:\MCC18\h" -D_FRC_BOARD -O-
Executing: "C:\mcc18\bin\mcc18.exe" -p=18F8520 "navigate.c" -fo="navigate.o" /i"C:\MCC18\h" -D_FRC_BOARD -O-
H:\Working on it\Robot\navigate\navigate.c:367:Error [1105] symbol
Halting build on first failure as requested.
BUILD FAILED: Wed Mar 24 09:46:42 2004


//Hope that will allow u to help me!
__________________
This is our world now... the world of the electron and the switch, the beauty of the baud. We make use of a service already existing without paying for what could be dirt-cheap if it wasn't run by profiteering gluttons, and you call us criminals. We explore... and you call us criminals. We seek after knowledge... and you call us criminals. We exist without skin color, without nationality, without religious bias... and you call us criminals. You build atomic bombs, you wage wars, you murder, cheat, and lie to us and try to make us believe it's for our own good, yet we're the criminals. Yes, I am a criminal. My crime is that of curiosity. My crime is that of judging people by what they say and think, not what they look like. My crime is that of outsmarting you, something that you will never forgive me for. I am a hacker, and this is my manifesto. You may stop me, but you can't stop us all...

quote from:

+++ The Mentor +++
  #4   Spotlight this post!  
Unread 24-03-2004, 10:09
Dave Flowerday Dave Flowerday is offline
Software Engineer
VRC #0111 (Wildstang)
Team Role: Engineer
 
Join Date: Feb 2002
Rookie Year: 1995
Location: North Barrington, IL
Posts: 1,366
Dave Flowerday has a reputation beyond reputeDave Flowerday has a reputation beyond reputeDave Flowerday has a reputation beyond reputeDave Flowerday has a reputation beyond reputeDave Flowerday has a reputation beyond reputeDave Flowerday has a reputation beyond reputeDave Flowerday has a reputation beyond reputeDave Flowerday has a reputation beyond reputeDave Flowerday has a reputation beyond reputeDave Flowerday has a reputation beyond reputeDave Flowerday has a reputation beyond repute
Re: What is wrong with this code???? It won't Compile and I don't know why? Please He

Here's what I found in the users guide:
Quote:
1105: symbol ‘%s’ has not been defined
A symbol has been referenced before it has been defined. Common causes
include a misspelled symbol name, a missing header file that declares the
symbol, and a reference to a symbol valid only in an inner scope.
On the error line when you compile, is there something after the word 'symbol'? (i.e. did it not get pasted to CD right, or does it just not show up?)

I pasted your code into an editor and it looks like line 367 is "if (drive_timer > LOST_TARGET_TIMEOUT)", is that correct? If so, can you show us the section from the header file that defines "LOST_TARGET_TIMEOUT"?
  #5   Spotlight this post!  
Unread 24-03-2004, 10:14
CrashZero's Avatar
CrashZero CrashZero is offline
Computer Nerd
#1352 (Huskie Robotics)
Team Role: Programmer
 
Join Date: Mar 2004
Location: Stratford Northwestern
Posts: 44
CrashZero will become famous soon enoughCrashZero will become famous soon enough
Question Re: What is wrong with this code???? It won't Compile and I don't know why? Please Help

That was all there was in the compile box and I posted the whole .c file; is there a different file that you want to see???
__________________
This is our world now... the world of the electron and the switch, the beauty of the baud. We make use of a service already existing without paying for what could be dirt-cheap if it wasn't run by profiteering gluttons, and you call us criminals. We explore... and you call us criminals. We seek after knowledge... and you call us criminals. We exist without skin color, without nationality, without religious bias... and you call us criminals. You build atomic bombs, you wage wars, you murder, cheat, and lie to us and try to make us believe it's for our own good, yet we're the criminals. Yes, I am a criminal. My crime is that of curiosity. My crime is that of judging people by what they say and think, not what they look like. My crime is that of outsmarting you, something that you will never forgive me for. I am a hacker, and this is my manifesto. You may stop me, but you can't stop us all...

quote from:

+++ The Mentor +++
  #6   Spotlight this post!  
Unread 24-03-2004, 10:45
Astronouth7303's Avatar
Astronouth7303 Astronouth7303 is offline
Why did I come back?
AKA: Jamie Bliss
FRC #4967 (That ONE Team)
Team Role: Mentor
 
Join Date: Jan 2004
Rookie Year: 2004
Location: Grand Rapids, MI
Posts: 2,071
Astronouth7303 has much to be proud ofAstronouth7303 has much to be proud ofAstronouth7303 has much to be proud ofAstronouth7303 has much to be proud ofAstronouth7303 has much to be proud ofAstronouth7303 has much to be proud ofAstronouth7303 has much to be proud ofAstronouth7303 has much to be proud ofAstronouth7303 has much to be proud ofAstronouth7303 has much to be proud of
Re: What is wrong with this code???? It won't Compile and I don't know why? Please Help

Quote:
Originally Posted by CrashZero
That was all there was in the compile box and I posted the whole .c file; is there a different file that you want to see???
1- use the [code] tag.
2- Is this a file you wrote/modified?
3- Is there a Navigate.h? that might be what he is talking about.
4- Did you write this code?
  #7   Spotlight this post!  
Unread 24-03-2004, 10:48
EricS-Team180's Avatar
EricS-Team180 EricS-Team180 is offline
SPAM, the lunchmeat of superheroes!
AKA: Eric Schreffler
FRC #0180 (SPAM)
Team Role: Engineer
 
Join Date: Apr 2002
Rookie Year: 2001
Location: Stuart, Florida
Posts: 561
EricS-Team180 has a reputation beyond reputeEricS-Team180 has a reputation beyond reputeEricS-Team180 has a reputation beyond reputeEricS-Team180 has a reputation beyond reputeEricS-Team180 has a reputation beyond reputeEricS-Team180 has a reputation beyond reputeEricS-Team180 has a reputation beyond reputeEricS-Team180 has a reputation beyond reputeEricS-Team180 has a reputation beyond reputeEricS-Team180 has a reputation beyond reputeEricS-Team180 has a reputation beyond repute
Re: What is wrong with this code???? It won't Compile and I don't know why? Please Help

Hi,

He'd like you to post your Navigate.h header file, to look at how LOST_TARGET_TIMEOUT is defined...if that is where it is defined.

You could also do a search, through the folder that you have your code in, to see if it turns up anywhere. If not, then the you've found your error

Eric Schreffler
__________________

Don't PANIC!
S. P. A. M.
  #8   Spotlight this post!  
Unread 24-03-2004, 10:52
Astronouth7303's Avatar
Astronouth7303 Astronouth7303 is offline
Why did I come back?
AKA: Jamie Bliss
FRC #4967 (That ONE Team)
Team Role: Mentor
 
Join Date: Jan 2004
Rookie Year: 2004
Location: Grand Rapids, MI
Posts: 2,071
Astronouth7303 has much to be proud ofAstronouth7303 has much to be proud ofAstronouth7303 has much to be proud ofAstronouth7303 has much to be proud ofAstronouth7303 has much to be proud ofAstronouth7303 has much to be proud ofAstronouth7303 has much to be proud ofAstronouth7303 has much to be proud ofAstronouth7303 has much to be proud ofAstronouth7303 has much to be proud of
Re: What is wrong with this code???? It won't Compile and I don't know why? Please Help

Or, in MPLAB, Project>Find in Project files... and type in "LOST_TARGET_TIMEOUT" (w/o quotes). in the Output window, see where it comes up.
  #9   Spotlight this post!  
Unread 24-03-2004, 10:54
Alan Anderson's Avatar
Alan Anderson Alan Anderson is offline
Software Architect
FRC #0045 (TechnoKats)
Team Role: Mentor
 
Join Date: Feb 2004
Rookie Year: 2004
Location: Kokomo, Indiana
Posts: 9,113
Alan Anderson has a reputation beyond reputeAlan Anderson has a reputation beyond reputeAlan Anderson has a reputation beyond reputeAlan Anderson has a reputation beyond reputeAlan Anderson has a reputation beyond reputeAlan Anderson has a reputation beyond reputeAlan Anderson has a reputation beyond reputeAlan Anderson has a reputation beyond reputeAlan Anderson has a reputation beyond reputeAlan Anderson has a reputation beyond reputeAlan Anderson has a reputation beyond repute
Re: What is wrong with this code???? It won't Compile and I don't know why? Please Help

Dave's right, the compiler is complaining about line 367:
Code:
if (drive_timer > LOST_TARGET_TIMEOUT)
But the compiler output appears to be truncated. It's supposed to tell you what name it doesn't recognize. There might be an invisible character in the source file on that line, which the compiler would choke on and be unable to display. The easiest thing to do at this point would be to duplicate the line, character by character, without doing a copy/paste, then delete the original line and try compiling again.

If that doesn't help, then show us the section of the header file where LOST_TARGET_TIMEOUT is defined (probably in navigate.h).

(Oh, and next time you need to post programs here, surround it with [CODE] and [/CODE] so the formatting is preserved.)
  #10   Spotlight this post!  
Unread 24-03-2004, 12:11
Biff Biff is offline
Registered User
AKA: Tom Cooper
#1227 (Techno Gremlins)
Team Role: Mentor
 
Join Date: Jan 2004
Location: Grand Rapids MI
Posts: 214
Biff is a jewel in the roughBiff is a jewel in the roughBiff is a jewel in the roughBiff is a jewel in the rough
Re: What is wrong with this code???? It won't Compile and I don't know why? Please He

Quote:
Originally Posted by Alan Anderson
Dave's right, the compiler is complaining about line 367:
Code:
if (drive_timer > LOST_TARGET_TIMEOUT)
But the compiler output appears to be truncated. It's supposed to tell you what name it doesn't recognize. There might be an invisible character in the source file on that line, which the compiler would choke on and be unable to display. The easiest thing to do at this point would be to duplicate the line, character by character, without doing a copy/paste, then delete the original line and try compiling again.

If that doesn't help, then show us the section of the header file where LOST_TARGET_TIMEOUT is defined (probably in navigate.h).

(Oh, and next time you need to post programs here, surround it with [CODE] and [/CODE] so the formatting is preserved.)
This C stuff is new to me, but the { }'s around line 367 I can't figure out if they all make sense, I think you may have some that are unmatched. Hope this helps
  #11   Spotlight this post!  
Unread 24-03-2004, 12:30
Alan Anderson's Avatar
Alan Anderson Alan Anderson is offline
Software Architect
FRC #0045 (TechnoKats)
Team Role: Mentor
 
Join Date: Feb 2004
Rookie Year: 2004
Location: Kokomo, Indiana
Posts: 9,113
Alan Anderson has a reputation beyond reputeAlan Anderson has a reputation beyond reputeAlan Anderson has a reputation beyond reputeAlan Anderson has a reputation beyond reputeAlan Anderson has a reputation beyond reputeAlan Anderson has a reputation beyond reputeAlan Anderson has a reputation beyond reputeAlan Anderson has a reputation beyond reputeAlan Anderson has a reputation beyond reputeAlan Anderson has a reputation beyond reputeAlan Anderson has a reputation beyond repute
Re: What is wrong with this code???? It won't Compile and I don't know why? Please He

Quote:
Originally Posted by Biff
This C stuff is new to me, but the { }'s around line 367 I can't figure out if they all make sense, I think you may have some that are unmatched. Hope this helps
Oh, my. There's certainly something odd going on:
Code:
case DR_BOTH_CENTER:
{
    Navigator_State = AT_TARGET; // Both servos are within the target threshold
    printf("AT_TARGET\n");
    break;
}
}
}
    else
    {
        // We are not locked on - Stop
        // give the trackers a chance to catch up
        left_drive_set = LSTOP;
        right_drive_set = RSTOP;
        drive_timer++ ;
        if (drive_timer > LOST_TARGET_TIMEOUT) 
        {
            Navigator_State = TURN_TO_TARGET;
            printf("TURN_TO_TARGET\n"); // Done driving to center
            left_servo_set = 127;
            right_servo_set = 127;
        }
    }
    break;
}
There are three }s in a row right before a naked else statement. This source code is apparently missing a few lines, including an if.

There is also a case statement commented out near the top of the big switch. That can't be doing what you want, can it? If you want to "skip" that state, as the comments suggest, I think you need to initialize your state variable to DRIVE_TO_CENTER instead of WAIT_TO_DRIVE in line 37.
  #12   Spotlight this post!  
Unread 24-03-2004, 12:36
Dave Scheck's Avatar
Dave Scheck Dave Scheck is offline
Registered User
FRC #0111 (WildStang)
Team Role: Engineer
 
Join Date: Feb 2003
Rookie Year: 2002
Location: Arlington Heights, IL
Posts: 574
Dave Scheck has a reputation beyond reputeDave Scheck has a reputation beyond reputeDave Scheck has a reputation beyond reputeDave Scheck has a reputation beyond reputeDave Scheck has a reputation beyond reputeDave Scheck has a reputation beyond reputeDave Scheck has a reputation beyond reputeDave Scheck has a reputation beyond reputeDave Scheck has a reputation beyond reputeDave Scheck has a reputation beyond reputeDave Scheck has a reputation beyond repute
Re: What is wrong with this code???? It won't Compile and I don't know why? Please He

Quote:
Originally Posted by Alan Anderson
here are three }s in a row right
Looks weird, but I think they match up.
357 matches to 353 (case DR_BOTH_CENTER)
358 matches to 258(switch drive_state)
359 matches to 207(if Tracker_Data...)

I think that you're onto something with that commented case at line 131. That's definately not right

Last edited by Dave Scheck : 24-03-2004 at 12:40.
  #13   Spotlight this post!  
Unread 24-03-2004, 12:39
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: What is wrong with this code???? It won't Compile and I don't know why? Please He

Quote:
Originally Posted by Biff
This C stuff is new to me, but the { }'s around line 367 I can't figure out if they all make sense, I think you may have some that are unmatched. Hope this helps
I used a Diff program to compare the code posted with my navigate.c, and there is no differences in the vicinity of the error line which should cause an error. (If there were any unprintable characters, the diff program should have told me.)

Is LOST_TARGET_TIMEOUT defined in your navigate.h? (It is in mine. It's at line 147: #define LOST_TARGET_TIMEOUT 100)
__________________
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
  #14   Spotlight this post!  
Unread 24-03-2004, 12:51
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: What is wrong with this code???? It won't Compile and I don't know why? Please He

Quote:
Originally Posted by Alan Anderson
Oh, my. There's certainly something odd going on:
Code:
case DR_BOTH_CENTER:
{
    Navigator_State = AT_TARGET; // Both servos are within the target threshold
    printf("AT_TARGET\n");
    break;
}
}
}
    else
    {
        // We are not locked on - Stop
        // give the trackers a chance to catch up
        left_drive_set = LSTOP;
        right_drive_set = RSTOP;
        drive_timer++ ;
        if (drive_timer > LOST_TARGET_TIMEOUT) 
        {
            Navigator_State = TURN_TO_TARGET;
            printf("TURN_TO_TARGET\n"); // Done driving to center
            left_servo_set = 127;
            right_servo_set = 127;
        }
    }
    break;
}
There are three }s in a row right before a naked else statement. This source code is apparently missing a few lines, including an if.

There is also a case statement commented out near the top of the big switch. That can't be doing what you want, can it? If you want to "skip" that state, as the comments suggest, I think you need to initialize your state variable to DRIVE_TO_CENTER instead of WAIT_TO_DRIVE in line 37.
I believe the three braces are OK. If you move your cursor in turn to each of those braces and type Ctrl-M, the editor will take you to their matching opening braces. They look fine to me.

As to the commented out case label, THAT does look strange, but I highly doubt that would cause the compile error in question. I don't know what the compiler will do with a chunk of code inside a switch statement without a case label. My guess is that it will simply be unreachable.
__________________
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
  #15   Spotlight this post!  
Unread 24-03-2004, 13:03
Joe Ross's Avatar Unsung FIRST Hero
Joe Ross Joe Ross is offline
Registered User
FRC #0330 (Beachbots)
Team Role: Engineer
 
Join Date: Jun 2001
Rookie Year: 1997
Location: Los Angeles, CA
Posts: 8,576
Joe Ross has a reputation beyond reputeJoe Ross has a reputation beyond reputeJoe Ross has a reputation beyond reputeJoe Ross has a reputation beyond reputeJoe Ross has a reputation beyond reputeJoe Ross has a reputation beyond reputeJoe Ross has a reputation beyond reputeJoe Ross has a reputation beyond reputeJoe Ross has a reputation beyond reputeJoe Ross has a reputation beyond reputeJoe Ross has a reputation beyond repute
Re: What is wrong with this code???? It won't Compile and I don't know why? Please He

Quote:
Originally Posted by gwross
I believe the three braces are OK. If you move your cursor in turn to each of those braces and type Ctrl-M, the editor will take you to their matching opening braces. They look fine to me.

As to the commented out case label, THAT does look strange, but I highly doubt that would cause the compile error in question. I don't know what the compiler will do with a chunk of code inside a switch statement without a case label. My guess is that it will simply be unreachable.
When compiling with GCC, and an unmodified navigate.h, I only get one warning "warning: unreachable code at beginning of switch statement" So, the braces do all line up, and that commented out case caused a warning. It's possible that the problem is with that, and CrashZero should comment out that whole block. However, I would think that it's more likely that something was modified in navigate.h
Closed Thread


Thread Tools
Display Modes Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
What is your most prefered programming language? Hailfire Programming 156 19-01-2005 21:42
Printf warning during compile? actorindp Programming 4 20-02-2004 17:02
How to measure execution time? And code size? gnormhurst Programming 17 17-02-2004 08:06
Can't Compile the Default Code pressurex1 Programming 4 25-01-2004 20:26
Problem with FRC Default code AsimC Programming 2 11-01-2004 19:22


All times are GMT -5. The time now is 20:41.

The Chief Delphi Forums are sponsored by Innovation First International, Inc.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Copyright © Chief Delphi