-
        

Ergebnis 1 bis 7 von 7

Thema: Mit Pfeiltasten steuern?

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    16.03.2010
    Ort
    Krefeld
    Beiträge
    109

    Mit Pfeiltasten steuern?

    Anzeige

    Hallo,
    Ich glaube diese Frage wurde Hier schon oft gestellt...
    Ich habe eine GUI gemacht die über die pfeiltasten kommandos sendet wie schaffe es ich in c das der Roboter darauf achtet.

    ich ahbe als belegung:
    for = movefwd
    stop = movestop
    rück = movebackw
    r = moveright
    l = moveright

    danke für antwort

    mfg Marcel

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    22.06.2009
    Beiträge
    1.265
    So mal als PseudoCode

    //Hauptschleife
    while(true)
    {

    char command[] = new char[50];
    command = //serielle schnittstelle abfragen

    if(command == "fwd")
    {
    //move forwards


    }
    else if(command =="bwd")
    {

    //move backwards

    }
    else if(command == "left")
    {
    //turn left

    }


    }


    Ich hoff das hilft dir etwas. Für weiteren Code müsst ich mir noch mal die RP6 Lib anschaun

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    16.03.2010
    Ort
    Krefeld
    Beiträge
    109
    ^danke für deine antwort

    hasste dazu auch nen kompletten quelltext, wie ist das mit Sensoren

    schau dir mal die gui an

    http://vb-tools.kilu.de/index.php?op...4&limitstart=6

    und dann rp6 gui

    mfg marcel

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.02.2005
    Ort
    Hamburg
    Alter
    31
    Beiträge
    4.255
    Für solche Anwendungen ist es hilfreich, die Steuerbefehle mit einem speziellen Zeichen beginnen und enden zu lassen. Dann wartet man beim Empfänger, bis das Startzeichen kommt. Nun werden alle folgenden Zeichen in einen String gepackt, bis das Endzeichen kommt. Nun weiß man, dass ein kompletter Befehl empfangen wurde, und kann auswerten, welcher es ist.

    Ich hab das neulich für ein Projekt so umgesetzt. Bei mir beginnen alle Befehle mit einem Unterstrich und enden mit einem Semikolon.
    Ich benutze die UART-Lib von P. Fleury. Meine Funktion muss reglemäßig aufgerufen werden, und holt dann alle inzwischen empfangenen Zeichen aus dem FiFo (Teil der UART-Lib). Wenn ein kompletter Befehl da ist, wird ein Pointer auf den Befehlstext geliefert, ansonsten ein Nullzeiger. Man muss nun also zuerst auf Null testen, und dann ggf. mit allen vergebenen Befehlstexten vergleichen.
    Code:
    /* Liest Zeichen vom UART ein und sucht nach Befehlen.
       Jeder Befehl beginnt mit _ und endet mit ;
       Diese Zeichen werden nicht mit zurueckgegeben!
       Rueckgabewert: Zeiger auf Befehlsstring, wenn neuer Befehl erkannt,
       sonst Nullzeiger  */
    char * kommando_lesen(void)
    {
    	uint16_t rxc; //empfangenes Zeichen
    	#define MAXCMDLENGHT 10 //maximale Befehlslänge
    	static char cmdstr[MAXCMDLENGHT+1]; //Zwischenspeichern eines Befehls
    	static uint8_t rxcnt=0;
    	uint8_t cmdstr_valid=0;
    
    	rxc = uart_getc(); //UART abfragen
    	//solange Zeichen im Empfangspuffer sind, diese verarbeiten
    	while(!( rxc & UART_NO_DATA )) 
    	{
    		switch((char)rxc)
    		{
    		case '_':
    			rxcnt=0;             //Neuer Befehl hat begonnen
    			cmdstr_valid=0;
    			break;
    
    		case ';':
    			if(rxcnt>0)          //Mindestens ein Zeichen wurde empfangen
    			{
    				cmdstr[rxcnt]=0;   //String abschliessen
    				cmdstr_valid=1;
    			}
    			break;
    
    		default:  
          //ein beliebiges Zeichen wurde empfangen -> an String anhaengen
    			cmdstr[rxcnt]=(char)rxc;
    			rxcnt++;
    			if(rxcnt>MAXCMDLENGHT) //Fehler: zu viele Zeichen am Stück 
    			{
    				rxcnt=0; //Bisherige Daten verwerfen
    			}
    			break;
    		}
    		//UART weiter abfragen, um zu erkennen, ob noch Zeichen kommen
    		//Wenn jetzt UART_NO_DATA gelesen wurde,
    		// wird die while-Schleife verlassen
    		rxc = uart_getc();
    	} //while(...)
    
    	if(cmdstr_valid)
    	{
    		return cmdstr; //Kompletter Befehl empfangen -> zurückgeben
    	}
    	else
    	{
    		return 0; //kein kompletter Befehl -> Nullzeiger zurückgeben
    	}
    }//Ende der Funktion kommando_lesen()

  5. #5
    RN-Premium User Roboter-Spezialist
    Registriert seit
    21.04.2009
    Beiträge
    522
    Hier gibts meine Lösung zu genau diesem Problem: Klick!

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    16.03.2010
    Ort
    Krefeld
    Beiträge
    109
    Ja hab ich schon getestet super Prog. ...

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    07.11.2009
    Ort
    Stuttgert
    Alter
    22
    Beiträge
    14

    Programm

    Hi Leute,
    habe mich heute Morgen mal hingesetz und ein kleines Programm geschrieben:
    Vorwärts und Rückwärts in cm Maßen, Drehen (Links,Rechts) 45, 90 Grad, sowie die Steuerung der LEDs. Das Programm ist noch in der Testphase, und wird von mir noch etwas verfeinern. Das Programm läuft komplett über den Terminal und eine Enleitung ist im Prog enthalten.

    Hoffentlich gefällt es euch !!!
    Gruß Fabi
    Angehängte Dateien Angehängte Dateien

Berechtigungen

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