Go Down

### Topic: error on my sketch (Read 4801 times)previous topic - next topic

#### xulingxuling23

##### Feb 13, 2013, 06:36 amLast Edit: Feb 13, 2013, 07:00 am by xulingxuling23 Reason: 1
i cant fix this error can someone help me?this project i have copied from buildautomnous line follower

Code: [Select]
`long sensors_average;int sensors_sum;int position;long sensors[] = {0, 0, 0, 0, 0}; // Array used to store 5 readings for 5sensors.int proportional;int integral;int derivative;int last_proportional;int Kp;int Ki;int Kd;int max_speed;int left_speed;int right_speed;int error_value;void setup(){  }void loop()sensors_read(); //Reads sensor values and computes sensor sum and weighted averagepid_calc(); //Calculates position[set point] and computes Kp,Ki and Kdcalc_turn(); //Computes the error to be correctedmotor_drive(right_speed, left_speed); //Sends PWM signals to the motors}void pid_calc(){ position = int(sensors_average / sensors_sum);proportional = position - set_point; // Replace set_point by your set pointintegral = integral + proportional;derivative = proportional - last_proportional;last_proportional = proportional;error_value = int(proportional * Kp + integral * Ki + derivative * Kd);}void sensors_read(){sensors_average = 0;sensors_sum = 0;for (int i = 0; i < 5; i++){sensors[i] = analogRead(i);sensors_average += sensors[i] * i * 1000; //Calculating the weighted mean of the sensorreadingssensors_sum += int(sensors[i]); //Calculating sum of sensor readings}}void calc_turn(){ //Restricting the error value between +256.if (error_value < -256){error_value = -256;}if (error_value > 256){error_value = 256;}// If error_value is less than zero calculate right turn speed valuesif (error_value < 0){right_speed = max_speed + error_value;left_speed = max_speed;}// If error_value is greater than zero calculate left turn valueselse{right_speed = max_speed;left_speed = max_speed - error_value;}}`

the error:

sketch_feb13a:40: error: stray '\' in program
sketch_feb13a:6: error: expected constructor, destructor, or type conversion before '.' token
sketch_feb13a:31: error: expected initializer before 'sensors_read'
sketch_feb13a:32: error: expected constructor, destructor, or type conversion before ';' token
sketch_feb13a:33: error: expected constructor, destructor, or type conversion before ';' token
sketch_feb13a:34: error: expected constructor, destructor, or type conversion before '(' token
sketch_feb13a:35: error: expected declaration before '}' token

#### liuzengqiang

#1
##### Feb 13, 2013, 06:48 am
Too many mistakes. Do you know how to write a simple program in C?
Code: [Select]
`long sensors[] = {0, 0, 0, 0, 0}; // Array used to store 5 readings for 5sensors.`

Code: [Select]
`void loop()sensors_read(); //Reads sensor values and computes sensor sum and weighted average`

#### nickgammon

#2
##### Feb 13, 2013, 06:50 am
Read this before posting a programming question

Please edit your post, select the code, and put it between [code] ... [/code] tags.

You can do that by hitting the # button above the posting area.
Please post technical questions on the forum, not by personal message. Thanks!

#### xulingxuling23

#3
##### Feb 13, 2013, 07:08 amLast Edit: Feb 13, 2013, 07:12 am by xulingxuling23 Reason: 1
thanks now i will fix the code
Code: [Select]
`long sensors_average;int sensors_sum;int position;long sensors[] = {0, 0, 0, 0, 0}; // Array used to store 5 readings for 5int proportional;int integral;int derivative;int last_proportional;int Kp;int Ki;int Kd;int max_speed;int left_speed;int right_speed;int error_value;int threshold;int readings;void setup(){  }void loop(){sensors_read(); //Reads sensor values and computes sensor sum and weighted averagepid_calc(); //Calculates position[set point] and computes Kp,Ki and Kdcalc_turn(); //Computes the error to be corrected//motor_drive(right_speed, left_speed); //Sends PWM signals to the motors}void pid_calc(){ position = int(sensors_average / sensors_sum);proportional = position - set_point; // Replace set_point by your set pointintegral = integral + proportional;derivative = proportional - last_proportional;last_proportional = proportional;error_value = int(proportional * Kp + integral * Ki + derivative * Kd);}void sensors_read(){ sensors_average = 0;sensors_sum = 0;for (int i = 0; i < 5; i++){sensors[i] = analogRead(i);// Readings less than threshold are filtered out for noiseif (sensors[i] < threshold)sensors[i] = 0;sensors_average += sensors[i] * i * 1000; //Calculating the weighted mean of the sensor//readingssensors_sum += int(sensors[i]); //Calculating sum of sensor readings}}void calc_turn(){ //Restricting the error value between +256.if (error_value < -256){error_value = -256;}if (error_value > 256){error_value = 256;}// If error_value is less than zero calculate right turn speed valuesif (error_value < 0){right_speed = max_speed + error_value;left_speed = max_speed;}// If error_value is greater than zero calculate left turn valueselse{right_speed = max_speed;left_speed = max_speed - error_value;}}`

errors:

sketch_feb13a:42: error: stray '\' in program
sketch_feb13a.ino: In function 'void pid_calc()':
sketch_feb13a:42: error: expected `;' before 'u2013'

#### nickgammon

#4
##### Feb 13, 2013, 07:15 am
I fixed up the stray, and formatted it.

Code: [Select]
`long sensors_average;int sensors_sum;int position;long sensors[] = {  0, 0, 0, 0, 0}; // Array used to store 5 readings for 5int proportional;int integral;int derivative;int last_proportional;int Kp;int Ki;int Kd;int max_speed;int left_speed;int right_speed;int error_value;int threshold;int readings;void setup(){ }void loop(){  sensors_read(); //Reads sensor values and computes sensor sum and weighted average  pid_calc(); //Calculates position[set point] and computes Kp,Ki and Kd  calc_turn(); //Computes the error to be corrected  //motor_drive(right_speed, left_speed); //Sends PWM signals to the motors}void pid_calc(){   position = int(sensors_average / sensors_sum);  proportional = position - set_point; // Replace set_point by your set point  integral = integral + proportional;  derivative = proportional - last_proportional;  last_proportional = proportional;  error_value = int(proportional * Kp + integral * Ki + derivative * Kd);}void sensors_read(){   sensors_average = 0;  sensors_sum = 0;  for (int i = 0; i < 5; i++)  {    sensors[i] = analogRead(i);    // Readings less than threshold are filtered out for noise    if (sensors[i] < threshold)      sensors[i] = 0;    sensors_average += sensors[i] * i * 1000; //Calculating the weighted mean of the sensor    //readings    sensors_sum += int(sensors[i]); //Calculating sum of sensor readings  }}void calc_turn(){ //Restricting the error value between +256.  if (error_value < -256)  {    error_value = -256;  }  if (error_value > 256)  {    error_value = 256;  }  // If error_value is less than zero calculate right turn speed values  if (error_value < 0)  {    right_speed = max_speed + error_value;    left_speed = max_speed;  }  // If error_value is greater than zero calculate left turn values  else  {    right_speed = max_speed;    left_speed = max_speed - error_value;  }}`

I still get the error message about "set_point" but as the comment says, you are supposed to put your set point there. I don't know what that is.
Please post technical questions on the forum, not by personal message. Thanks!

#5
##### Feb 13, 2013, 07:35 am
int set_point;
is missing from the declarations
Designing & building electrical circuits for over 25 years.  Screw Shield for Mega/Due/Uno,  Bobuino with ATMega1284P, & other '328P & '1284P creations & offerings at  my website.

#### liuzengqiang

#6
##### Feb 13, 2013, 07:42 am
Nick, I tried a few things and couldn't find the stray \

Where was it?

#### xulingxuling23

#7
##### Feb 13, 2013, 08:07 am
@liudr thats whay im ask to this topic

oke now i want to try on my bot thanks

#### nickgammon

#8
##### Feb 13, 2013, 08:13 amLast Edit: Feb 13, 2013, 08:38 am by Nick Gammon Reason: 1
Quote

Nick, I tried a few things and couldn't find the stray \

Where was it?

Here, although it's hard to see:

Code: [Select]
`proportional = position - set_point; // Replace set_point by your set point`

That ain't no minus sign. It's hex 0x96. Minus is 0x2D.

Fixed version:

Code: [Select]
`proportional = position - set_point; // Replace set_point by your set point`

See the difference?
Please post technical questions on the forum, not by personal message. Thanks!

#### xulingxuling23

#9
##### Feb 13, 2013, 08:49 amLast Edit: Feb 13, 2013, 08:50 am by xulingxuling23 Reason: 1
cant see sir
i dont know looks the code is same

now i enable driver motor and got the prob

Code: [Select]
`// map motor poles to Arduino pins#define motor1pole1 2#define motor1pole2 3#define motor2pole1 7#define motor2pole2 8// map L293d motor enable pins to Arduino pins#define enablePin1 9#define enablePin2 10#define M1_MAX_SPEED 100#define M2_MAX_SPEED 100#define motordelay 30#define debugmotorsec 3000long sensors_average;int sensors_sum;int position;long sensors[] = {  0, 0, 0, 0, 0}; // Array used to store 5 readings for 5int proportional;int integral;int derivative;int last_proportional;int Kp;int Ki;int Kd;int max_speed;int left_speed;int right_speed;int error_value;int threshold;int readings;int set_point;int motor_drive;void setup(){  // set mapped L293D motor1 and motor 2 enable pins on Arduino to output (to turn on/off motor1 and motor2 via L293D)  pinMode(enablePin1, OUTPUT);  pinMode(enablePin2, OUTPUT);  // set mapped motor poles to Arduino pins (via L293D)  pinMode( motor1pole1 , OUTPUT);  pinMode( motor1pole2, OUTPUT);  pinMode( motor2pole1, OUTPUT);  pinMode( motor2pole2 , OUTPUT);}void loop(){  sensors_read(); //Reads sensor values and computes sensor sum and weighted average  pid_calc(); //Calculates position[set point] and computes Kp,Ki and Kd  calc_turn(); //Computes the error to be corrected  motor_drive(right_speed, left_speed); //Sends PWM signals to the motors}void pid_calc(){  position = int(sensors_average / sensors_sum);  proportional = position - set_point; // Replace set_point by your set point  integral = integral + proportional;  derivative = proportional - last_proportional;  last_proportional = proportional;  error_value = int(proportional * Kp + integral * Ki + derivative * Kd);}void sensors_read(){  sensors_average = 0;  sensors_sum = 0;  for (int i = 0; i < 5; i++)  {    sensors[i] = analogRead(i);    // Readings less than threshold are filtered out for noise    if (sensors[i] < threshold)      sensors[i] = 0;    sensors_average += sensors[i] * i * 1000; //Calculating the weighted mean of the sensor    //readings    sensors_sum += int(sensors[i]); //Calculating sum of sensor readings  }}void calc_turn(){ //Restricting the error value between +256.  if (error_value < -256)  {    error_value = -256;  }  if (error_value > 256)  {    error_value = 256;  }  // If error_value is less than zero calculate right turn speed values  if (error_value < 0)  {    right_speed = max_speed + error_value;    left_speed = max_speed;  }  // If error_value is greater than zero calculate left turn values  else  {    right_speed = max_speed;    left_speed = max_speed - error_value;  }}`

sketch_feb13a.ino: In function 'void loop()':
sketch_feb13a:55: error: 'motor_drive' cannot be used as a function

#### AWOL

#10
##### Feb 13, 2013, 08:51 amLast Edit: Feb 13, 2013, 08:52 am by AWOL Reason: 1
Code: [Select]
`int motor_drive;`
Because you declared it as an "int" variable.

Quote
i dont know looks the code is same

Not to the compiler it doesn't.
If ever I see the error message "stray '\'...", I can put a pretty certain bet that the code has been copied from a website.

#### nickgammon

#11
##### Feb 13, 2013, 10:04 am

i dont know looks the code is same

Look closely:

See the different length of the minus sign?
Please post technical questions on the forum, not by personal message. Thanks!

#### xulingxuling23

#12
##### Feb 13, 2013, 10:08 am
@nick
gosh its diffrent thx for help me nick

@awol
so i must use double not int?

#### UKHeliBob

#13
##### Feb 13, 2013, 10:14 am
No.  You declared motor_drive as an int then tried to use it as a function
Code: [Select]
`int motor_drive;`
Code: [Select]
` motor_drive(right_speed, left_speed); //Sends PWM signals to the motors`
Declaring it as another type will not solve the problem.
Should there be a function in your code that causes both motors to run ?
Please do not send me PMs asking for help.  Post in the forum then everyone will benefit from seeing the questions and answers.

#14

Go Up