GIDForums  

Go Back   GIDForums > Computer Programming Forums > C++ Forum
User Name
Password
Register FAQ Members List Calendar Search Today's Posts Mark Forums Read

 
 
Thread Tools Search this Thread Rate Thread
  #1  
Old 24-Jan-2010, 14:23
Punkhead Punkhead is offline
New Member
 
Join Date: Jan 2010
Posts: 1
Punkhead is on a distinguished road
Question

Expected unqualified-id before <function, token, etc.>


I'm working on an autonomous robot that uses an Arduino microcontroller, and I need help with the code for it. I think that this forum can help, since the Arduino code is written in C++.

I actually found a code similar to what I needed, only it used both an IR sensor with a Ping))) Ultrasonic Rangefinder. I needed a code that only used the Ping))) instead of the IR sensor(s).

I had already tried to modify the code myself, but I kept on receiving errors such as "expected unqualified-id before <function, token, etc.>" when I tried to compile it.

This is my first time using C++, and I honestly have no idea whatsoever as to what I'm doing. Both of the codes are below. It may be easier to modify the code yourself, or simply fix mine. Either way, I need help, and I would greatly appreciate any that this forum has to offer. Thanks.

Original Code

CPP / C++ / C Code:
    int micVal;
    int cdsVal;
    int irLval;  // Left IR
    int irCval;  // Center IR
    int irRval;  // Right IR

    int i;   // Generic Counter
    int x;  // Generic Counter
    int PLval;  // Pulse Width for Left Servo
    int PRval;  // Pulse Width for Right Servo
    int cntr;  // Generic Counter Used for Determining amt. of Object Detections
    int counter; // Generic Counter
    int clrpth;  // amt. of Milliseconds Of Unobstructed Path
    int objdet;  // Time an Object was Detected
    int task;  // Routine to Follow for Clearest Path
    int pwm;  // Pulse Width for Pan Servo
    boolean add;  // Whether to Increment or Decrement PW Value for Pan Servo
    int distance;  // Distance to Object Detected via Ultrasonic Ranger
    int oldDistance;  // Previous Distance Value Read from Ultrasonic Ranger

    float scale = 1.9866666666666666666666666666667;  // *Not Currently Used*

    int LeftPin = 6;  // Left Servo
    int RightPin = 9;  // Right Servo
    int PiezoPin = 11;  // Piezo
    int PingServoPin = 5;  // Pan Servo
    int irLPin = 0;            // Analog 0; Left IR
    int irCPin = 1;            // Analog 1; Center IR
    int irRPin = 2;            // Analog 2; Right IR

    int ultraSoundSignal = 7; // Ultrasound signal pin
    int val = 0;              // Used for Ultrasonic Ranger
    int ultrasoundValue = 0;  // Raw Distance Val
    int oldUltrasoundValue;  // *Not used*
    int pulseCount;        // Generic Counter
    int timecount = 0; // Echo counter
    int ledPin = 13; // LED connected to digital pin 13

    #define BAUD 9600
    #define CmConstant 1/29.034

    void setup() {
      Serial.begin(9600);
      pinMode(PiezoPin, OUTPUT);
      pinMode(ledPin, OUTPUT);
      pinMode(LeftPin, OUTPUT);
      pinMode(RightPin, OUTPUT);
      pinMode(PingServoPin, OUTPUT);
      pinMode(irLPin, INPUT);
      pinMode(irCPin, INPUT);
      pinMode(irRPin, INPUT);
      for(i = 0; i < 500; i++) {
        digitalWrite(PiezoPin, HIGH);
        delayMicroseconds(1000);
        digitalWrite(PiezoPin, LOW);
        delayMicroseconds(1000);
      }
      for(i = 0; i < 20; i++) {
      digitalWrite(PingServoPin, HIGH);
      delayMicroseconds(655 * 2);
      digitalWrite(PingServoPin, LOW);
      delay(20);
      }
      ultrasoundValue = 600;
      i = 0;
    }

    void loop()
    {
      //Scan();
      Look();
      Go();
    }
    void Look() {
      irLval = analogRead(irLPin);
      irCval = analogRead(irCPin);
      irRval = analogRead(irRPin);
      //if(counter > 10) {
        //counter = 0;
        //readPing();
      //}
      if(irLval > 200) {
        PLval = 820;
        PRval = 850;
        x = 5;
        cntr = cntr + 1;
        clrpth = 0;
        objdet = millis();
      }
      else if(irCval > 200) {
        PLval = 820;
        PRval = 850;
        x = 10;
        cntr = cntr + 1;
        clrpth = 0;
        objdet = millis();
      }
      else if(irRval > 200) {
        PLval = 620;
        PRval = 650;
        x = 5;
        cntr = cntr + 1;
        clrpth = 0;
        objdet = millis();
      }
      else {
        x = 1;
        PLval = 620;
        PRval = 850;
        counter = counter + 1;
        clrpth = (millis() - objdet);
        if(add == true) {
          pwm = pwm + 50;
        }
        else if(add == false) {
          pwm = pwm - 50;
        }
        if(pwm < 400) {
          pwm = 400;
          add = true;
        }
        if(pwm > 950) {
          pwm = 950;
          add = false;
        }
        digitalWrite(PingServoPin, HIGH);
        delayMicroseconds(pwm * 2);
        digitalWrite(PingServoPin, LOW);
        delay(20);
        readPing();
        if(ultrasoundValue < 500) {
          cntr = cntr + 1;
          switch(pwm) {
            case 400:
              x = 7;
              PLval = 650;
              PRval = 650;
              Go();
              break;
            case 500:
              x = 10;
              PLval = 650;
              PRval = 650;
              Go();
              break;
            case 600:
              x = 14;
              PLval = 850;
              PRval = 850;
              Go();
              break;
            case 700:
              x = 10;
              PLval = 850;
              PRval = 850;
              Go();
              break;
            case 950:
              x = 7;
              PLval = 850;
              PRval = 850;
              Go();
              break;
          }
        }
      }
      //Serial.print("clrpth: ");
      //Serial.println(clrpth);
      //Serial.print("objdet: ");
      //Serial.println(objdet);
      //Serial.print("cntr: ");
      //Serial.println(cntr);
      if(cntr > 25 && clrpth < 2000) {
        clrpth = 0;
        cntr = 0;
        Scan();
      }
    }
    void Go() {
      for(i = 0; i < x; i++) {
        digitalWrite(LeftPin, HIGH);
        delayMicroseconds(PLval * 2);
        digitalWrite(LeftPin, LOW);
        digitalWrite(RightPin, HIGH);
        delayMicroseconds(PRval * 2);
        digitalWrite(RightPin, LOW);
        delay(20);
      }
    }
    void readPing() {  // Get Distance from Ultrasonic Ranger
    timecount = 0;
    val = 0;
    pinMode(ultraSoundSignal, OUTPUT); // Switch signalpin to output

    /* Send low-high-low pulse to activate the trigger pulse of the sensor
    * -------------------------------------------------------------------
    */

    digitalWrite(ultraSoundSignal, LOW); // Send low pulse
    delayMicroseconds(2); // Wait for 2 microseconds
    digitalWrite(ultraSoundSignal, HIGH); // Send high pulse
    delayMicroseconds(5); // Wait for 5 microseconds
    digitalWrite(ultraSoundSignal, LOW); // Holdoff

    /* Listening for echo pulse
    * -------------------------------------------------------------------
    */

    pinMode(ultraSoundSignal, INPUT); // Switch signalpin to input
    val = digitalRead(ultraSoundSignal); // Append signal value to val
    while(val == LOW) { // Loop until pin reads a high value
      val = digitalRead(ultraSoundSignal);
    }

    while(val == HIGH) { // Loop until pin reads a high value
      val = digitalRead(ultraSoundSignal);
      timecount = timecount +1;            // Count echo pulse time
    }

    /* Writing out values to the serial port
    * -------------------------------------------------------------------
    */

    ultrasoundValue = timecount; // Append echo pulse time to ultrasoundValue

    //serialWrite('A'); // Example identifier for the sensor
    //printInteger(ultrasoundValue);
    //serialWrite(10);
    //serialWrite(13);

    /* Lite up LED if any value is passed by the echo pulse
    * -------------------------------------------------------------------
    */

    if(timecount > 0){
      digitalWrite(ledPin, HIGH);
    }
    }
    void Scan() {   // Scan for the Clearest Path
      oldDistance = 30;
      task = 0;
      for(i = 1; i < 5; i++) {
        switch(i) {
          case 1:
            //Serial.println("Pos. 1");
            pwm = 1125;    ///  incr. by 100 from 1085
            break;
          case 2:
            //Serial.println("Pos. 2");
            pwm = 850; //// increased by 100 from 850
            break;
          case 3:
            //Serial.println("Pos. 3");
            pwm = 400;
            break;
          case 4:
            //Serial.println("Pos. 4");
            pwm = 235;
            break;
        }
        for(pulseCount = 0; pulseCount < 20; pulseCount++) {  // Adjust Pan Servo and Read USR
          digitalWrite(PingServoPin, HIGH);
          delayMicroseconds(pwm * 2);
          digitalWrite(PingServoPin, LOW);
          readPing();
          delay(20);
        }
        distance = ((float)ultrasoundValue * CmConstant);   // Calculate Distance in Cm
        if(distance > oldDistance) {  // If the Newest distance is longer, replace previous reading with it
          oldDistance = distance;
          task = i;   // Set task equal to Pan Servo Position
        }
      }
      //Serial.print("Task: ");
      //Serial.println(task);
      //Serial.print("distance: ");
      //Serial.println(distance);
      //Serial.print("oldDistance: ");
      //Serial.println(oldDistance);
      distance = 50;  // Prevents Scan from Looping
      switch(task) {   // Determine which task should be carried out
        case 0:  // Center was clearest
          x = 28;
          PLval = (850);
          PRval = (850);
          Go();
          break;
        case 1:  // 90 degrees Left was Clearest
          x = 14;
          PLval = (650);
          PRval = (650);
          Go();
          break;
        case 2:  // 45 degrees left
          x = 7;
          PLval = (650);
          PRval = (650);
          Go();
          break;
        case 3:  // 45 degrees right
          x = 7;
          PLval = (850);
          PRval = (850);
          Go();
          break;
        case 4:  // 90 degrees right
          x = 14;
          PLval = (850);
          PRval = (850);
          Go();
          break;
      }
    }
        

My Code

CPP / C++ / C Code:
    int i;   // Generic Counter
    int x;  // Generic Counter
    int PLval;  // Pulse Width for Left Servo
    int PRval;  // Pulse Width for Right Servo
    int cntr;  // Generic Counter Used for Determining amt. of Object Detections
    int counter; // Generic Counter
    int clrpth;  // amt. of Milliseconds Of Unobstructed Path
    int objdet;  // Time an Object was Detected
    int task;  // Routine to Follow for Clearest Path
    int pwm;  // Pulse Width for Pan Servo
    boolean add;  // Whether to Increment or Decrement PW Value for Pan Servo
    int distance;  // Distance to Object Detected via Ultrasonic Ranger
    int oldDistance;  // Previous Distance Value Read from Ultrasonic Ranger

    float scale = 1.9866666666666666666666666666667;  // *Not Currently Used*

    int LeftPin = 6;  // Left Servo
    int RightPin = 9;  // Right Servo
    int PiezoPin = 11;  // Piezo
    int PingServoPin = 5;  // Pan Servo
    

    int ultraSoundSignal = 7; // Ultrasound signal pin
    int val = 0;              // Used for Ultrasonic Ranger
    int ultrasoundValue = 0;  // Raw Distance Val
    int oldUltrasoundValue;  // *Not used*
    int pulseCount;        // Generic Counter
    int timecount = 0; // Echo counter
    int ledPin = 13; // LED connected to digital pin 13

    #define BAUD 9600
    #define CmConstant 1/29.034

    void setup() {
      Serial.begin(9600);
      pinMode(PiezoPin, OUTPUT);
      pinMode(ledPin, OUTPUT);
      pinMode(LeftPin, OUTPUT);
      pinMode(RightPin, OUTPUT);
      pinMode(PingServoPin, OUTPUT);
    
      for(i = 0; i < 500; i++) {
        digitalWrite(PiezoPin, HIGH);
        delayMicroseconds(1000);
        digitalWrite(PiezoPin, LOW);
        delayMicroseconds(1000);
      }
      for(i = 0; i < 20; i++) {
      digitalWrite(PingServoPin, HIGH);
      delayMicroseconds(655 * 2);
      digitalWrite(PingServoPin, LOW);
      delay(20);
      }
      ultrasoundValue = 600;
      i = 0;
    }

    void loop()
    {
      //Scan();
      Look();
      Go();
    }
    void Look() {
      
        x = 1;
        PLval = 620;
        PRval = 850;
        counter = counter + 1;
        clrpth = (millis() - objdet);
        if(add == true) {
          pwm = pwm + 50;
        }
        else if(add == false) {
          pwm = pwm - 50;
        }
        if(pwm < 400) {
          pwm = 400;
          add = true;
        }
        if(pwm > 950) {
          pwm = 950;
          add = false;
        }
        digitalWrite(PingServoPin, HIGH);
        delayMicroseconds(pwm * 2);
        digitalWrite(PingServoPin, LOW);
        delay(20);
        readPing();
        if(ultrasoundValue < 500) {
          cntr = cntr + 1;
          switch(pwm) {
            case 400:
              x = 7;
              PLval = 650;
              PRval = 650;
              Go();
              break;
            case 500:
              x = 10;
              PLval = 650;
              PRval = 650;
              Go();
              break;
            case 600:
              x = 14;
              PLval = 850;
              PRval = 850;
              Go();
              break;
            case 700:
              x = 10;
              PLval = 850;
              PRval = 850;
              Go();
              break;
            case 950:
              x = 7;
              PLval = 850;
              PRval = 850;
              Go();
              break;
          }
        }
      }
      
      {
        //Serial.print("clrpth: ");
      //Serial.println(clrpth);
      //Serial.print("objdet: ");
      //Serial.println(objdet);
      //Serial.print("cntr: ");
      //Serial.println(cntr);
     } {
        if(cntr > 25 && clrpth < 2000) {
        clrpth = 0;
        cntr = 0;
        Scan();
      }
    }
    void Go() {
      for(i = 0; i < x; i++) {
        digitalWrite(LeftPin, HIGH);
        delayMicroseconds(PLval * 2);
        digitalWrite(LeftPin, LOW);
        digitalWrite(RightPin, HIGH);
        delayMicroseconds(PRval * 2);
        digitalWrite(RightPin, LOW);
        delay(20);
      }
    }
    void readPing() {  // Get Distance from Ultrasonic Ranger
    timecount = 0;
    val = 0;
    pinMode(ultraSoundSignal, OUTPUT); // Switch signalpin to output

    /* Send low-high-low pulse to activate the trigger pulse of the sensor
    * -------------------------------------------------------------------
    */

    digitalWrite(ultraSoundSignal, LOW); // Send low pulse
    delayMicroseconds(2); // Wait for 2 microseconds
    digitalWrite(ultraSoundSignal, HIGH); // Send high pulse
    delayMicroseconds(5); // Wait for 5 microseconds
    digitalWrite(ultraSoundSignal, LOW); // Holdoff

    /* Listening for echo pulse
    * -------------------------------------------------------------------
    */

    pinMode(ultraSoundSignal, INPUT); // Switch signalpin to input
    val = digitalRead(ultraSoundSignal); // Append signal value to val
    while(val == LOW) { // Loop until pin reads a high value
      val = digitalRead(ultraSoundSignal);
    }

    while(val == HIGH) { // Loop until pin reads a high value
      val = digitalRead(ultraSoundSignal);
      timecount = timecount +1;            // Count echo pulse time
    }

    /* Writing out values to the serial port
    * -------------------------------------------------------------------
    */

    ultrasoundValue = timecount; // Append echo pulse time to ultrasoundValue

    //serialWrite('A'); // Example identifier for the sensor
    //printInteger(ultrasoundValue);
    //serialWrite(10);
    //serialWrite(13);

    /* Lite up LED if any value is passed by the echo pulse
    * -------------------------------------------------------------------
    */

    if(timecount > 0){
      digitalWrite(ledPin, HIGH);
    }
    }
    void Scan() {   // Scan for the Clearest Path
      oldDistance = 30;
      task = 0;
      for(i = 1; i < 5; i++) {
        switch(i) {
          case 1:
            //Serial.println("Pos. 1");
            pwm = 1125;    ///  incr. by 100 from 1085
            break;
          case 2:
            //Serial.println("Pos. 2");
            pwm = 850; //// increased by 100 from 850
            break;
          case 3:
            //Serial.println("Pos. 3");
            pwm = 400;
            break;
          case 4:
            //Serial.println("Pos. 4");
            pwm = 235;
            break;
        }
        for(pulseCount = 0; pulseCount < 20; pulseCount++) {  // Adjust Pan Servo and Read USR
          digitalWrite(PingServoPin, HIGH);
          delayMicroseconds(pwm * 2);
          digitalWrite(PingServoPin, LOW);
          readPing();
          delay(20);
        }
        distance = ((float)ultrasoundValue * CmConstant);   // Calculate Distance in Cm
        if(distance > oldDistance) {  // If the Newest distance is longer, replace previous reading with it
          oldDistance = distance;
          task = i;   // Set task equal to Pan Servo Position
        }
      }
      //Serial.print("Task: ");
      //Serial.println(task);
      //Serial.print("distance: ");
      //Serial.println(distance);
      //Serial.print("oldDistance: ");
      //Serial.println(oldDistance);
      distance = 50;  // Prevents Scan from Looping
      switch(task) {   // Determine which task should be carried out
        case 0:  // Center was clearest
          x = 28;
          PLval = (850);
          PRval = (850);
          Go();
          break;
        case 1:  // 90 degrees Left was Clearest
          x = 14;
          PLval = (650);
          PRval = (650);
          Go();
          break;
        case 2:  // 45 degrees left
          x = 7;
          PLval = (650);
          PRval = (650);
          Go();
          break;
        case 3:  // 45 degrees right
          x = 7;
          PLval = (850);
          PRval = (850);
          Go();
          break;
        case 4:  // 90 degrees right
          x = 14;
          PLval = (850);
          PRval = (850);
          Go();
          break;
      }
    }
        
Last edited by LuciWiz : 25-Jan-2010 at 00:26. Reason: Please insert your C++ code between [cpp] & [/cpp] tags
  #2  
Old 24-Jan-2010, 19:09
davekw7x davekw7x is offline
Outstanding Member
 
Join Date: Feb 2004
Location: Left Coast, USA
Posts: 5,309
davekw7x is a splendid one to beholddavekw7x is a splendid one to beholddavekw7x is a splendid one to beholddavekw7x is a splendid one to beholddavekw7x is a splendid one to beholddavekw7x is a splendid one to beholddavekw7x is a splendid one to behold

Re: I Need Help With My Code


Quote:
Originally Posted by Punkhead
... I kept on receiving errors...
Well did you actually look at the lines that it didn't like?

I see the following:

CPP / C++ / C Code:
    void Look() {
      
        x = 1;
    .
    .//Your stuff inside the Look() function
    .
    } // End of Look() function: Your line number 125

      { // Your line number 127
        //Serial.print("clrpth: ");
      //Serial.println(clrpth);
      //Serial.print("objdet: ");
      //Serial.println(objdet);
      //Serial.print("cntr: ");
      //Serial.println(cntr);
     } {
        if(cntr > 25 && clrpth < 2000) {
        clrpth = 0;
        cntr = 0;
        Scan();
      }
    } // Your line number 140
    void Go() {
      for(i = 0; i < x; i++) {

    .
    . // Your stuff inside the Go function
    .
    }



Your lines 126-140 are not inside any function, and the compiler rightly complains.

Here's a suggestion: Use consistent indentation to show the structure more clearly to us mere humans. Maybe something like:

CPP / C++ / C Code:
void Look ()
{

  x = 1;
  PLval = 620;
  PRval = 850;
  counter = counter + 1;
  clrpth = (millis () - objdet);
  if (add == true)
    {
      pwm = pwm + 50;
    }
  else if (add == false)
    {
      pwm = pwm - 50;
    }
  if (pwm < 400)
    {
      pwm = 400;
      add = true;
    }
  if (pwm > 950)
    {
      pwm = 950;
      add = false;
    }
  digitalWrite (PingServoPin, HIGH);
  delayMicroseconds (pwm * 2);
  digitalWrite (PingServoPin, LOW);
  delay (20);
  readPing ();
  if (ultrasoundValue < 500)
    {
      cntr = cntr + 1;
      switch (pwm)
	{
	case 400:
	  x = 7;
	  PLval = 650;
	  PRval = 650;
	  Go ();
	  break;
	case 500:
	  x = 10;
	  PLval = 650;
	  PRval = 650;
	  Go ();
	  break;
	case 600:
	  x = 14;
	  PLval = 850;
	  PRval = 850;
	  Go ();
	  break;
	case 700:
	  x = 10;
	  PLval = 850;
	  PRval = 850;
	  Go ();
	  break;
	case 950:
	  x = 7;
	  PLval = 850;
	  PRval = 850;
	  Go ();
	  break;
	}
    }
}

{
  //Serial.print("clrpth: ");
  //Serial.println(clrpth);
  //Serial.print("objdet: ");
  //Serial.println(objdet);
  //Serial.print("cntr: ");
  //Serial.println(cntr);
}

{
  if (cntr > 25 && clrpth < 2000)
    {
      clrpth = 0;
      cntr = 0;
      Scan ();
    }
}
void Go ()
{
  for (i = 0; i < x; i++)
    {
      digitalWrite (LeftPin, HIGH);
      delayMicroseconds (PLval * 2);
      digitalWrite (LeftPin, LOW);
      digitalWrite (RightPin, HIGH);
      delayMicroseconds (PRval * 2);
      digitalWrite (RightPin, LOW);
      delay (20);
    }
}

Make sure that functions begin and end at the left margin. Any outside stuff will be obvious. (The compiler always knows, but sometimes people get confused).


Regards,

Dave
 
 

Recent GIDBlogVista ?Widgets? on Windows XP by LocalTech

Thread Tools Search this Thread
Search this Thread:

Advanced Search
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
Trouble integrating console code into GUI Barman007 Java Forum 18 15-May-2008 13:05
How to sort random access file? wmmccoy0910 C Programming Language 12 04-Sep-2006 03:40
Here it is again! 35% - 40% off For Life! my-e-space Web Hosting Advertisements & Offers 0 20-Apr-2006 14:48
Guidelines for posting requests for help - UPDATED! WaltP C Programming Language 0 21-Apr-2005 02:44

Network Sites: GIDNetwork · GIDWebHosts · GIDSearch · Learning Journal by J de Silva, The

All times are GMT -6. The time now is 20:24.


vBulletin, Copyright © 2000 - 2010, Jelsoft Enterprises Ltd.