Das Problem ist, das sich nur die Räder auf der Linken Seite drehen. Mit einem anderen Sketch(per Bluetooth gesteuert), funktioniert alles einwandfrei.Pins zum ansteuern der Räder usw. sind dort natürlich alle gleich belegt. Ich denke ich habe irgendeinen Fehler im Code.
// Importieren der benötigten Bibliothek
#include <Servo.h> //servo library
Servo myservo; // Servoobjekt zur Steuerung des Servos erstellen
// Definieren der Konstanten für Trigger und Echo
int Echo = A0; // Ultraschallsensor
int Trig = A1;
int servoPin = 3; // Servo
int ENA = 10; //Linke Räder
int LWB = 9;
int LWV = 8;
int ENB = 5; // Rechte Räder
int RWB = 7;
int RWV = 6;
int SPEED = 255; //Geschwindigkeit 255 ist das Höchste
int rightDistance = 0;
int leftDistance = 0;
int middleDistance = 0 ;
void setup() {
Serial.begin(9600); //Open the serial port and set the baud rate to 9600
myservo.attach(servoPin); // Servo an Pin 3 an Servoobjekt anschließen
myservo.write(83); // set Servo Middle-Position
/*Set the defined pins to the output*/
pinMode(LWB, OUTPUT);
pinMode(LWV, OUTPUT);
pinMode(RWB, OUTPUT);
pinMode(RWV, OUTPUT);
pinMode(ENA, OUTPUT);
pinMode(ENB, OUTPUT);
pinMode(Echo, INPUT);
pinMode(Trig, OUTPUT);
delay(100);
}
/*Ultrasonic distance measurement Sub function*/
int Distance_test() {
digitalWrite(Trig, LOW);
delayMicroseconds(2);
digitalWrite(Trig, HIGH);
delayMicroseconds(20);
digitalWrite(Trig, LOW);
float Fdistance = pulseIn(Echo, HIGH);
Fdistance = Fdistance / 58;
return (int)Fdistance;
}
void _moveforward() {
analogWrite(ENA, SPEED);
analogWrite(ENB, SPEED);
digitalWrite(LWB, LOW);
digitalWrite(LWV, HIGH);
digitalWrite(RWB, LOW);
digitalWrite(RWV, HIGH);
Serial.println("Move forward");
}
void _moveback() {
analogWrite(ENA, SPEED);
analogWrite(ENB, SPEED);
digitalWrite(LWB, HIGH);
digitalWrite(LWV, LOW);
digitalWrite(RWB, HIGH);
digitalWrite(RWV, LOW);
Serial.println("Move back");
}
void _turnright() {
analogWrite(ENA, SPEED);
analogWrite(ENB, SPEED);
digitalWrite(LWB, LOW);
digitalWrite(LWV, HIGH);
digitalWrite(RWB, HIGH);
digitalWrite(RWV, LOW);
Serial.println("Turn left");
}
void _turnleft() {
analogWrite(ENA, SPEED);
analogWrite(ENB, SPEED);
digitalWrite(LWB, HIGH);
digitalWrite(LWV, LOW);
digitalWrite(RWB, LOW);
digitalWrite(RWV, HIGH);
Serial.println("Turn right");
}
void _Stop() {
digitalWrite(ENA, LOW);
digitalWrite(ENB, LOW);
Serial.println("Stop");
}
void loop() {
myservo.write(83); //setservo position according to scaled value
delay(200);
SPEED = 150;
middleDistance = Distance_test();
Serial.print("MiddleDistance = ");
Serial.println(middleDistance);
if (middleDistance <= 20) {
_Stop();
delay(500);
myservo.write(3);
delay(1000);
rightDistance = Distance_test();
Serial.print("RightDistance = ");
Serial.println(rightDistance);
delay(500);
myservo.write(163);
delay(1000);
leftDistance = Distance_test();
Serial.print("LeftDistance = ");
Serial.println(leftDistance);
delay(500);
myservo.write(83);
delay(700);
if (rightDistance > leftDistance) {
_turnleft();
delay(200);
}
else if (rightDistance < leftDistance) {
_turnright();
delay(200);
}
else if ((rightDistance <= 20) || (leftDistance <= 20)) {
_moveback();
delay(300);
}
else {
_moveforward();
}
}
else {
_moveforward();
}
}
Hoffe jemand kann mir weiter Helfen.