Hi Leute,
wie bereits in einem Beitrag erwähnt will ich mir eine Art Auto bauen, welches ungefähr Schuhkarton groß ist und welches eine vorgegebene Route fahren soll.
Hierbei habe ich an dieses "Auto" mehrere Buttons gebaut, sodass wenn etwas in den Weg kommt, dass das der Button auslöst und das Auto dieses Hindernis umfährt.
Hierbei habe ich ein Code (hier z.b. bei der festen Route vereinfacht dargestellt) geschrieben:
const int buttonPin3 = A3; // hinten
const int buttonPin4 = A4; // links
const int buttonPin2 = A2; // vorne
const int buttonPin1 = A1; // rechts
// variables will change:
int buttonState1 = 0;
int buttonState2 = 0;
int buttonState3 = 0;
int buttonState4 = 0;
int in1 = 6;
int in2 = 5;
int in3 = 2;
int in4 = 3;
enum CarState {
FixedProgram,
AvoidanceProgram
};
CarState currentState = FixedProgram;
void setup() {
pinMode(buttonPin1, INPUT);
pinMode(buttonPin2, INPUT);
pinMode(buttonPin3, INPUT);
pinMode(buttonPin4, INPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
}
void loop() {
// Abstandhalter
buttonState1 = digitalRead(buttonPin1);
buttonState2 = digitalRead(buttonPin2);
buttonState3 = digitalRead(buttonPin3);
buttonState4 = digitalRead(buttonPin4);
if (buttonState3 == HIGH && currentState == FixedProgram) {
currentState = AvoidanceProgram; // Wechsle zum Ausweichprogramm
}
switch (currentState) {
case FixedProgram:
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
delay(5000);
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
delay(1000);
break;
case AvoidanceProgram:
// Hier führst du das Ausweichprogramm aus
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
delay(1000);
//Drehen
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
delay(500);
//Drehen
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
delay(1000);
currentState = FixedProgram; // Wechsle zurück zum festen Programm
break;
}
}
Das Problem dabei ist, dass das Auto die vorgegebene Route fährt, aber wenn der Button auslöst nicht das Ausweichprogramm fährt, sondern einfach weiterfährt. Wenn aber der Button genau am Ende des festen Programmes drückt, dass fährt das Auto das Ausweichprogramm.
Woran liegt das und wie kann ich Abhilfe schaffen, dass das Auto immer das Ausweichprogramm durchführt und nicht nur am Ende des festen Programms (Route) ?
Über eine Antwort würde ich mich sehr freuen.
LG