PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Kreise fahren mit leuchtenden LED's



duronus
06.02.2007, 15:58
Hallo miteinander

Wir haben ein kleines Programm geschrieben, womit wir mit dem Asuro einen Kreis fahren können. Sobald mann einen Taster drückt, macht der Asuro einen Kreis in die andere Richtung. (Die Motorleistung einfach umgekehrt).

Soweit funktionierte alles gut.

Als nächstes haben wir versucht, dass der Asuro beim nächsten (dritten mal) Tasterdruck stehen bleibt.

Das funktionierte leider nicht.

Dazu haben wir versucht, dass immer das BackLED leuchtet, bei dem die Motorleistung höher ist. Und am Schluss leuchtet die FrontLED und die BackLED's schalten aus.

Auch dass funktionierte leider nicht wie geplant.

Ein BackLED leuchtet immer, obwohl wir alles mit den BackLED's aus dem Programm entfernt haben.

So hatten wir es, leider funktionierte es nicht wie gewünscht.

#include "asuro.h"
int main(void)
{
Init();
MotorDir(RWD,RWD);
MotorSpeed(200,100);
BackLED(ON,OFF);

while (PollSwitch()==0)
{
SerWrite("Ich fahre im Kreis!\n",19);
}
BackLED(OFF,ON)
MotorSpeed(100,200);
StatusLED(RED);

while (PollSwitch()==0)
{
SerWrite("Kollision!\n",10);
MotorSpeed(0,0);
}
}


Falls jemand eine Lösung oder einen Tipp hat, wären wir sehr dankbar.


Grüsse

Duronus

ps. Wir haben es noch nicht hingekriegt, dass der ASURO einfach einer Linie folgen kann. Hat jemand ein einfaches kurzes Programm, wobei der ASURO einer Linie folgen sollte?

Vielen Dank

damaltor
06.02.2007, 16:13
linienverfolgung steht gut in der anleitung beschreiben. geht mal euer programm nacheinander durch:
(das nächste mal benutzt bitte den "code" button, um euren code einzufügen)

zu beginn kommt Init, und die motoren werden eingeschaltet. in einer endlosschleife wird während der fahrt "Ich fahre im Kreis" gesendet. soewit so gut.

dann wird die motordrehzahl umgedreht, und die statusled wird rot. und dann wird in einer endlosschleife die motorleistung abgeschaltet.... warum? eigentlich sollte hier wohl stehen, dass er senden sollte "ich fahre andersrum" oder sowas. UNTER dieser endlosschleife wird dann die leistung abgestellt.

radbruch
06.02.2007, 18:18
Hallo

Die Funktion "main" darf NIE beendet werden weil nicht definiert ist, was dann ausgeführt wird. Deshalb sollten alle Programme mit einem while(1); enden. Nicht definiert bedeutet übrigens auch, dass wahllos irgendwelche LEDs an- oder ausgehen können.

Dein Problem mit der Tasterabfrage ist hauptsächlich die fehlende Abfrage auf einen losgelassenen Taster! Ohne diese Abfrage schaltet ein einziger Tastendruck alle Abfragen auf einmal durch. Bei deinem Programm macht es sich beim ersten Tastendruck nicht bemerkbar weil während dem Drücken ein paar Zeichen geschickt werden die alles etwas ausbremsen. Und du läßt dann vermutlich während des Sendens den Taster schon wieder los. Versuche mal etwas in der Art:

while (PollSwitch() == 0); //drücken
while (PollSwitch() != 0); //loslassen

Motoren-machen-was(); //aktion1

while (PollSwitch() == 0); //drücken
while (PollSwitch() != 0); //loslassen

LEDs-machen-was(); //aktion2

uswusw....

Gruß

mic

duronus
07.02.2007, 17:58
Vielen Dank für eure Antworten.

Ich werde es sobald wie möglich ausprobieren und euch danach Bescheid geben.

Nochmals Danke

Grüsse

Duronus