Dein Glück, dass ich gerade Langeweile hatte... da kam mir dein Problem gerade recht
Also, ich würde dir 3 Sachen raten:
1. Quelltext kommentieren.
Entgegen der landläufigen Meinung, man kommentiere nur für andere, ist es sehr hilfreich sich mit Kommentaren Notizen in den Quelltext zu schreiben. Wozu dient die Quellcodepassage? Erläuterungen etc...
2. In Funktionen denken
Programmteile, die wiederholt vorkommen, in Funktionen packen.
3. Sprechende Variablen
Variablen- und Funktionsnamen möglichst nach ihrer konkreten Anwendung benennen.
Das mag erstmal komisch klingen als Antwort auf dein konkretes Problem. Aber durch diese simplen 'Regeln' wird dein Quellcode sehr viel lesbarer und die Probleme werden sehr viel leichter erkennbar.
Ich hab deinen Code mal umgeschrieben, um am Beispiel zu zeigen, was ich meine:
Da ich kein Asuro besitze, kann ich den Code nicht testen, aber ich bin sicher, falls ich Fehler gemacht habe, wirst du sie leicht finden.Code:#include "asuro.h" // Ausgabe einer Integer-Variablen void printInt(int wert) { char text[6] = {0}; itoa(wert, text, 10); SerWrite(text, strlen(text)); } // Tastenabfrage mit Entprellung // fragt Hindernistaster ab unsigned char isHindernis() { return PollSwitch() || PollSwitch() || PollSwitch(); } // Richtungen definieren enum Richtung {LINKS, RECHTS}; // Drehung um 90 Grad void drehen(char richtung) { if (richtung == LINKS) { MotorDir(RWD, FWD); } else { MotorDir(FWD, RWD); } MotorSpeed(120, 120); for (i = 1; i < 120; i++) {Sleep(255);} } // kurzes Stück rückwärts fahren void zuruecksetzen() { MotorDir(RWD, RWD); MotorSpeed(120, 120); for (i = 1; i < 80; i++) {Sleep(255);} } void geradeausfahren() { MotorDir(FWD, FWD); MotorSpeed(150, 150); } int main(void) { Init(); int gefahreneStrecke; int i; // Endlosschleife (loop) while(1) { // Los gehts! geradeausfahren(); // solange fahren, bis Hindernis detektiert while (!isHindernis() ) { } // Aha, ein Hindernis! zuruecksetzen(); drehen(RECHTS); geradeausfahren(); // solange fahren, bis Hindernis detektiert oder Mindestentfernung zurückgelegt gefahreneStrecke = 0; while (!isHindernis() && gefahreneStrecke <= 30) { gefahreneStrecke++; } // Mindestentfernung zurückgelegt? if (gefahreneStrecke > 30) { // loop neu starten continue; } // Aha, rechts ist eine Wand! zuruecksetzen(); drehen(LINKS); // 90° drehen drehen(LINKS); // 90° drehen -> 180° gedreht geradeausfahren(); // solange fahren, bis Hindernis detektiert oder Mindestentfernung zurückgelegt gefahreneStrecke = 0; while (!isHindernis() && gefahreneStrecke <= 30) { gefahreneStrecke++; } // Mindestentfernung zurückgelegt? if (gefahreneStrecke > 30) { // loop neu starten continue; } // Aha, links ist auch eine Wand! // Also Sackgasse gefunden zuruecksetzen(); // drehen Richtung Ursprung drehen(LINKS); } return 0; }








Zitieren


Lesezeichen