Schön, geht auch bei mir. (Ja, ich weiss ich habe ne lange Leitung. Am Transceiver natürlich)
Es reicht aber wenn du das Init() vor der do-Schleife machst.
Servus, hab hier mal ein kleines Programm geschrieben, mit dem man den Asuro per Tastatur(W,A,S,D) fernsteuern kann.
(Natürlich über das Terminalprogramm von Windows)
Evtl. kann es von euch ja jemand gebrauchen.
MfG Mr.Roboto
Code:// Programm von Mr.Roboto - 21.07.07 #include "asuro.h" #define Motorgeschwindigkeit MotorSpeed(180,200); int main(void) { int i; char input[1]; do { Init(); SerRead(input,1,0); i=0; if(input[0]=='w') { StatusLED(YELLOW); do { MotorDir(FWD,FWD); Motorgeschwindigkeit Sleep(255); i++; }while(i<=80); } if(input[0]=='s') { StatusLED(RED); do { MotorDir(RWD,RWD); Motorgeschwindigkeit Sleep(255); i++; }while(i<=80); } if(input[0]=='a') { BackLED(ON,OFF); do { MotorDir(BREAK,FWD); Motorgeschwindigkeit Sleep(255); i++; }while(i<=80); } if(input[0]=='d') { BackLED(OFF,ON); do { MotorDir(FWD,BREAK); Motorgeschwindigkeit Sleep(255); i++; }while(i<=80); } }while(1); }
Schön, geht auch bei mir. (Ja, ich weiss ich habe ne lange Leitung. Am Transceiver natürlich)
Es reicht aber wenn du das Init() vor der do-Schleife machst.
Lieber Asuro programieren als arbeiten gehen.
Ja bei mir geht es auch!Großes Lob! =D>
Jetzt hab ich die SerRead Geschicht verstanden, obwohl ich sie mir noch nie im Handbuch angeschaut hab.
Danke schön!
Kurze Hinzufügung:
Wenn man dann "X" drückt bleibt er stehen, damit mit man ihn z.B. besser ausschalten kann. Das aber auch nur am Rande.Code:if(input[0]=='x') { BackLED(ON,ON); do { MotorDir(BREAK,BREAK); Motorgeschwindigkeit Sleep(255); i++; }while(i<=80); }
Gruß Roboaktiv
It is öde to be blöde
![]()
Bitteschön... aber das mit dem x braucht man doch nicht .... wenn ich nichts drücke bleibt er doch auch stehen !!
Hallo
Kleiner Tipp: Mit der switch/case-Funktion kann man die Abfrage der empfangenen Zeichen recht übersichtlich und elegant lösen:
https://www.roboternetz.de/phpBB2/ze...=287750#287750
Ist zwar für eine TV-Fernbedienung (RC5), zeigt aber wie man case einsetzen kann. Das von der Fernbedienung empfangene Zeichen steht in temp.
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!
nix da Switch-Case !!!! [-X ... BACK TO THE ROOTS !!! ... ich steh auf die gute alte IF-Anweisung, net so ein neumodischer Kram !!![]()
Kleiner Spass, jo Switch-Case sieht schon cool aus im Code
Hallo zusammen,
nichts gegen switch/case. Erhöht die Übersichtlichkeit enorm.
Aber die HEX-Datei wird um Meilen länger. Ich habe mal getestet, dass sich case erst ab ca. 20! verschiedenen Werten lohnt gegenüber dem 'altmodischen' IF.
Also los: Weitere Tastenkommandos erfinden
w, s, a, d von Mr.Roboto
x von Roboaktiv
0 = Status-LED Aus
1 = Status-LED Grün
2 = Status-LED Gelb
3 = Status-LED Rot
4 = Linien-LED Aus
5 = Linien-LED An
e = schneller
d = langsamer
...
Lieber Asuro programieren als arbeiten gehen.
Oh, so habe ich das noch nie betrachtet. Sorry.Aber die HEX-Datei wird um Meilen länger. Ich habe mal getestet, dass sich case erst ab ca. 20! verschiedenen Werten lohnt gegenüber dem 'altmodischen' IF.
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Hallo radbruch, das Sorry ist natürlich überflüssig. Aber wenn Platzprobleme auftauchen, sucht man nach dem letzten zu sparenden Byte.
Das Problem hatte ich vor allem bei dem Programm für die Ermittlung der Parameter für die myasuro.h-Datei aus der LIB.
Lieber Asuro programieren als arbeiten gehen.
bist du sicher dass das mit den 20 werten stimmt?
hmm.. ich denk das ist in erster linie eine entscheidung der vorliebe, ich mag if ganz gern. aber wenns um menüs geht oder so dann wähle ich meist switch/caseCode:zuerst 10 werte mit if if(wert==1){ anweisung 1; anweisung 2; } if(wert==2){ anweisung 1; anweisung 2; } if(wert==3){ anweisung 1; anweisung 2; } if(wert==4){ anweisung 1; anweisung 2; } if(wert==5){ anweisung 1; anweisung 2; } if(wert==6){ anweisung 1; anweisung 2; } if(wert==7){ anweisung 1; anweisung 2; } if(wert==8){ anweisung 1; anweisung 2; } if(wert==9){ anweisung 1; anweisung 2; } if(wert==10){ anweisung 1; anweisung 2; } jetzt 10 werte mit case: switch (wert){ case 1:Anweisung 1; Anweisung 2; break; case 2:Anweisung 1; Anweisung 2; break; case 3:Anweisung 1; Anweisung 2; break; case 4:Anweisung 1; Anweisung 2; break; case 5:Anweisung 1; Anweisung 2; break; case 6:Anweisung 1; Anweisung 2; break; case 7:Anweisung 1; Anweisung 2; break; case 8:Anweisung 1; Anweisung 2; break; case 9:Anweisung 1; Anweisung 2; break; case 10:Anweisung 1; Anweisung 2; break; }
Lesezeichen