Heyho,
Ich bastel an einem 6-beinigen Laufroboter und bekomme ein kleines Problem einfach nicht gelöst...
Zum vorwärts gehen wird eine while-Schleife angeregt, in der ein switch-case die jeweiligen schritte zur Fortbewegung abgearbeitet werden. An einem gewissen Punkt soll dann entschieden werden ob er weiter läuft oder stehen bleibt. Diese Entscheidung funktioniert aber irgendwie nicht...
void loop() {
CheckRadio(); //Empfängt Daten der Fernbedienung
CheckVolts(); //Akku Spannungsüberwachung
StandHIGH(); //Still stehen
while (buttonState == 101) { //nach vorne
UPHIGH();
}
Im loop werden die Bewegungsabläufe aufgerufen
void CheckRadio() { //Befehle empfangen
if (radio.available()) {
radio.read( &buttonState, sizeof(buttonState));
} else {
buttonState = 0;
}
}
Im CheckRadio() wird abgefragt welche Taste auf der Fernbedienung gedrückt wird. Falls keine, soll sich der kleine die " 0 " merken damit der buttonState immer eine klare definition hat.
Gesendet und empfangen werden die Daten über ein NRF24L01 Modul mit einer Bibliothek.
Also gut: wir bekommen den buttonState 101 und die "void UPHIGH()" wird durchgeführt.
void UPHIGH() {
switch (Zustand) {
case 0: //Bein 2, 4, 6 heben
case 1: //drehen
case 2: //Bein 2, 4, 6 senken
case 3: //Bein 1, 3, 5 heben
case 4: //drehen
case 5:
CheckRadio();
if (buttonState == 0) {
Zustand = 6;
}
if (buttonState == 101) {
Zustand = 60;
}
break;
case 6:
case 7:
Ende kleiner Schritt
case 60:
weiter mit großen Schritt
case ...
Case 0-4 hab ich geleert damit es nicht so übersichtlich wird.
In case 5 soll nun entschieden werden ob er weiter nach vorne gehen soll oder stehen bleibt indem geguckt wird ob die Taste für nach Vorne gehen weiterhin gedrückt wird oder nicht.
Es wird immer das ausgeführt was bei buttonState 101 steht. In diesem Fall Zustand 60, also der große Schritt. Wenn in der if-Bedingung Zustand 6 anstatt 60 steht, wird der kleine Schritt ausgeführt.
Der buttonState 0 wird also nie ausgeführt. Ich denke in der void CheckRadio() wird der buttonState 0 nicht richtig erkannt sobald keine Taste gedrückt wird.
Durch wildes ausprobieren hab ich leider keine Lösung finden können....
Sollte mehr vom Code benötigt werden, stelle ich ihn natürlich gerne zur Verfügung.
Viele Grüße,
Philipp und schon mal danke für die Mühen ![]()