https://www.roboternetz.de/phpBB2/ze...er=asc&start=0
vielleicht hilft dir das weiter..
Hallo erstmal.
Ich weiß, dass dieses Thema hier schon des öfteren angesprochen wurde, aber die Suchfunktion hat leider keine Threads gefunden, die mir weiterhelfen.
Und zwar gehts um folgendes:
Ich möchte ein ganz einfaches Programm schreiben, mit dem der Asuro solange geradeaus fährt (Natürlich ohne Hilfe der Lichtschranken, es soll ja ein simples Programm sein.), bis er mit den Kollisionstastern irgendwo anstösst. Wenn das passiert, soll er kurz rückwärts fahren, eine 90°-Drehung machen, und dann wieder weiter geradeaus fahren, bis er wieder irgendwo gegenfährt. Ihr müsst wissen, dass ich noch ein totaler Anfänger im programmieren bin! Ich kam in letzter Zeit nicht oft dazu, mich um meinen Asuro zu kümmern.
Meine Frage: Wie muss dieses Programm ungefähr aussehen?
https://www.roboternetz.de/phpBB2/ze...er=asc&start=0
vielleicht hilft dir das weiter..
MfG
IC
hallo James C.
hier einmal nur wie es vom aufbau her aussehen könnte
den code dazu musst du nun selber schreiben, wenn du hilfe braucht melde dich einfachCode:int main() { while(1) //endlosschleife { if(keinen taster gedrückt) { //gerade aus fahren (zb. MotorDir(FWD,FWD); MotorSpeed(200,200);) } else { //drehung (zb. MotorDir(RWD,RWD); MotorSpeed(0,150);) //best. zeit warten, richtet sich nach der geschwindigkeit, um 90° zu drehen } } }
ich hoffe, das hat dir weitergeholfen
mfg hai1991
P.S.: wer großbuchstaben oder rechtschreibfehler findet darf sie behalten
Danke für eure Antworten!
Also ich habe jetzt mal dieses Programm Angefangen:
Ich glaube der Aufbau ist völlig falsch, aber ich kann das noch nicht so beurteilen, ich bin wie gesagt ein totaler Anfänger.Code:#include "asuro.h" int main(void) { Init(); while(1) { if(keinen taster gedrückt) { MotorDir(FWD,FWD); MotorSpeed(150,170); StatusLED(GREEN); BackLED(ON,ON); FrontLED(ON); } else { MotorDir(RWD,RWD) MotorSpeed(150,170) } } }
Also ich weiß noch nicht, welchen Befehl ich brauche für "keinen Taster gedrückt", deshalb steht da noch nichts in der "if-klammer". Das mit den Pausen weiß ich auch gerade nicht, deshalb stehen nach "else" nur die beiden Befehle fürs Rückwärtsfahren.
Habe ich bereits Fehler in dem Code? Und was muss ich für "keinen Taster gedrückt" einsetzen, und wie lautet der Befehl für eine Pause?
wenn du die Pause nicht rein machst, fährt der Asuro so lange rückwärts bis die Taster nicht mehr gedrückt sind und fährt dann sofort wieder vorwärts.
mfg liggi
Lieber am Asuro rumschrauben als alles andere.
Meine Homepage
Zur Abfrage der Taster gibt es die Funktion PollSwitch().
Diese liefert aber leider nicht immer zuverlässige Werte und sollte daher zur Sicherheit mehrfach hintereinander aufgerufen werden.
Such hier einfach mal nach "PollSwitch", dann findest du genügend Beispiele für die richtige Verwendung dieser Funktion.
Hallo!
Also ich habe jetzt mithilfe von älteren Beiträgen hier und der Anleitung folgendes Programm geschrieben:
Jedoch macht mein Asuro nicht das was er tun sollCode:#include "asuro.h" int main(void) { Init(); if (PollSwitch()==0) { MotorDir(FWD,FWD); MotorSpeed(150,170); BackLED(ON,ON); FrontLED(ON); StatusLED(GREEN); } else { MotorDir(FWD,FWD); MotorSpeed(0,0); StatusLED(RED); } while(1); return 0; }
Also er soll ja solange geradeaus fahren, bis ein Taster akitviert wird. Dann soll er stehen bleiben. Das mit dem Rückwärtsfahren und der 90° Drehung habe ich jetzt noch nicht eingebaut, das kommt dann, wenn dieses Programm funktioniert.
Also Schreibfehler und sowas sind nicht drin, das Promgramm lies sich ohne irgendwelche Errors konvertieren.
Was ist an dem Programm falsch?
hallo
du must das ganze if- else in eine while(1)-endlosschleife setzen.
ansonsten wird die abfrage nur einmal durchgeführt und im while(1); das danach folgt bleibt der prozessor "stecken" (dies ist aber so gewollt)
schau einfach einmal meinen aufbau im früheren post an, dann müsste dir klar sein, was ich meine
mfg hai1991
P.S.: wer großbuchstaben oder rechtschreibfehler findet darf sie behalten
Dein Programm ist schon mal gar nicht übel! Das einzige Problem dabei: die Taster werden nur ein einziges mal abgefragt. Wenn dabei keiner gedrückt ist, fährt der Asuro einfach immer weiter.
Pack das Ganze in eine Endlosschleife und schon passt es:
Code:#include "asuro.h" int main(void) { Init(); while(1) { if (PollSwitch()==0) { MotorDir(FWD,FWD); MotorSpeed(150,170); BackLED(ON,ON); FrontLED(ON); StatusLED(GREEN); } else { MotorDir(FWD,FWD); MotorSpeed(0,0); StatusLED(RED); } } return 0; }
Danke für deine Antwort hai,
ich habe jetzt dieses Programm geschrieben:
while(1) ist nun am Anfang und umschließt if und else.Code:#include "asuro.h" int main(void) { Init(); while(1) { if (PollSwitch()==0) { MotorDir(FWD,FWD); MotorSpeed(150,170); BackLED(ON,ON); FrontLED(ON); StatusLED(GREEN); } else { MotorDir(FWD,FWD); MotorSpeed(0,0); StatusLED(RED); } return 0; } }
Es funktioniert schon etwas besser als das vorherige Programm, allerdings Reagiert der Asuro nun bei einem Gedrückten Kollisionstaster überhaupt nicht, und fährt einfach weiter.
Wo liegt nun das Problem?
Lesezeichen