Was macht dein Programm?
Ich habe ein Problem mit einem selbst geschriebenen Übungsprogramm.
eigentlich solte mein ich einen Schalter drücke ein Motor ausschalten und sich
die Status Anzeigen verändern. Könnt ihr mal schauen wo das Problemm liegt und es mir erklären.
danke im Vorraus. ; )
Code:#include "asuro.h" int main(void) { Init(); MotorDir(FWD,FWD); MotorSpeed(250,250); StatusLED(GREEN); FrontLED(OFF); BackLED(OFF,OFF); { while (PollSwitch()==0) { { MotorDir(FWD,FWD); MotorSpeed(200,0); StatusLED(YELLOW); FrontLED(OFF); Sleep(255); BackLED(ON,ON); while(1); } } } while(1); return 0; }
Was macht dein Programm?
hey
so sollte es funktionieren !!!
hast n par while zu viel drin
Code:#include "asuro.h" int main(void) { Init(); while (1) { if (POllswitch==0){ MotorDir(FWD,FWD); MotorSpeed(200,0); StatusLED(YELLOW); FrontLED(OFF); Sleep(255); BackLED(ON,ON); } else{ MotorDir(FWD,FWD); MotorSpeed(250,250); StatusLED(GREEN); FrontLED(OFF); BackLED(OFF,OFF); } } return 0; }
es soll nur mit einem Rad fahren wenn ein Taster gedrückt ist .Zitat von Hubert.G
Zitat von listner
Es ist mir schon klar das ich einfach if nehmen könnte aber ich übe
mich gerade mit dem Programmieren und im übungsheft des Asuros Steht
ein Programm und ich wolte nach dessen Vor bild ein Programm schreiben .
Hier ist mal das Programm : (Danke das du dich bemüht hast )
Code:9.1.5. Schleifen Schleifen dienen dazu, Anweisungen mehrmals auszuführen. In der “while”-Schleife wird eine Bedingung ausgewertet. Ist die Bedingung wahr, so wird der Anweisungsblock ausgeführt und die Bedingung erneut geprüft, bis diese falsch wird. Dannach wird das Programm hinter dem Anweisungsblock fortgesetzt. while( Bedingung) Anweisungsblock Beispiel: #include “asuro.h” int main(void) { Init () MotorDir(FWD,FWD); // Beide Motoren auf vorwärts MotorSpeed(120,120); // Beide Motoren etwa halbe Kraft voraus StatusLED(GREEN); // Status-Leuchtdiode auf grün schalten while (PollSwitch()==0) { // Solange keine Kollision erfolgte... SerWrite(“Alles OK!\n”,10); // ... Euphorie verbreiten } MotorSpeed(0,0); // Kollision! Sofort anhalten! StatusLED(RED); // Statusleuchtdiode rot schalten while (1) { SerWrite(“Aua!\n”,5); // und weinen! } }
Ich wollte wissen was dein Programm macht, nicht was es machen soll.
Ich nehme mal an das es nicht auf die Taste reagiert.
es ist so wenn ich die Taste von anfang die Taste drücke dreht nur ein RadZitat von Hubert.G
und wenn nicht drehen beide räder und selbst wenn ich die Taste wider los
lasse dreht nur ein Rad undsonst reagiert er nicht auf tasten
Damit hast du dir die Antwort ja schon selbst gegeben.
Du startest, die Motoren drehen, Taste nicht gedrückt, und damit läuft es in das letzte while und kann nicht mehr heraus.
Wenn du die Taste gedrückt hast, läuft nur ein Motor, dann wieder in das while usw.
Du musst die Programmteile so anlegen, das sie immer wieder durchlaufen werden.Code:#include "asuro.h" int main(void) { Init(); while (1){ MotorDir(FWD,FWD); MotorSpeed(250,250); StatusLED(GREEN); FrontLED(OFF); BackLED(OFF,OFF); while (PollSwitch()==0) { MotorDir(FWD,FWD); MotorSpeed(200,0); StatusLED(YELLOW); FrontLED(OFF); Sleep(255); BackLED(ON,ON); } return 0; }
Das if von "listner" finde ich besser lesbar.
GennauZitat von Martinius11
Von anfang an kriegt er das commando "volle fahrt voraus"
Wenn du von anfang einer taster eindruckt wird er nicht in dem ersten while-schleife gehen weil Pollswitch nicht gleich 0 ist. Aber dan kommt er in dem dritten while-schleife (am ende, gleich vor "return 0;" )wo er "immer nichts" macht. Also, geht er immer mit voller fahrt voraus.
Wenn du keiner taster eindruck gebt, geht er in die erste while-schleife. In diesen ersten while-schleife muss er forwärts fahren aber mit dem rechter motor im stillstand. Also geht er rund. Am ende diesen while-schleife steht noch einer 'immer nichts' while-schleife. (der zweite, aber auf einer niedriger niveau) Also bleibt er da immer stecken in seiner rundgang auf die stelle. Er reagiert auch nicht mehr auf einer spätere taster eindruck weil er beim "immer nichts" auch kein tastermessungen macht.
Listner hat dein program gut bearbeitet, leider nur mit ein schreibfehler ... das nicht compiliert wird. [-X![]()
also wenn ich will das er es öffters ausführt muss ich hinter return eine
größere Zahl setzen.
oder und listener hat wirklich gute ideen aber ich wills halt zur übung mit while for do etc. machen .
Grossen Dank an Alle
euer Martinius
Lesezeichen