PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem Kollisionstaster --> unkontrollierter Programmabl



klaus2004
17.06.2009, 19:29
Hallo,

habe mein erstes Programm für den Asuro geschrieben. Der kleine soll vorwärts fahren bis einer der Kollisionstaster gedrückt wird...solange dieser dann gedrückt ist, fährt er rückwärts.

Drückt man nun wahllos einige male einen der Taster, bricht scheinbar das Programm ab und der Asuro macht am Ende das was zuletzt im Programm durchlaufen wurde. Dabei leuchtet die Status LED orange.

Hat jemand eine Idee?

grüsse,
Klaus



#include "asuro.h"
int main(void)
{
Init ();
while (1)
{
if (PollSwitch()!=0)
{
MotorDir (RWD,RWD);
MotorSpeed (120,120);
StatusLED (RED);
}
else
{
MotorDir (FWD,FWD);
MotorSpeed (255,255);
StatusLED (GREEN);
}
}
return 0;
}

radbruch
17.06.2009, 19:44
Batterie/Akku leer? Zu häufiger/schneller Aufruf von MotorDir()/MotorSpeed()? Tastenwerte von PollSwitch() falsch eingelesen?

klaus2004
17.06.2009, 21:31
Hallo,

bei meinem Programm fährt der Asuro solange vorwärts bis ein Taster gedrückt wird und fährt solange rückwärts bis der Taster wieder "frei" ist.

D.h. wenn er gegen eine Wand fährt schaltet er sehr schnell zwischen vorwärts und rückwärts um, sprich die MotorDir wird sehr oft augerufen.

Heißt das ein oftmaliges aufrufen dieser funktion (mehrmals/s) kann zum "Absturz" führen?

CU,

Klaus

radbruch
17.06.2009, 22:00
Naja, zum "Absturz" sollte das häufige MotorDir() eigentlich nicht führen. Ich vermute, dein PollSwitch() funktioniert nicht richtig. Einige grüne StatusLEDs zwischen vielen Roten ergibt dann Orange. Das soll meinen: PollSwitch() erkennt einen Tastendruck obwohl keiner stattgefunden hat.

Ceos
18.06.2009, 09:22
das ständige ändern der motordir kann womöglich zu spannungseinbrüchen führen, dein pollswitch bekommt dann ne macke

entprell dein pollswitch mal (kann bitte jemand schnell die zeilen posten? hab grad nich im kopf wie des ging)

schocksnert
18.06.2009, 11:25
Wenn ich das noch richtig im Kopf hab ging das so

t1 = PollSwitch();
t2 = PollSwitch();
if(t1 == 0 && t2 == 0) /* keine Taste */

Variablen anlegen nicht vergessen für t1 und t2.


Gruß Alex

radbruch
18.06.2009, 12:16
Hallo

Wenn man nur auf eine gedrückte Taste prüfen möchte kann man auch den Tasteneingang ohne ADC auswerten:

if ( ~PINC & ( 1 << PC4 ) ) {

Der Code stammt von Henk: http://www.arexx.com/forum/%76iewtopic.php?t=472

Gruß

mic