- LiTime Speicher und Akkus         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 22

Thema: Asuro Fernsteuern

  1. #11
    Erfahrener Benutzer Roboter Genie Avatar von m.a.r.v.i.n
    Registriert seit
    24.07.2005
    Ort
    Berlin
    Beiträge
    1.247
    Anzeige

    LiFePo4 Akku selber bauen - Video
    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

  2. #12
    Benutzer Stammmitglied
    Registriert seit
    12.10.2006
    Ort
    Tübingen
    Alter
    32
    Beiträge
    31
    Jop, das kann sein, hab nähmlich gestern Borland Delphi installiert. Ich werd WinAVR mal neuinstallieren....

  3. #13
    Neuer Benutzer Öfters hier
    Registriert seit
    21.07.2014
    Beiträge
    17
    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)

  4. #14
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.170
    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.

  5. #15
    Neuer Benutzer Öfters hier
    Registriert seit
    21.07.2014
    Beiträge
    17
    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

  6. #16
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    Was passiert da:

    Code:
    				//Befehle Empfangen
    				Send("\r\n>");
    				SerRead(msg,2,0);
    				msg[1] = '\0';
    				Send(msg[0]);
    Send("\r\n>"); Es wird ein CRLF an das Terminal gesendet um dort später in einer neue Zeile zu schreiben.
    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!

  7. #17
    Neuer Benutzer Öfters hier
    Registriert seit
    21.07.2014
    Beiträge
    17
    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.

  8. #18
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    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!

  9. #19
    Neuer Benutzer Öfters hier
    Registriert seit
    21.07.2014
    Beiträge
    17
    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.

    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;}
    }
    Vielleicht wisst ihr, was da los ist...

  10. #20
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.170
    Wie oft wird SerRead angesprochen in dein while loop? Und wie oft werden dan neue Zeichen von dein PC verbindung bekommen?

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiTime Speicher und Akkus