Ich hab mich jetzt mal an dem Beispiel versucht, allerdings mit einer switch statt zig ifs. als default (also wenn KEIN richtiges Zeichen ankommt) hab ich break,break gewählt, der Asuro soll also stehen bleiben.
Ebenfalls setze ich am Ende eines jeden Durchlaufes die Variable auf einen fiktiven Wert.
Und zu guter Letzt soll SerRead nur 5 Takte lang versuchen einen Wert zu empfangen.
Resultat: Das Programm funktioniert nicht. Und zwar tut sich gar nichts.
Wenn ich bei SerRead den Wert wieder auf 0 (also Endlos) setze fährt der Asuro zwar, bleibt aber nicht stehen wenn die Taste losgelassen wird, was auch logisch ist.
Jemand ne Ahnung wo der Fehler liegt?
Hier mein Code:
Code:
#include "asuro.h"
void stopGo(void); //prototyp
int main(void)
{
Init();
MotorSpeed(200,200);
unsigned char dir[] = "123"; //platz für die empf var
while(1)
{
SerRead(dir, 1, 5);
switch(dir[0])
{
case 'w': MotorDir(FWD,FWD);
break;
case 's': MotorDir(RWD,RWD);
break;
case 'a': MotorDir(BREAK,FWD);
break;
case 'd': MotorDir(FWD,BREAK);
break;
case 'm': stopGo();
break;
case 'q': MotorDir(RWD,FWD);
break;
case 'r': MotorDir(FWD,RWD);
break;
default: MotorDir(BREAK,BREAK);
break;
}
dir[0] = '0';
}
return 0;
}
void stopGo(void)
{
static unsigned char x = '0';
if(x == '0')
{
MotorSpeed(0,0);
x = '1';
}
else
{
MotorSpeed(200,200);
x = '0';
}
}
Danke
Lesezeichen