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.
Lesezeichen