Hallo dasisch,
das Problem, ist eigendlich nicht ein 0x??-Wert, sondern eher die Funktion beschleunigen(). Ich habe die mal kopiert und KOMMENTIERT:
Code:
void beschleunigen (int beschl, int geschwindigkeit)
{
int a=90;
for (a=90;a<geschwindigkeit;++a)
{
2) MotorDir(RWD,RWD); <-- Jetzt geht es aber weiter ...
3) MotorSpeed(a,a); <-- .. mit einer neuen Geschwindigkeit!!!
BackLED (ON, ON);
1) beruehrstop(); <-- Taste gedrückt, dann MotorDir(BREAK,BREAK) <-- das geht.
Msleep(beschl);
}
BackLED (OFF, OFF);
}
Die Reihenfolge von beruehrstop() und Msleep() ist deshalb bei dir so wichtig, weill dann NACH dem wiedereinschalten der Motoren ja sehr schnell wieder abgeschaltet wird (durch weiterhin gedrückten Taster).
Nun kommt das Msleep() mit einer im Verhältnis zur 'ein'-Zeit der Motoren sehr langen Zeit. Somit hast du den Strom nur ganz kurz an, und lange aus, also 'glaubst' du, dass die Motoren stehen.
Es könnte so gehen, dass die Motoren komplett gestoppt werden:
Code:
void beschleunigen (int beschl, int geschwindigkeit)
{
int a=90;
for (a=90;a<geschwindigkeit;++a)
{
MotorDir(RWD,RWD);
MotorSpeed(a,a);
BackLED (ON, ON);
if (beruehrstop() == TRUE) // dann muss halt was zurueckkommen.
break; // beendet hier das for{}, nicht die Funktion!
Msleep(beschl);
}
BackLED (OFF, OFF);
}
Ich frage mich allerdings, ob in der Funktion beruehrstop() das break; bei
if (sw & 0x04)
MotorDir(BREAK,BREAK);
break;
gewollt ist??
Es verhindert eigendlich nur, das die Taster auf 0x08, 0x10 und 0x20 abgefragt werden, da es a) immer aufgerufen wird, und b) die Funktion verläßt.
Du solltest aber trotzdem überlegen, ob die Lösung von Asuro-n00b mit dem:
if (PollSwitch()>0)
MotorDir(BREAK,BREAK);
nicht doch sinnvoll ist. Du umgehst damt tatsächlich (fast) alle Probleme die bei den Tastern bzw. der Auswertung vorhanden sind.
Noch ein Wort zu dem 0xFE00 aus SelfTest()
Die Werte sind so ziemlich willkürlich gewählt und werden nur benutzt um die einzelnen Test (LineTest() SwitchTest() OdometrieTest() ...) ein bischen in die Länge zu ziehen. Sonst hast du ja nichts davon, wenn die nur 0,03 ms laufen würden
Lesezeichen