-
-
Neuer Benutzer
Öfters hier
Kreise fahren mit leuchtenden LED's
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
-
Moderator
Robotik Einstein
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.
-
Moderator
Robotik Visionär
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
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
-
Neuer Benutzer
Öfters hier
Vielen Dank für eure Antworten.
Ich werde es sobald wie möglich ausprobieren und euch danach Bescheid geben.
Nochmals Danke
Grüsse
Duronus
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen