-         

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 22

Thema: Asuro Fernsteuern

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    12.10.2006
    Ort
    Tübingen
    Alter
    25
    Beiträge
    31

    Asuro Fernsteuern

    Anzeige

    Hallo.
    Ich hab heut mal damit angefangen, ASURO über Hyperterminal fernzusteuern:
    Code:
    	while(1)
    	{
    		//Befehle Empfangen
    		msg = "";
    		SerRead(msg,1,0);
    		Send("\r\nEmpfangen: >");
    		Send(msg);
    		Send("<");
    		if(msg == "w")
    		{
    			FrontLED(ON);
    		}
    	}
    Die Funktion: Wenn man im Terminal "w" drückt, sollte die Front LED angehen, tut sie aber net o.O
    Wie ihr seht sendet der Asuro zu testzwecken die Taste zurück, die angekommen ist. Ankommen sollte: "Empfangen: >w<" Empfangen wird aber :
    "Empfangen >w
    <"
    Also mit einem Zelenumbruch. Nun will ich die Zeile if(msg == "w") so umändern, das nur das erste byte(das "w") verglichen wird. Mit msg[1] funktioniert das aber nicht! Wie kann man das machen?

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    13.07.2006
    Ort
    Bielefeld
    Beiträge
    166
    Hi Pdd,

    wenn du die Variable msg initialisierts (machst du doch, oder) kannst du die Länge auf ein Zeichen begrenzen. Das sollte dan dein Problem lösen.


    Viele Grüße, (Michael)

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    12.10.2006
    Ort
    Tübingen
    Alter
    25
    Beiträge
    31
    Hm hab jetzt so:
    Code:
    char msg[1];
    	while(1)
    	{
    		//Befehle Empfangen
    		msg[1] = "";
    		SerRead(msg[1],1,0);
    		Send("\r\nEmpfangen: >");
    		Send(msg[1]);
    		Send("<");
    		if(msg[1] == "w")
    		{
    			FrontLED(ON);
    		}
    	}
    es kommt aber immernoch das selbe raus! Oder begrenzt man die Anzahl anders? nicht dsa ich jetzt ein Array erstellt habe, könnte ich mir vorstellen, weil ein Fehler kommt, wenn man an einem "msg" das "[1]" weglässt.

  4. #4
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Jena
    Alter
    31
    Beiträge
    3.913
    mach mal folgendes:

    Code:
    char msg[1]="x";
    so dass schon ein wert gespeichert ist. dieser wird dann später überschrieben. laut anleitung des asuro sollte es so besser gehen.
    kleinschreibung ist cool!

  5. #5
    Erfahrener Benutzer Roboter Genie Avatar von m.a.r.v.i.n
    Registriert seit
    24.07.2005
    Ort
    Berlin
    Beiträge
    1.247
    Hallo Pdd,

    Code:
    char msg[1];
    ist ein Vektor bestehend aus 1 Element (hier Byte).

    Code:
    msg[1] = "";
    ist eine Zuweisung auf das 2. Element (Byte) des Vektors. Also hinter den Vektor, da dieser ja nur 1 Byte lang ist.
    In C wird so etwas nicht überprüft, was zu unerwarteten Effekten führen kann!

    Code:
    msg[0] = "";
    wäre richtig (das gleiche gilt bei Vergleichen und als Parameter für Funktionen).

    Vielleicht nochmal den Abschnitt über Zeiger und Vektoren in der Asuro Bedienungsanleitung durchsehen.

    Gruß m.a.r.v.i.n

  6. #6
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Jena
    Alter
    31
    Beiträge
    3.913
    aaach da war was... na klar =)

    das erste element ist 0, das zweite element ist 1 usw...

    Danke marvin, war grade wireder am drüber nach grübeln warums net geht =)
    kleinschreibung ist cool!

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    12.10.2006
    Ort
    Tübingen
    Alter
    25
    Beiträge
    31
    ok danke, habs schon gestern gelöst gehabt, habs nur net geschreiben *schäm* naja:
    Code:
    char msg[1];
    	{
    		//Befehle Empfangen
    		Send("\r\n>");
    		SerRead(msg,1,0);
    		msg[1] = '\0';
    		Send(msg[0]);
    		
    		if(msg[0] == 'w')
    		{
    			All(ON);
    		}
    		else if(msg[0] == "s")
    		{
    			All(OFF);
    		}
    	}
    Wenn man jetzt W drückt, gehen die Lampen an, auf S gehen sie aber nicht mehr aus o.O weis auch net woran das liegt... naja und ausserdem sendet er immer nachrichten zurück, die garnet gesendet werden sollen. statt nur dem Buchstabe sendet er einen ganzen satz, der eigentlich nur 5 zeilen oberhalb dieses ausschnittes einmal gesendet wird!

  8. #8
    Erfahrener Benutzer Roboter Genie Avatar von m.a.r.v.i.n
    Registriert seit
    24.07.2005
    Ort
    Berlin
    Beiträge
    1.247
    Hallo Pdd,

    dein Array ist immer noch zu kurz, weil Strings noch ein abschließendes \0 Zeichen benötigen.

    Also

    char msg[2];
    nimm mal Hochkommas,

    if(msg[0] == 's')
    nicht Gänsefüsschen

    if(msg[0] == "s")
    dann klappt das auch.

    Mit

    Send(msg);
    sollte es auch das Senden klappen

    Gruß m.a.r.v.i.n

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    12.10.2006
    Ort
    Tübingen
    Alter
    25
    Beiträge
    31
    aha, mal probiere, aber komsich, das kein compiler.error kommt. o.O

  10. #10
    Benutzer Stammmitglied
    Registriert seit
    12.10.2006
    Ort
    Tübingen
    Alter
    25
    Beiträge
    31
    das gibts doch net, mittlerweile kommen Comiler-errors:
    MAKE Version 5.2 Copyright (c) 1987, 1998 Inprise Corp.
    Error makefile 222: Colon expected
    Error makefile 247: Too many rules for target '%.o'
    Error makefile 283: Command syntax error
    *** 3 errors during make ***

    > Process Exit Code: 1

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

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