Batterie/Akku leer? Zu häufiger/schneller Aufruf von MotorDir()/MotorSpeed()? Tastenwerte von PollSwitch() falsch eingelesen?
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
Code:#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; }
Batterie/Akku leer? Zu häufiger/schneller Aufruf von MotorDir()/MotorSpeed()? Tastenwerte von PollSwitch() falsch eingelesen?
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
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
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.
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
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)
Wenn ich das noch richtig im Kopf hab ging das so
Variablen anlegen nicht vergessen für t1 und t2.Code:t1 = PollSwitch(); t2 = PollSwitch(); if(t1 == 0 && t2 == 0) /* keine Taste */
Gruß Alex
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
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Lesezeichen