Hallo,

momentan bin ich dabei mit einem Arduino Uno, eimem Motorshield, einem Servo, einem Ultraschall-Sensor und einer RP5-Chassis einen Roboter zu konstruieren.

Wenn er mein Sketch durchläuft und aur ein 10cm oder weniger entferntes Hindernis trifft, soll er stehen bleiben, den Sensor um 45° nach links und dann nach rechts, ebenfalls um 45° drehen. Dabei soll überprüft werden, in welcher Richtung kein Hindernis in 10cm auftaucht. In die Richtung drehen und weiterfahren. Also eigentlich "Standard". Der Sensor wird nach links gedreht, aber nicht nach rechts. Anbei mein Sketch, ich sehe den Fehler nicht.

Code:
#include <Servo.h>
#define echoPin 7 // Echo Pin
#define trigPin 6 // Trigger Pin

Servo myservo;

int richtungA        = 12;  //  Motor A
int richtungB        = 13;  //  Motor B
int geschwindigkeitA =  3;  // Geschwindigkeit Motor A
int geschwindigkeitB = 11;  // Geschwindigkeit Motor B
int bremseA          =  9;  // Bremse Motor A
int bremseB          =  8;  // Bremse Motor B

int geschwindigkeit = 255 ; // Geschwindigkeit der Motoren. 255 ist der Maximalwert!

int maximumRange = 200; // Maximum range needed
int minimumRange = 0; // Minimum range needed
long a, b, duration, distance; // Duration used to calculate distance

void kopflinks(){
  //Kopf links
  myservo.write(125);
  digitalWrite(trigPin, LOW); 
  delayMicroseconds(2); 
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10); 
 
 digitalWrite(trigPin, LOW);
 duration = pulseIn(echoPin, HIGH);
 b = duration/58.2;
}


void kopfrechts(){
  //Kopf rechts
  myservo.write(35);
  digitalWrite(trigPin, LOW); 
  delayMicroseconds(2); 
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10); 
 
 digitalWrite(trigPin, LOW);
 duration = pulseIn(echoPin, HIGH);
 a = duration/58.2;
  }


void setup() 
{

 myservo.attach(5);
  
  // Pins für Motorenrichtungen als Ausgang
  pinMode(richtungA, OUTPUT);
  pinMode(richtungB, OUTPUT);
  
  // Pins für Bremsen als Ausgang
  pinMode(bremseA, OUTPUT);
  pinMode(bremseB, OUTPUT);

  // Geschwindigkeiten setzen
  analogWrite(geschwindigkeitA, geschwindigkeit);
  analogWrite(geschwindigkeitB, geschwindigkeit);
  
  // Bremse an (Motoren aus)
  digitalWrite(bremseA, HIGH);
  digitalWrite(bremseB, HIGH);

  // 2 Sekunden warten nach einschalten
  delay(2000);

 //US-Sensor
 pinMode(trigPin, OUTPUT);
 pinMode(echoPin, INPUT);

 //LEDs
 pinMode(2, OUTPUT);
 pinMode(4, OUTPUT);

 //Servo 0-Position (etwas schief, daher 80°)
 myservo.write(80);

}

void loop() 
{

 digitalWrite(trigPin, LOW); 
 delayMicroseconds(2); 

 digitalWrite(trigPin, HIGH);
 delayMicroseconds(10); 
 
 digitalWrite(trigPin, LOW);
 duration = pulseIn(echoPin, HIGH);
 
 //Distanzberechnung des Ultraschall-Signals.
 distance = duration/58.2;

  
  //Distanz größer 10cm, fährt vorwärts
  if (distance > 10){
  digitalWrite(richtungA, HIGH);
  digitalWrite(richtungB, HIGH);
  digitalWrite(bremseA, LOW);
  digitalWrite(bremseB, LOW);
  digitalWrite(2, HIGH);
  digitalWrite(4, LOW);
 }

 //Distanz kleiner gleich 10cm, Bremse ein, LED wechsel und Kopf drehen.
 else if (distance <=10){

  digitalWrite(bremseA, HIGH);
  digitalWrite(bremseB, HIGH);
  digitalWrite(2, LOW);
  digitalWrite(4, HIGH);
  delay(1000);

  kopflinks();
  delay(500);
  kopfrechts();
  myservo.write(80);
  
  if (a > 10 && b <=10){
  digitalWrite(richtungA, HIGH);
  digitalWrite(richtungB, LOW);
  digitalWrite(bremseA, LOW);
  digitalWrite(bremseB, LOW);
  delay(500);
  digitalWrite(bremseA, HIGH);
  digitalWrite(bremseB, HIGH);
  digitalWrite(richtungA, HIGH);
  digitalWrite(richtungB, HIGH);
  digitalWrite(bremseA, LOW);
  digitalWrite(bremseB, LOW);
  }

  else if (a<=10 && b > 10){
  digitalWrite(richtungA, LOW);
  digitalWrite(richtungB, HIGH);
  digitalWrite(bremseA, LOW);
  digitalWrite(bremseB, LOW);
  delay(500);
  digitalWrite(bremseA, HIGH);
  digitalWrite(bremseB, HIGH);
  digitalWrite(richtungA, HIGH);
  digitalWrite(richtungB, HIGH);
  digitalWrite(bremseA, LOW);
  digitalWrite(bremseB, LOW);
  }
 }
}
Ohne Servofunktion läuft der Roboter normal.