-
        

Ergebnis 1 bis 9 von 9

Thema: Dialog mit RP6 über USART

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    24.02.2010
    Beiträge
    29

    Dialog mit RP6 über USART

    Anzeige

    Folgendes Problem.

    Ich möchte eine Dialogbox schreiben wie die von Selftest.
    Bei C gibt es ja die scanf funktion um Daten einzulesen und Printf um welche zu schreiben.

    Beim RP6 gibt es writeString um daten zu schreiben aber lesen ... an meinem Beispiel kann man sehen was ich meine.

    Code:
    #include "RP6RobotBaseLib.h" 	// The RP6 Robot Base Library.
    
    uint8_t frag = 0;
    
    void frage_eins (void)
    {
    	writeString("Ich bin Frage eins\n");
    }
    
    void frage_zwei (void)
    {
    	writeString("Ich bin Frage zwei\n");
    }
    
    int main(void)
    {
    	initRobotBase(); 
    
    	setLEDs(0b111111); 
    	mSleep(500);       
    	setLEDs(0b000000); 
    
    	writeString("Hallo Drück Taste für eine Frage\n");
    	writeString(" 1 - Frage eins \n");
    	writeString(" 2 - Frage zwei \n");
    	
    	while(true)
    	{
    		switch(frag)
    		{
    			case 1:
    					frage_eins();
    			break;
    			case 2:
    					frage_zwei();
    			break;
    		}
    		//"Hier fehlt jetzt was" 
    		//"unter C schaut es so aus"
    		scanf("%d",&frag);
    	
    	}
    	return 0;
    }
    Danke für Anregungen zur Lösung.

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.791
    Hi PocketPc,

    ich bin nicht ganz sicher, was du machen willst.

    Wenn es darum geht, ein Zeichen über UART einzulesen, dann zeigt ja das Example_Hallo_01.c, wie das geht.

    Gruß Dirk

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    24.02.2010
    Beiträge
    29
    Die Example_Hallo_01.c hab ich leider nicht. Kannst du mir bitte den Quellcode posten.

    Es geht darum das ich mir ein Menü bauen will über das ich durch drücken von Taste 1 - 9 die jeweiligen Programme ausführen kann.

    Wie in der RP6Base_SELFTEST. Drücke 0 für alle Tests, 1 für PowerOnTest 2 für ACS usw.

    Also ein kleines Interface das ich dann über den Loader steuern kann.

    Thx und gute Nacht

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.03.2010
    Ort
    Hamburg
    Beiträge
    333
    die Progarmme findest du hier http://www.arexx.com/rp6/html/de/docs.htm
    Lg ALex

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    24.02.2010
    Beiträge
    29
    Wo denn da?

    Beispielprogramme (20080915) die hab ich mir schon geladen da ist aber keine Example_Hallo_01.c enthalten.

    Dort gibt es nur die Example_01_LEDs. Da wird zwar ein Hallo geschrieben und das Licht leuchtet aber es wird leider kein Dialog ausgeführt.

    Kann mir Jemand den Quellcode Posten von der Example_Hallo_01.c
    ich glaub das hilft mir dann schon weiter.

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.791
    Sorry, das wird wirklich nicht mitgeliefert ...

    Example_Hallo_01.c :
    Code:
    /* 
     * ****************************************************************************
     * RP6 ROBOT SYSTEM - ROBOT BASE EXAMPLES
     * ****************************************************************************
     * Example: Ask for user's name
     * Author(s): Dirk
     * ****************************************************************************
     * Description:
     * This sample program shows how to use the RP6Library functions to receive
     * data with the serial interface. It asks for the user's name.
     *
     * ############################################################################
     * The Robot does NOT move in this example! You can simply put it on a table
     * next to your PC and you should connect it to the PC via the USB Interface!
     * ############################################################################
     * ****************************************************************************
     */
    
    /*****************************************************************************/
    // Includes:
    
    #include "RP6RobotBaseLib.h" 	// The RP6 Robot Base Library.
    								// Always needs to be included!
    
    /*****************************************************************************/
    // Ask for the user's name
    
    /**
     * Here we ask for the user's name and receive the answer from the user. 
     * The function uses some of the reception routines of the RP6Library.
     * It is called from the main loop (s. below).
     */
    void askAQuestion(void)
    {
    	uint8_t charsToReceive;
    	
    	writeString_P("Wie heisst du? (max. 32 Zeichen)\n"); 
    	charsToReceive = 32;  // we want to receive maximum 32 characters
    	
    	// ------------------------------------------
    	// Receive Answer (UPDATED - this was changed for compatibility with new RP6Lib):
    	
    	char receiveBuffer[charsToReceive+1]; // our reception buffer is one byte larger
    										  // than the data we want to receive, because
    										  // we also need to receive the "Newline" character!
    
    	clearReceptionBuffer(); // Make sure reception Buffer is empty and no junk data 
    							// is left in it.
      
    	uint8_t buffer_pos = 0;
    	while(true) // Loop until we received one line of Data!
    	{ 
    		if(getBufferLength())    // Check if we still have data (means getBufferLength() 
    		{						 // is not zero)	
    			receiveBuffer[buffer_pos] = readChar(); // get next character from reception buffer
    			if(receiveBuffer[buffer_pos]=='\n') // End of line detected!
    			{
    				receiveBuffer[buffer_pos]='\0'; // Terminate String with a 0, so other routines.
    				buffer_pos = 0;                 // can determine where it ends!
    												// We also overwrite the Newline character here.
    				break; // We are done and can leave reception loop!
    			}
    			else if(buffer_pos >= charsToReceive) // IMPORTANT: We can not receive more 
    			{								 	  // characters than "charsToReceive" because
    												  // our buffer wouldn't be large enough!
    				receiveBuffer[charsToReceive]='\0';	// So if we receive more characters, we just 
    												     // stop reception and terminate the String.
    				writeString_P("\n\nDu hast mehr Zeichen als erlaubt eingegeben!\n");
    				break; // We are done and can leave reception loop!
    			}
    			buffer_pos++;
    		}										 
    	}
    	writeChar('\n');
    	// ------------------------------------------
    	// Do something with the received answer:
    	
    	// Question: What's your name?
    	writeString_P("Hallo \"");
    	writeString(receiveBuffer); // Output the user's name as a String
    	writeString_P("\" !\n");
    }
    
    /*****************************************************************************/
    // Main function - The program starts here:
    
    int main(void)
    {
    	initRobotBase(); // Always call this first! The Processor will not work
    					 // correctly otherwise.
    
    	setLEDs(0b111111); // Turn all LEDs on
    	mSleep(500);       // delay 500ms
    	setLEDs(0b000000); // All LEDs off
    
    	// Write a message to UART:
    	writeString_P("\nHallo! Mein Name ist RP6!\n\n");
    	
    	askAQuestion();	// Ask for the name and write it to UART
    
    	writeString_P("\nDas war's! Hier ist das Programm zuende!\n\n");
    	while(true)	{
    	};				// Here we rest in peace!
    	// ---------------------------------------
    
    	return 0;
    }
    
    /*****************************************************************************/
    // EOF
    Gruß Dirk

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    24.02.2010
    Beiträge
    29
    Dank dir.

    Schaut gut aus. Wenn es hinhaut melde ich mich wieder.

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    24.02.2010
    Beiträge
    29
    @Dirk Ich versteh es nicht.

    Folgendes aus der Doku:

    Einzeln empfangene Bytes kann man mit der Funktion !!! char redChar(void) !!! aus dem Ringpuffer lesen.

    genau das will ich machen. Ich sende dem RP6 über das Terminal eine 1 oder 2,3.... und er gibt sie aus bzw kann sie weiter verarbeiten.

    writeString(receiveBuffer); // Output the user's name as a String //
    Da wird in der Hallo_1.c die Eingabe verarbeitet.

    Wie komme ich da ran um sie dann in einem switch(receiveBuffer) oder if(receiveBuffer == 1) zu verarbeiten ???

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    24.02.2010
    Beiträge
    29
    http://www.roboternetz.de/phpBB2/zei...light=readchar

    Sufu sei dank. Hat sich erledigt.

Berechtigungen

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