Programm für selbstfahrenden Roboter
/ ENA ENB IN1 IN2 IN3 IN4 was passiert
// HIGH HIGH HIGH LOW LOW HIGH vorwärts
// HIGH HIGH LOW HIGH HIGH LOW rückwärts
// HIGH HIGH LOW HIGH LOW HIGH nach links drehen
// HIGH HIGH HIGH LOW HIGH LOW nach rechts drehen
// HIGH HIGH LOW LOW LOW LOW stoppen
IN1 – die linken Räder fahren vorwärts
IN2 – die linken Räder fahren rückwärts
IN3 – die rechten Räder fahren rückwärts
IN4 – die rechten Räder fahren vorwärts
#include //Bibliothek mit Befehlen zum ansteuern des Servo hinzufügen
Servo servoblau; //Variable für den Servo deklarieren
//int -> gibt einem Pin einen anderen Namen
int entfernung=0;
long messung=0;
int echoPin=A4;
int triggerPin=A5;
long messung160=0;
long messung40=0;
long messung100=0;
int test = 0;
#define ENA 5
#define ENB 6
#define IN1 7
#define IN2 8
#define IN3 9
#define IN4 11
void setup() {
// put your setup code here, to run once:
Serial.begin(9600); // Serielle Kommuntikation starten
pinMode(triggerPin, OUTPUT); //der Pin soll ein Signal abgeben, also OUTPUT
pinMode(echoPin, INPUT); // mit dem Pin wird die Messung aufgenommen, also INPUT
servoblau.attach(3);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
pinMode(ENA, OUTPUT);
pinMode(ENB, OUTPUT);
}
void loop() {
//Messung mit dem Ultraschallsensor:
digitalWrite(triggerPin, LOW);
delayMicroseconds(2);
digitalWrite (triggerPin, HIGH); //Messung wird gestartet
delay (10);
digitalWrite(triggerPin, LOW);
messung = pulseIn(echoPin, HIGH); // die Messung soll empfangen werden
entfernung = (messung/2) / 29;//die Messung wird unter Variable "entfernung" in cm gespeichert
Serial.println (entfernung);// die entfernung wird auf dem Seriellen Monitor angezeigt
delay (60);
vorwaerts();
if (entfernung <= 50)//Wenn etwas näher als 51cm vor dem sensor ist passiert Folgendes:
{
stopp();//Mit dem Befehl wir der Code aus void stopp eingefügt
delay(1000);
servoblau.write(180); //Position 2 ansteuern mit dem Winkel 180°
delay(1000);
// Messung mit dem Ultraschallsensor:
digitalWrite(triggerPin, LOW);
delayMicroseconds(2);
digitalWrite (triggerPin, HIGH);
delay (10);
digitalWrite(triggerPin, LOW);
messung160 = pulseIn(echoPin, HIGH)/58;//die Messung wird unter Variable "messung160" in cm gespeichert
Serial.println(messung160);
servoblau.write(20); //Position 3 ansteuern mit dem Winkel 40°
delay(1000);
delayMicroseconds(2);
digitalWrite (triggerPin, HIGH);
delay (10);
digitalWrite(triggerPin, LOW);
messung40 = pulseIn(echoPin, HIGH)/58;//die Messung wird unter Variable "messung40" in cm gespeichert
Serial.println(messung40);
servoblau.write(100); //Position 4 ansteuern mit dem Winkel 100°
delay(1000);//
delayMicroseconds(2);
// Messung mit dem Ultraschallsensor:
digitalWrite (triggerPin, HIGH);
delay (10);
digitalWrite(triggerPin, LOW);
messung100 = pulseIn(echoPin, HIGH)/58;//die Messung wird unter Variable "messung40" in cm gespeichert
Serial.println(messung100);
delay(1000);
//Es wird überprüft, ob die Messung160 größer ist als die Messung40
if ( messung40 //wenn messung100 am grössten ist:
if(messung100>messung160){
links();
delay(550);
vorwaerts();
}//Code aus void vorwaerts wird eingefügt
}
if(messung40 {//wenn 160 Grad am grössten ist
if(messung160>messung100){
links();
delay(280);
vorwaerts();
}
}
if (messung100 { //wenn 40 Grad am grössten ist
if(messung40>messung160){
rechts();
delay(280);
vorwaerts();
}
}
}
}
void stopp(){
digitalWrite(ENA,HIGH);
digitalWrite(ENB,HIGH);
digitalWrite(IN1,LOW);
digitalWrite(IN2,LOW);
digitalWrite(IN3,LOW);
digitalWrite(IN4,LOW);
})
)
){>
void vorwaerts(){
digitalWrite(ENA,HIGH);
digitalWrite(ENB,HIGH);
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);
}
void links(){
digitalWrite(ENA,HIGH);
digitalWrite(ENB,HIGH);
digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH);
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);
}
void rechts(){
digitalWrite(ENA,HIGH);
digitalWrite(ENB,HIGH);
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);
digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW);
}
//von Mathias, Dominik, Lukas S., Lukas H., Max, Jakob