diff --git a/Doku/CodeRacer_Rechnung_114378.pdf b/Doku/CodeRacer_Rechnung_114378.pdf new file mode 100644 index 0000000..5be89a4 Binary files /dev/null and b/Doku/CodeRacer_Rechnung_114378.pdf differ diff --git a/Doku/Coderace.pptx b/Doku/Coderace.pptx new file mode 100644 index 0000000..424f21f Binary files /dev/null and b/Doku/Coderace.pptx differ diff --git a/Doku/blink_esp32.JPG b/Doku/blink_esp32.JPG new file mode 100644 index 0000000..28cb9f1 Binary files /dev/null and b/Doku/blink_esp32.JPG differ diff --git a/Doku/coderace.docx b/Doku/coderace.docx new file mode 100644 index 0000000..0ed8da4 Binary files /dev/null and b/Doku/coderace.docx differ diff --git a/Doku/coderace.pdf b/Doku/coderace.pdf new file mode 100644 index 0000000..2813384 Binary files /dev/null and b/Doku/coderace.pdf differ diff --git a/Doku/coderace2.docx b/Doku/coderace2.docx new file mode 100644 index 0000000..52411b7 Binary files /dev/null and b/Doku/coderace2.docx differ diff --git a/Doku/coderace2.pdf b/Doku/coderace2.pdf new file mode 100644 index 0000000..6b6cd7e Binary files /dev/null and b/Doku/coderace2.pdf differ diff --git a/Doku/coderace3.pdf b/Doku/coderace3.pdf new file mode 100644 index 0000000..8ecdd24 Binary files /dev/null and b/Doku/coderace3.pdf differ diff --git a/Doku/coderace4.docx b/Doku/coderace4.docx new file mode 100644 index 0000000..5187a56 Binary files /dev/null and b/Doku/coderace4.docx differ diff --git a/Doku/coderace_background.pdf b/Doku/coderace_background.pdf new file mode 100644 index 0000000..02f0c2a Binary files /dev/null and b/Doku/coderace_background.pdf differ diff --git a/coderacercode.ppt b/coderacercode.ppt index 9fa1df2..ea1ecac 100644 Binary files a/coderacercode.ppt and b/coderacercode.ppt differ diff --git a/esp32_coderacer.zip b/esp32_coderacer.zip new file mode 100644 index 0000000..e4103f8 Binary files /dev/null and b/esp32_coderacer.zip differ diff --git a/esp32_coderacer/esp32_coderacer.ino b/esp32_coderacer/esp32_coderacer.ino index 365b532..4b0308f 100644 --- a/esp32_coderacer/esp32_coderacer.ino +++ b/esp32_coderacer/esp32_coderacer.ino @@ -4,11 +4,15 @@ #include "esp32-hal-ledc.h" //----- Werte für den Ultraschallsensor ----- -#define US_STOP_ABSTAND_CM 15 // Wenn der gemessene Abstand kleiner ist, hält der CodeRacer an +#define US_STOP_ABSTAND_CM 20 // Wenn der gemessene Abstand kleiner ist, hält der CodeRacer an +#define US_MIN_ABSTAND_LI_RE 8 // Wenn der Unterschied zwischen linkem und und rechtem Abstand kleiner ist, dann drehe in dieselbe Richtugn wie vorher weiter +#define MAX_ANZAHL_DREHUNGEN 10 // Wenn der Coderacer sich schon so oft gedreht hat ohne eine Stelle zu finden, wo es Platz gibt - fahren wir mal ein Stück rückwärts ... //----- Variablen, die wir brauchen um uns Werte zu merken ---- long abstand_vorn_cm, abstand_links_cm, abstand_rechts_cm; - +enum drehrichtung {links=0, rechts}; +drehrichtung drehung = links; +unsigned int anzahl_drehung = 0; CodeRacer coderacer; //---- Hier startet der Code zum Einstellen aller wichtigen Dinge. Setup() wird einmal ausgeführt. ---- @@ -24,6 +28,9 @@ void setup() { coderacer.servo_rechts(); delay(10); coderacer.servo_mitte(); + + anzahl_drehung = 0; + drehung = links; } @@ -53,26 +60,66 @@ void loop() { coderacer.servo_rechts(); // Abstand messen und merken. abstand_rechts_cm = coderacer.abstand_messen(); - - // Welcher Abstand ist größer? - if(abstand_links_cm > abstand_rechts_cm){ - // Links ist mehr Platz! - coderacer.links(); - // Servo in die Mitte Stellen - coderacer.servo_mitte(); + + + // Ist der Abstand links oder rechts groß genug genug? + // Wenn nicht - wenn der Racer sich bisher noch nicht gedreht hat - fahre ein Stück rückwarts. Wenn der Racer sich gerade schon gedreht hat, drehe in dieselbe Richtung wie vorher. + if((abstand_links_cm < US_MIN_ABSTAND_LI_RE) && (abstand_rechts_cm < US_MIN_ABSTAND_LI_RE)){ + if(anzahl_drehung == 0){ + coderacer.rueckwaerts(); + delay(300); + coderacer.anhalten(); + //noch mal Abstand messen ... + coderacer.servo_links(); + // Abstand messen und merken. + abstand_links_cm = coderacer.abstand_messen(); + // Nach rechts schauen! + coderacer.servo_rechts(); + // Abstand messen und merken. + abstand_rechts_cm = coderacer.abstand_messen(); + } + if( anzahl_drehung > MAX_ANZAHL_DREHUNGEN ){ + anzahl_drehung = 0; + } else { + anzahl_drehung ++; + } } - else{ - // Rechts ist mehr Platz! - coderacer.rechts(); - // Servo in die Mitte Stellen - coderacer.servo_mitte(); + + // wenn der Racer sich noch nicht gedreht hat (anzahl_drehung == 0) - oder gerade rückwärts gefahren ist (anzahl_drehung == 1) drehe jetzt dahin wo mehr Platz ist; + if(anzahl_drehung <= 1){ + // Welcher Abstand ist größer? + if(abstand_links_cm > abstand_rechts_cm){ + // Links ist mehr Platz! + drehung = links; + } + else{ + // Rechts ist mehr Platz! + drehung = rechts; + } + } + + switch(drehung){ + case links: + coderacer.links(); + coderacer.servo_mitte(); + break; + case rechts: + coderacer.links(); + coderacer.servo_mitte(); + break; } } else{ // Ja! Die Bahn ist frei + // Wenn die Bahn richtig frei ist, dann können wir den Zähler fürs drehen auf 0 setzen ... + if( abstand_vorn_cm > (US_STOP_ABSTAND_CM + US_MIN_ABSTAND_LI_RE)){ + anzahl_drehung = 0; + } coderacer.vorwaerts(); } + } else { + anzahl_drehung = 0; } }