Mit Sicherheit. Der erste Code versucht das Ding parallel zu halten.
Code:
#include <Servo.h>
Servo servoRechts;
Servo servoLinks;
long Toleranzwert = 1;
const int TRIG_PIN1 = 12;
const int ECHO_PIN1 = 13;
const int ECHO_PIN2 = 8;
const int TRIG_PIN2 = 9;
void setup() {
// initialize serial communication:
Serial.begin(9600);
pinMode(TRIG_PIN1,OUTPUT);
pinMode(ECHO_PIN1,INPUT);
pinMode(TRIG_PIN2, OUTPUT);
pinMode(ECHO_PIN2, INPUT);
servoRechts.attach(7);
servoLinks.attach(6);
}
void loop()
{
long duration1, distanceCm1;
long duration2, distanceCm2;
long Differenz;
// Give a short LOW pulse beforehand to ensure a clean HIGH pulse:
digitalWrite(TRIG_PIN1, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN1, HIGH);
delayMicroseconds(2);
digitalWrite(TRIG_PIN1, LOW);
duration1 = pulseIn(ECHO_PIN1,HIGH);
digitalWrite(TRIG_PIN2, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN2, HIGH);
delayMicroseconds(2);
digitalWrite(TRIG_PIN2, LOW);
duration2 = pulseIn(ECHO_PIN2,HIGH);
// convert the time into a distance
distanceCm1 = duration1 / 29.1 / 2 ;
// convert the time into a distance
distanceCm2 = duration2 / 29.1 / 2 ;
if (distanceCm1 <= 0){
Serial.println("Out of range");
}
else {
Serial.print(distanceCm1);
Serial.print("cm");
Serial.println();
}
if (distanceCm2 <= 0){
Serial.println("Out of range");
}
else {
Serial.print(distanceCm2);
Serial.print("cm");
Serial.println();
}
delay(500);
Differenz = abs(distanceCm2 - distanceCm1);
if(Differenz > Toleranzwert){
if(distanceCm2 > distanceCm1){
servoLinks.write(92);
servoRechts.write(90);
}
else{
servoRechts.write(89);
servoLinks.write(91);
}
Differenz = abs(distanceCm2 - distanceCm1);
}
else if (Differenz <= Toleranzwert){
servoRechts.write(90);
servoLinks.write(91);
Differenz = abs(distanceCm2 - distanceCm1);
}
}
Der zweite Code ist fürs Kurven fahren.
Code:
#include <Servo.h>
Servo servoRechts;
Servo servoLinks;
float Toleranzwert = 1;
const int TRIG_PIN1 = 12;
const int ECHO_PIN1 = 13;
const int ECHO_PIN2 = 8;
const int TRIG_PIN2 = 9;
void setup() {
// initialize serial communication:
Serial.begin(9600);
pinMode(TRIG_PIN1,OUTPUT);
pinMode(ECHO_PIN1,INPUT);
pinMode(TRIG_PIN2, OUTPUT);
pinMode(ECHO_PIN2, INPUT);
servoRechts.attach(7);
servoLinks.attach(6);
}
void loop()
{
long duration1, distanceCm1;
long duration2, distanceCm2;
long Differenz;
// Give a short LOW pulse beforehand to ensure a clean HIGH pulse:
digitalWrite(TRIG_PIN1, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN1, HIGH);
delayMicroseconds(2);
digitalWrite(TRIG_PIN1, LOW);
duration1 = pulseIn(ECHO_PIN1,HIGH);
digitalWrite(TRIG_PIN2, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN2, HIGH);
delayMicroseconds(2);
digitalWrite(TRIG_PIN2, LOW);
duration2 = pulseIn(ECHO_PIN2,HIGH);
// convert the time into a distance
distanceCm1 = duration1 / 29.1 / 2 ;
// convert the time into a distance
distanceCm2 = duration2 / 29.1 / 2 ;
if (distanceCm1 <= 0){
Serial.println("Out of range");
}
else {
Serial.print(distanceCm1);
Serial.print("cm");
Serial.println();
}
if (distanceCm2 <= 0){
Serial.println("Out of range");
}
else {
Serial.print(distanceCm2);
Serial.print("cm");
Serial.println();
}
delay(100);
if( ( distanceCm1 + distanceCm2 ) / 2 > 52) {
servoRechts.write(87);
servoLinks.write(100);
}
else if( ( distanceCm1 + distanceCm2 ) / 2 < 48) {
servoRechts.write(80);
servoLinks.write(94);
}
else {
servoRechts.write(80);
servoLinks.write(100);
}
}
Mir fehlt nur noch die Kombination. Ich hatte nicht viel Zeit und hab das parallel fahren einfach mal in die if-Schleifen kopiert und geguggt, was passiert...
Bei servoLinks.write(91) stoppt das linke Rad und bei servoRechts.write(90) stoppt das rechte Rad. Ein wert höher als 91 beim Linken dreht diesen nach vorne und ein Wert kleiner 90 dreht das rechte Rad vorwärts.
Lesezeichen