programming object avoiding robot arduino uno

hello everyone,
we’re currently trying to program our robot, but it doesn’t work. We put the errors at the bottom of the code, could you maybe help us?

thank you!
greetings from holland

//variabelen
const int MR1 = 5;
const int MR2 = 6;
const int ML1 = 7;
const int ML2 = 8;
const int MRPWM = 4;
const int MLPWM = 9;
int Speed = 255;
const int echoPin = 12; // echo pin
const int triggerPin = 13; // trigger pin
const int servoPin = 10;
const int degreesForward = 120; //aantal graden waarbij de sensor vooruit kijkt
const int degreesLeft = 60; //aantal graden waarbij de sensor naar links kijkt
const int degreesRight = 180; //aantal graden waarbij de sensor naar rechts kijkt
const int delay_time = 250; // de tijd waarin de sensor stopt met draaien en geluid uitzendt of ontvangt
#include <Servo.h>
Servo myservo;

float getDistance(int degrees, char dir) {
myservo.write(degrees);
digitalWrite(triggerPin, LOW); // geen geluidsgolven
delayMicroseconds(2); // twee microseconden niet veranderen, dus geen geluidsgolven
digitalWrite(triggerPin, HIGH); // zendt geluidsgolven uit
delayMicroseconds(10); // tien microseconden doorgaan met geluidsgolven
digitalWrite(triggerPin, LOW); // geluidsgolven stoppen
float distance = pulseIn(echoPin, HIGH); //

distance = distance*0.34029/2; // delen door twee omdat het heen en terug gaat!
Serial.print(distance); //
Serial.print(" distance: “); //
Serial.print(int(distance)); // output distance (mm)
Serial.print(”\n");
return distance;

}

int getDirectionFromdetection() {
int Fdistancee = 0; // afstand aan de voorkant in mm
int Rdistancee = 0; // afstand aan de rechterkant in mm
int Ldistancee = 0; // afstand aan de linkerkant in mm
int delay_time = 250; // hoelang de sensor motor erover doet om naar links of rechts te draaien vanaf het midden
int directionn =0;

Fdistancee = getDistance(degreesForward, ‘F’); // de afstand aan de voorkant verkrijgen

// HIGH LOW = Vooruit
// LOW HIGH = Achteruit
// LOW LOW = Stoppen

void setup() {
//pin
Serial.begin(9600);
pinMode(MR1, OUTPUT);
pinMode(MR2, OUTPUT);
pinMode(ML1, OUTPUT);
pinMode(ML2, OUTPUT);
pinMode(MRPWM, OUTPUT);
pinMode(MLPWM, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(triggerPin, OUTPUT);
myservo.write(degreesForward); // zorgt ervoor dat de sensor recht vooruit kijkt
myservo.attach(servoPin);
}

void forward(int d) {
digitalWrite(MR1, HIGH);
digitalWrite(MR2, LOW);
digitalWrite(ML1, HIGH);
digitalWrite(ML2, LOW);
analogWrite(MRPWM, Speed);
analogWrite(MLPWM, Speed);
delay(d * 10);
}

void right(int d) { //bocht naar rechts
digitalWrite(ML1, LOW);
digitalWrite(ML2, HIGH);
digitalWrite(MR1, LOW);
digitalWrite(MR2, LOW);
analogWrite(MRPWM, Speed);
analogWrite(MLPWM, Speed);
delay(d * 10);
}

void left(int d) {//bocht naar links
digitalWrite(MR1, LOW);
digitalWrite(MR2, HIGH);
digitalWrite(ML1, LOW);
digitalWrite(ML2, LOW);
analogWrite(MRPWM, Speed);
analogWrite(MLPWM, Speed);
delay(d * 10);
}

void turnR(int d) {//bocht naar rechts (scherp)
digitalWrite(MR1, HIGH);
digitalWrite(MR2, LOW);
digitalWrite(ML1, LOW);
digitalWrite(ML2, HIGH);
analogWrite(MRPWM, Speed);
analogWrite(MLPWM, Speed);
delay(d * 10);
}

void turnL(int d) {//bocht naar links (scherp)
digitalWrite(MR1, LOW);
digitalWrite(MR2, HIGH);
digitalWrite(ML1, HIGH);
digitalWrite(ML2, LOW);
analogWrite(MRPWM, Speed);
analogWrite(MLPWM, Speed);
delay(d * 10);
}

void stopp(int d) { //stop
digitalWrite(MR1, LOW);
digitalWrite(MR2, LOW);
digitalWrite(ML1, LOW);
digitalWrite(ML2, LOW);
analogWrite(MRPWM, Speed);
analogWrite(MLPWM, Speed);
delay(d * 10);
}

void back(int d) { //achteruit rijden
digitalWrite(MR1, LOW);
digitalWrite(MR2, HIGH);
digitalWrite(ML1, LOW);
digitalWrite(ML2, HIGH);
analogWrite(MRPWM, Speed);
analogWrite(MLPWM, Speed);
delay(d * 10);
}

void loop () {
forward(100);

if (Fdistancee < 100) { // als de afstand kleiner is dan 100 mm
stopp(1); // stilstaan
Ldistancee = getDistance(degreesLeft, ‘L’); // afstand aan de linkerkant berekenen
delay(delay_time); // wachten tot de servo motor gedraaid is
Rdistancee = getDistance(degreesRight, ‘R’); // afstand aan de rechterkant berekenen
delay(delay_time); // wachten tot de servo motor gedraaid is

if (Ldistancee > Rdistancee) { // als links meer ruimte is dan rechts
void TurnL (100); // ga zover naar links dat de robot 90 graden draait
}

if (Ldistancee <= Rdistancee) {//als links minder of evenveel ruimte is als rechts
void TurnR (100); //ga zover naar rechts dat de robot 90 graden draait
}

if (Ldistancee < 100 && Rdistancee < 100) { //als zowel links als rechts de afstand kleiner is dan 100 mm
void Backwards (100); //ga naar achter
return directionn;
}
}

else if (Fdistancee < 250) { // als de afstand kleiner is dan 250 mm
stopp(1); // stilstaan
Ldistancee = getDistance(degreesLeft, ‘L’); // afstand aan de linkerkant berekenen
delay(delay_time); // wachten tot de servo motor gedraaid is
Rdistancee = getDistance(degreesRight, ‘R’); // afstand aan de rechterkant berekenen
delay(delay_time); // wachten tot de servo motor gedraaid is

if (Ldistancee > Rdistancee) { // als links meer ruimte is dan rechts
void left (100); // ga zover naar links dat de robot 90 graden draait
}

if (Ldistancee <= Rdistancee) {//als links minder of evenveel ruimte is als rechts
void right (100); //ga zover naar rechts dat de robot 90 graden draait
}

if (Ldistancee < 100 && Rdistancee < 100) { //als zowel links als rechts de afstand kleiner is dan 100 mm
void Backwards (100); //ga naar achter
}
}
else {
void Forward (int d); //ga rechtdoor
}

return directionn;
}

}

Arduino: 1.6.5 (Mac OS X), Board:“Arduino/Genuino Uno”

Robot_1-11.ino: In function ‘int getDirectionFromdetection()’:
Robot_1-11:51: error: a function-definition is not allowed here before ‘{’ token
Robot_1-11:66: error: a function-definition is not allowed here before ‘{’ token
Robot_1-11:76: error: a function-definition is not allowed here before ‘{’ token
Robot_1-11:87: error: a function-definition is not allowed here before ‘{’ token
Robot_1-11:99: error: a function-definition is not allowed here before ‘{’ token
Robot_1-11:110: error: a function-definition is not allowed here before ‘{’ token
Robot_1-11:121: error: a function-definition is not allowed here before ‘{’ token
Robot_1-11:132: error: a function-definition is not allowed here before ‘{’ token
Robot_1-11:149: error: a function-definition is not allowed here before ‘{’ token
Robot_1-11:203: error: expected ‘}’ at end of input
a function-definition is not allowed here before ‘{’ token

int getDirectionFromdetection()  {
  int Fdistancee = 0; // afstand aan de voorkant in mm
  int Rdistancee = 0; // afstand aan de rechterkant in mm
  int Ldistancee = 0; // afstand aan de linkerkant in mm
  int delay_time = 250; // hoelang de sensor motor erover doet om naar links of rechts te draaien vanaf het midden
  int directionn = 0;

  Fdistancee = getDistance(degreesForward, 'F'); // de afstand aan de voorkant verkrijgen


  // HIGH LOW = Vooruit
  // LOW HIGH = Achteruit
  // LOW LOW = Stoppen

  void setup() {

Where is the end of the getDirectionFromdetection() function ?

    return directionn;

Where do you think that this is being returned to from the loop() function ?

Hi,

Can you please post a copy of your sketch, using code tags?
They are made with the </> icon in the reply Menu.
See section 7 http://forum.arduino.cc/index.php/topic,148850.0.html

Thanks … Tom… :slight_smile:

//variabelen
const int MR1 = 5;
const int MR2 = 6;
const int ML1 = 7;
const int ML2 = 8;
const int MRPWM = 4;
const int MLPWM = 9;
int Speed = 255;
const int echoPin = 12; // echo pin
const int triggerPin = 13; // trigger pin
const int servoPin = 2;
const int degreesForward = 120; //aantal graden waarbij de sensor vooruit kijkt
const int degreesLeft = 60; //aantal graden waarbij de sensor naar links kijkt
const int degreesRight = 180; //aantal graden waarbij de sensor naar rechts kijkt
const int delay_time = 250; // de tijd waarin de sensor stopt met draaien en geluid uitzendt of ontvangt
#include <Servo.h>
Servo myservo;

float getDistance(int degrees, char dir)  {
  myservo.write(degrees);
  digitalWrite(triggerPin, LOW); // geen geluidsgolven
  delayMicroseconds(2); // twee microseconden niet veranderen, dus geen geluidsgolven
  digitalWrite(triggerPin, HIGH); // zendt geluidsgolven uit
  delayMicroseconds(10); // tien microseconden doorgaan met geluidsgolven
  digitalWrite(triggerPin, LOW); // geluidsgolven stoppen
  float distance = pulseIn(echoPin, HIGH); // 

 distance = distance*0.34029/2; // delen door twee omdat het heen en terug gaat!
  Serial.print(distance); // 
  Serial.print(" distance: "); // 
  Serial.print(int(distance)); //  output distance (mm)
  Serial.print("\n");
  return distance;  

}

int getDirectionFromdetection()  {
int Fdistancee = 0; // afstand aan de voorkant in mm
int Rdistancee = 0; // afstand aan de rechterkant in mm
int Ldistancee = 0; // afstand aan de linkerkant in mm
int delay_time = 250; // hoelang de sensor motor erover doet om naar links of rechts te draaien vanaf het midden
int directionn =0; 
  
Fdistancee = getDistance(degreesForward, 'F'); // de afstand aan de voorkant verkrijgen
}
 
// HIGH LOW = Vooruit
// LOW HIGH = Achteruit
// LOW LOW = Stoppen

void setup() {
  //pin
Serial.begin(9600);
pinMode(MR1, OUTPUT);
pinMode(MR2, OUTPUT);
pinMode(ML1, OUTPUT);
pinMode(ML2, OUTPUT);
pinMode(MRPWM, OUTPUT);
pinMode(MLPWM, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(triggerPin, OUTPUT);
myservo.write(degreesForward);       // zorgt ervoor dat de sensor recht vooruit kijkt
myservo.attach(servoPin);
} 

void forward(int d) { 
digitalWrite(MR1, HIGH);
digitalWrite(MR2, LOW);
digitalWrite(ML1, HIGH);
digitalWrite(ML2, LOW);
analogWrite(MRPWM, Speed);
analogWrite(MLPWM, Speed);
delay(d * 10);
}

void right(int d) { //bocht naar rechts
digitalWrite(ML1, LOW);
digitalWrite(ML2, HIGH);
digitalWrite(MR1, LOW);
digitalWrite(MR2, LOW);
analogWrite(MRPWM, Speed);
analogWrite(MLPWM, Speed);
delay(d * 10);
}


void left(int d) {//bocht naar links
digitalWrite(MR1, LOW);
digitalWrite(MR2, HIGH);
digitalWrite(ML1, LOW);
digitalWrite(ML2, LOW);
analogWrite(MRPWM, Speed);
analogWrite(MLPWM, Speed);
delay(d * 10);
}



void turnR(int d) {//bocht naar rechts (scherp)
digitalWrite(MR1, HIGH);
digitalWrite(MR2, LOW);
digitalWrite(ML1, LOW);
digitalWrite(ML2, HIGH);
analogWrite(MRPWM, Speed);
analogWrite(MLPWM, Speed);  
delay(d * 10);
}


void turnL(int d) {//bocht naar links (scherp)
digitalWrite(MR1, LOW);
digitalWrite(MR2, HIGH);
digitalWrite(ML1, HIGH);
digitalWrite(ML2, LOW);
analogWrite(MRPWM, Speed);
analogWrite(MLPWM, Speed);
delay(d * 10);
}


void stopp(int d) { //stop
digitalWrite(MR1, LOW);
digitalWrite(MR2, LOW);
digitalWrite(ML1, LOW);
digitalWrite(ML2, LOW);
analogWrite(MRPWM, Speed);
analogWrite(MLPWM, Speed);  
delay(d * 10);
}


void back(int d) { //achteruit rijden
digitalWrite(MR1, LOW);
digitalWrite(MR2, HIGH);
digitalWrite(ML1, LOW);
digitalWrite(ML2, HIGH);
analogWrite(MRPWM, Speed);
analogWrite(MLPWM, Speed);  
delay(d * 10);
}


  
void loop () {
forward(100);

{int getDirectionFromdetection()  
int Fdistancee = 0; // afstand aan de voorkant in mm
int Rdistancee = 0; // afstand aan de rechterkant in mm
int Ldistancee = 0; // afstand aan de linkerkant in mm
int delay_time = 250; // hoelang de sensor motor erover doet om naar links of rechts te draaien vanaf het midden
int directionn =0; 
  
Fdistancee = getDistance(degreesForward, 'F'); // de afstand aan de voorkant verkrijgen
}  
{if (Fdistancee < 100) // als de afstand kleiner is dan 100 mm
stopp(1); //  stilstaan
Ldistancee = getDistance(degreesLeft, 'L'); // afstand aan de linkerkant berekenen
delay(delay_time); // wachten tot de servo motor gedraaid is
Rdistancee = getDistance(degreesRight, 'R'); // afstand aan de rechterkant berekenen
delay(delay_time); // wachten tot de servo motor gedraaid is

if (Ldistancee > Rdistancee) {    // als links meer ruimte is dan rechts
TurnL (100); // ga zover naar links dat de robot 90 graden draait
}

if (Ldistancee <= Rdistancee) {//als links minder of evenveel ruimte is als rechts
TurnR (100); //ga zover naar rechts dat de robot 90 graden draait
}

if (Ldistancee < 100 && Rdistancee < 100) { //als zowel links als rechts de afstand kleiner is dan 100 mm
Backwards (100); //ga naar achter
return directionn;
}

{else if (Fdistancee < 250)  // als de afstand kleiner is dan 250 mm
stopp(1); // stilstaan
Ldistancee = getDistance(degreesLeft, 'L'); // afstand aan de linkerkant berekenen
delay(delay_time); // wachten tot de servo motor gedraaid is
Rdistancee = getDistance(degreesRight, 'R'); // afstand aan de rechterkant berekenen
delay(delay_time); // wachten tot de servo motor gedraaid is

if (Ldistancee > Rdistancee) {    // als links meer ruimte is dan rechts
left (100); // ga zover naar links dat de robot 90 graden draait
}

if (Ldistancee <= Rdistancee) {//als links minder of evenveel ruimte is als rechts
right (100); //ga zover naar rechts dat de robot 90 graden draait
}

if (Ldistancee < 100 && Rdistancee < 100) { //als zowel links als rechts de afstand kleiner is dan 100 mm
Backwards (100); //ga naar achter
}
}
else {
Forward (int d); //ga rechtdoor
}

return directionn;
}




}
{else if (Fdistancee < 250)

How did that happen?

well our idea was that if the distance was smaller then 10cm the robot would take a sharp turn, by rotating the left wheels to the back and the right wheels to the front (this is for a turn to the left), if the robot has found an object closer than 25cm but further than 10 cm the robot would take a turn swell but would take more space: the left wheels wouldn’t move and the right wheels go forward. Does that explain the line?
{else if (Fdistancee < 250)

You've never seen any C or C++ with a "{" followed by an "else", so I think, no, it doesn't explain that line.