Jop, das kann sein, hab nähmlich gestern Borland Delphi installiert. Ich werd WinAVR mal neuinstallieren....
Da hat sich irgendwie das make.exe von Borland reingemogelt. Überprüf mal die Pfadangaben. WinAVR sollte vor Borland stehen.
Gruß m.a.r.v.i.n
Jop, das kann sein, hab nähmlich gestern Borland Delphi installiert. Ich werd WinAVR mal neuinstallieren....
Hallo. Ich habe das Programm von Pdd am 26.10.2006, 14:40 abgeschrieben und erweitert mit meinen tastenbelegungen und Aktionen. Jedoch bringt mir das Programm beim compilieren folgendes:
C:\ASURO_src\FirstTry\test.c:6: undefined reference to 'Send'
C:\ASURO_src\FirstTry\test.c:9: undefined reference to 'Send'
Der scheint nichts mit Send anfangen zu können. Ich habe aber irgendwie keinen Plan wie ich dem das beibringen soll...
Hier mein Programm:
Code:#include "asuro.h" int main(void) { char msg[2]; { //Befehle Empfangen Send("\r\n>"); SerRead(msg,2,0); msg[1] = '\0'; Send(msg[0]); 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; }
Geändert von Tobi98 (25.06.2015 um 17:49 Uhr)
Dann ist die einzige Lösung Pdd versuchen die Code der Funktion Send hier zu posten. Weil das aber damals in 2006 war ist er es vermutlich vergessen, oder hat er es nicht mehr. Vermutlich macht das nur ein Anruf von SerWrite mit Tekst-Zeile als Parameter.
Ok danke. Ich probiere einfach mal bisschen rum. Wenn ich fertig bin und alles funktioniert schreibe ich das ergebnis hier rein, damit andere auch ihren asuro fernsteuern können. Das kann aber paar tage dauern XD
Hallo
Was passiert da:
Send("\r\n>"); Es wird ein CRLF an das Terminal gesendet um dort später in einer neue Zeile zu schreiben.Code://Befehle Empfangen Send("\r\n>"); SerRead(msg,2,0); msg[1] = '\0'; Send(msg[0]);
SerRead(msg,2,0); Dann wird eingelesen was das Terminal sendet....
msg[1] = '\0'; ...und dahinter das Zeichen mit der Nummer 0 als Kennung für das Ende einer Zeichenkette gespeichert.
Send(msg[0]); und letzlich wird das eingelesene Zeichen zur Kontrolle zurück zum Terminal gesendet das dieses dann in der neuen Zeile darstellt.
Send() sollte deshalb irgendwie durch SerWrite() ersetzbar sein. Oder du verzichtest auf die Kontrolle im Terminal und wechselst zum Beispiel die Farbe der StatusLED wenn ein neues Zeichen empfangen wurde.
if(msg[0] == 'w') vergleich nur ein Zeichen, die oben angefügte Endekennung für Strings scheint eher unnötig zu sein.
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!
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?
Lesezeichen