Erstmal danke für die vielen Erklärungen. Das hat mir wirklich viel geholfen. Aber was meinst du mit Endkennung für Strings? Sorry, ich bin Anfänger.
Erstmal danke für die vielen Erklärungen. Das hat mir wirklich viel geholfen. Aber was meinst du mit Endkennung für Strings? Sorry, ich bin Anfänger.
Das mit den Strings ist für dein Beispiel oben nicht wichtig, aber weil du ja was lernen willst:
http://www.walter-digital.de/c_2_auf...s/pstrings.htm
(Es reicht erstmal, wenn du bis Bild 5-4 liest)
In deinem Beispiel wird char msg[2]; verwendet um die Eingabe die vom Terminal empfangen wird zu speichern. msg[] bietet Platz für zwei Bytes. Eines davon (das erste mit Namen msg[0] wird für die Daten vom Terminal verwendet (ein Zeichen belegt 8 Bit und passt deshalb in Variablen vom Type char) und für die Vergleiche mit anderen Zeichen die auch 8 Bit groß sind ('w','s', 'a', 'd' und 'x').
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Danke. Jetzt funktioniert es. Zumindest nur ein Teil davon. Ich hab die Kontrolle gleich ganz weggelassen. Wenn ich jetzt aber eine Taste (Tastatur am PC) drücke passiert gar nichts. Und wenn ich dann nochmal eine drücke, wechselt die status LED von grün auf gelb. Danach passiert nichts mehr.
Vielleicht wisst ihr, was da los ist...Code:#include "asuro.h" int main(void) { char msg[2]; { SerRead("b",2,0); msg[1] = '\0'; while(1){ if(msg[0] == 'w') { MotorDir(FWD,FWD); MotorSpeed(255,255); FrontLED(ON); } else if(msg[0] == 's') { MotorDir(RWD,RWD); MotorSpeed(255,255); StatusLED(RED); } else if(msg[0] == 'd') { MotorDir(FWD,FWD); MotorSpeed(255,150); BackLED(OFF,ON); } else if(msg[0] == 'a') { MotorDir(FWD,FWD); MotorSpeed(150,255); BackLED(ON,OFF); } else if(msg[0] == 'x') { MotorDir(FREE,FREE); MotorSpeed(0,0); BackLED(ON,ON); } else {StatusLED(YELLOW);} } return 0;} }
Wie oft wird SerRead angesprochen in dein while loop? Und wie oft werden dan neue Zeichen von dein PC verbindung bekommen?![]()
Hallo,
In deinem Programm fehlt die Init() Funktion zu Beginn des Programmes. Der Aufruf der SerRead() Funktion gehört in die while Schleife, sonst wird nur einmal ein Befehl gelesen.
Code:#include "asuro.h" int main(void) { char msg[2]; Init(); while (1) { // fuege hier deinen Code ein } return 0; }
Lesezeichen