const int Links = 12;
const int Rechts = 13;
const int Trigger = 20;
const int Echo = 21;
const int Fehler = 6;
const int LEDanzahl = 10;
int LEDpins[] = {
11, 10, 9, 8, 7, 6, 5, 4, 3, 2
};
int LEDstufe;
int dieseLED;
float Distanz;
bool Start = true;
bool Hinderniss = false;
bool LinksDrehen = false;
bool RechtsDrehen = false;
bool UmDrehen = false;
bool Loop = false;
bool LEDstatus = false;
long unsigned int Drehen;
long unsigned int warte;
void setup() {
Serial.begin(9600);
pinMode(Echo, INPUT);
pinMode(Trigger, OUTPUT);
pinMode(Links, OUTPUT);
pinMode(Rechts, OUTPUT);
for (dieseLED = 0; dieseLED < LEDanzahl; dieseLED++) {
pinMode(LEDpins[dieseLED], OUTPUT);
}
}
float DistanzCM() {
digitalWrite(Trigger, LOW);
delayMicroseconds(2);
digitalWrite(Trigger, HIGH);
delayMicroseconds(10);
digitalWrite(Trigger, LOW);
int Dauer = pulseIn(Echo, HIGH);
return Dauer * 0.034 / 2;
}
void loop() {
while (Start == true) {
Distanz = DistanzCM();
Serial.print("Gemessene Distanz: ");
Serial.println(DistanzCM());
LEDstufe = map(Distanz, 396, 2, 0, 10);
for (dieseLED = 0; dieseLED < LEDanzahl; dieseLED++) {
if (dieseLED < LEDstufe) {
digitalWrite(LEDpins[dieseLED], HIGH);
}
else {
digitalWrite(LEDpins[dieseLED], LOW);
}
}
if (Distanz <= 10) {
Loop = true;
warte = millis();
while (Loop == true) {
Distanz = DistanzCM();
Serial.print("Gemessene Distanz: ");
Serial.println(DistanzCM());
LEDstufe = map(Distanz, 396, 2, 0, 10);
for (dieseLED = 0; dieseLED < LEDanzahl; dieseLED++) {
if (dieseLED < LEDstufe) {
digitalWrite(LEDpins[dieseLED], HIGH);
}
else {
digitalWrite(LEDpins[dieseLED], LOW);
}
}
if (millis() - warte >= 2000) {
Loop = false;
Start = false;
Hinderniss = true;
LinksDrehen = true;
Drehen = millis();
}
}
}
if (Distanz > 10) {
digitalWrite(Links, HIGH);
digitalWrite(Rechts, HIGH);
delay(5);
digitalWrite(Links, LOW);
digitalWrite(Rechts, LOW);
delay(5);
}
}
while (Hinderniss == true) {
while (LinksDrehen == true) {
Distanz = DistanzCM();
Serial.print("Gemessene Distanz: ");
Serial.println(DistanzCM());
LEDstufe = map(Distanz, 396, 2, 0, 10);
for (dieseLED = 0; dieseLED < LEDanzahl; dieseLED++) {
if (dieseLED < LEDstufe) {
digitalWrite(LEDpins[dieseLED], HIGH);
}
else {
digitalWrite(LEDpins[dieseLED], LOW);
}
}
digitalWrite(Links, HIGH);
delay(5);
digitalWrite(Links, LOW);
delay(5);
if (millis() - Drehen >= 2500) {
Distanz = DistanzCM();
Serial.print("Gemessene Distanz: ");
Serial.println(DistanzCM());
if (Distanz <= 10) {
Loop = true;
warte = millis();
while (Loop == true) {
Distanz = DistanzCM();
Serial.print("Gemessene Distanz: ");
Serial.println(DistanzCM());
LEDstufe = map(Distanz, 396, 2, 0, 10);
for (dieseLED = 0; dieseLED < LEDanzahl; dieseLED++) {
if (dieseLED < LEDstufe) {
digitalWrite(LEDpins[dieseLED], HIGH);
}
else {
digitalWrite(LEDpins[dieseLED], LOW);
}
}
if (millis() - warte >= 2000) {
RechtsDrehen = true;
LinksDrehen = false;
Loop = false;
Drehen = millis();
}
}
}
else {
Start = true;
Hinderniss = false;
LinksDrehen = false;
}
}
}
while (RechtsDrehen == true) {
Distanz = DistanzCM();
Serial.print("Gemessene Distanz: ");
Serial.println(DistanzCM());
LEDstufe = map(Distanz, 396, 2, 0, 10);
for (dieseLED = 0; dieseLED < LEDanzahl; dieseLED++) {
if (dieseLED < LEDstufe) {
digitalWrite(LEDpins[dieseLED], HIGH);
}
else {
digitalWrite(LEDpins[dieseLED], LOW);
}
}
digitalWrite(Rechts, HIGH);
delay(5);
digitalWrite(Rechts, LOW);
delay(5);
if (millis() - Drehen >= 5000) {
Distanz = DistanzCM();
Serial.print("Gemessene Distanz: ");
Serial.println(DistanzCM());
if (Distanz <= 10) {
Loop = true;
warte = millis();
while (Loop == true) {
Distanz = DistanzCM();
Serial.print("Gemessene Distanz: ");
Serial.println(DistanzCM());
LEDstufe = map(Distanz, 396, 2, 0, 10);
for (dieseLED = 0; dieseLED < LEDanzahl; dieseLED++) {
if (dieseLED < LEDstufe) {
digitalWrite(LEDpins[dieseLED], HIGH);
} else {
digitalWrite(LEDpins[dieseLED], LOW);
}
}
if (millis() - warte >= 2000) {
UmDrehen = true;
RechtsDrehen = false;
Loop = false;
Drehen = millis();
}
}
}
else {
Start = true;
Hinderniss = false;
RechtsDrehen = false;
}
}
}
while (UmDrehen == true) {
Distanz = DistanzCM();
Serial.print("Gemessene Distanz: ");
Serial.println(DistanzCM());
LEDstufe = map(Distanz, 396, 2, 0, 10);
for (dieseLED = 0; dieseLED < LEDanzahl; dieseLED++) {
if (dieseLED < LEDstufe) {
digitalWrite(LEDpins[dieseLED], HIGH);
} else {
digitalWrite(LEDpins[dieseLED], LOW);
}
}
digitalWrite(Rechts, HIGH);
delay(5);
digitalWrite(Rechts, LOW);
delay(5);
if (millis() - Drehen >= 2500) {
Distanz = DistanzCM();
Serial.print("Gemessene Distanz: ");
Serial.println(DistanzCM());
if (Distanz <= 10) {
Loop = true;
LEDstatus = false;
warte = millis();
}
while (Loop == true) {
Distanz = DistanzCM();
Serial.print("Gemessene Distanz: ");
Serial.println(DistanzCM());
if (Distanz > 10) {
Start = true;
LEDstatus = false;
Loop = false;
UmDrehen = false;
Hinderniss = false;
}
if ((millis() - warte >= 500) && (Distanz <= 10)) {
Distanz = DistanzCM();
Serial.print("Gemessene Distanz: ");
Serial.println(DistanzCM());
for (dieseLED = 0; dieseLED < LEDanzahl; dieseLED++) {
digitalWrite(LEDpins[dieseLED], LEDstatus);
}
LEDstatus = !LEDstatus;
warte = millis();
}
}
}
}
}
}