- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 9 von 9

Thema: Komme nicht weiter bei RP6 Terminalsteuerungsprgramm

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    27.09.2009
    Alter
    29
    Beiträge
    661

    Komme nicht weiter bei RP6 Terminalsteuerungsprgramm

    Hi,

    ich wollte mir mal für den RP6 ein TerminalsteuerungsProgramm erstellen
    das dann irgentwann ganze Kommandoketten auswertet z.B. 100_FWD_1min_
    leider komme ich nicht mehr weiter kann mir jemand sagen wo ein fehler liegen
    könnte?

    Danke

    Code:
    #include "RP6RobotBaseLib.h"
    
    char Buffer[UART_RECEIVE_BUFFER_SIZE + 1];
    char Name[12+1];
    uint8_t cnt;
    uint8_t speed = 0;
    int8_t dir = 0;
    
    
    uint8_t Eingabe(void){
    
    static uint8_t buffer_pos = 0;
    if(getBufferLength()){
    Buffer[buffer_pos]=readChar();
    if(Buffer[buffer_pos]=='\n'){
    Buffer[buffer_pos] = '\0';
    buffer_pos = 0;
    clearReceptionBuffer();
    return 1;
    
    }
    else if(buffer_pos >= UART_RECEIVE_BUFFER_SIZE) {
       Buffer[buffer_pos] = '\0'; 
       buffer_pos = 0;
       clearReceptionBuffer();
       return 1;}
    buffer_pos++;
    }
    return 0;
    }
    
    
    
    void Warten(void){
    
    for(cnt = 0; cnt <UART_RECEIVE_BUFFER_SIZE + 2; cnt++) {
    Buffer[cnt]=0;
    }
        
    while(!Eingabe());
    
    }
    
    
    
    void Namenlesen(void){
    uint8_t a;
    
    for(a=0;a<14;a++){
    
    Name[a]=Buffer[a];
    
    }
    }
    
    void KommandoAuswerten(){
    int cnt = 0;
    int cnt2;
    int done = 0;
    char Speed[2];
    
    while(Buffer[cnt]!='/n){
    if (Buffer[cnt]=='_'&& done == 0){
    for(cnt2=0;cnt2<4;cnt2++){
    Speed[cnt2]=Buffer[cnt2];
    }
    speed = atoi(Speed);
    done = 1;
    break;
    }
    cnt++;
    }
    }
    
    int main(void){
    initRobotBase();
    
    
    
    setLEDs(0b000000);
    
    writeString("Hallo lass uns starten\n");
    writeString("Schreibe mal bitte deinen Namen ins Terminal\n");
    
    
    
    Warten();
    Namenlesen();
    writeString("Dein Name ist also ");
    writeString(Name);
    
    writeChar('.');
    writeString("\n");
    
    writeString("Gib mir mal ein Komando");
    writeString("\n");
    Warten();
    KommandoAuswerten();
    powerON();
    moveAtSpeed(speed,speed);
    return 0;
    }
    MfG Martinius

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    27.09.2009
    Alter
    29
    Beiträge
    661
    Hat keiner ne Idee?
    MfG Martinius

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    28.04.2009
    Ort
    Wörgl
    Alter
    28
    Beiträge
    175
    Hallo,
    ich hab es mir jetzt nicht genauer durch gelesen, was mir allerdings aufgefallen ist:

    die Zeile
    while(Buffer[cnt]!='/n){ müsste wohl eher so heißen: while(Buffer[cnt]!='/n'){

    Was gibt denn das Programm bzw. der Compiler aus?

    lg
    Michi

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    27.09.2009
    Alter
    29
    Beiträge
    661
    Ja da war ein Fehler den zu Beheben hat aber leider nicht geholfen
    der Roboter fährt immer noch nicht los
    MfG Martinius

  5. #5
    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

    Ohne weiteren Kommentar zum von dir hingeknallten Quellcode:

    Code:
    #include "RP6RobotBaseLib.h"
    
    char Buffer[UART_RECEIVE_BUFFER_SIZE + 1];
    char Name[12+1];
    uint8_t cnt;
    uint8_t speed = 0;
    int8_t dir = 0;
    
    
    uint8_t Eingabe(void)
    {
    	static uint8_t buffer_pos = 0;
    
    	if(getBufferLength())
    	{
    		Buffer[buffer_pos]=readChar();
    		if(Buffer[buffer_pos]=='\n')
    		{
    			Buffer[buffer_pos] = '\0';
    			buffer_pos = 0;
    			clearReceptionBuffer();
    			return 1;
    
    		}
    		else if(buffer_pos >= UART_RECEIVE_BUFFER_SIZE)
    		{
       		Buffer[buffer_pos] = '\0';
       		buffer_pos = 0;
       		clearReceptionBuffer();
       		return 1;
    		}
    		buffer_pos++;
    	}
    	return 0;
    }
    
    void Warten(void)
    {
    	for(cnt = 0; cnt <UART_RECEIVE_BUFFER_SIZE + 2; cnt++)
    	{
    		Buffer[cnt]=0;
    	}
    
    	while(!Eingabe());
    }
    
    
    
    void Namenlesen(void)
    {
    	uint8_t a;
    
    	for(a=0;a<14;a++)
    	{
    		Name[a]=Buffer[a];
    	}
    }
    
    void KommandoAuswerten(void)
    {
    	int cnt = 0;
    	int cnt2;
    	int done = 0;
    	char Speed[2];
    
    	while(Buffer[cnt] != '\n' )
    	{
    		if (Buffer[cnt]=='_' && done == 0)
    		{
    			for(cnt2=0;cnt2<4;cnt2++)
    			{
    				Speed[cnt2]=Buffer[cnt2];
    			}
    			speed = atoi(Speed);
    			done = 1;
    			break;
    		}
    		cnt++;
    	}
    }
    
    int main(void)
    {
    	initRobotBase();
    
    	setLEDs(0b000000);
    
    	writeString("Hallo lass uns starten\n");
    	writeString("Schreibe mal bitte deinen Namen ins Terminal\n");
    
    	Warten();
    	Namenlesen();
    	writeString("Dein Name ist also ");
    	writeString(Name);
    
    	writeChar('.');
    	writeString("\n");
    
    	writeString("Gib mir mal ein Komando");
    	writeString("\n");
    	Warten();
    	KommandoAuswerten();
    	powerON();
    	moveAtSpeed(speed,speed);
    	return 0;
    }
    So geht's auch und kann sogar Fehler- und Warnungsfrei kompiliert werden. Was auf den ersten Blick auffällt: Keine Endlosschleife! MoveAtSpeed benötigt das Tasksystem. Mehr mag ich eigentlich noch nicht anmerken. Putze den Code, füge Kommentare ein, simuliere empfangene Daten/Befehle....

    Viel Erfolg

    mic
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  6. #6
    shedepe
    Gast
    Noch eine kleine Anmerkung zu deinem Vorhaben Kommandozeichenketten auszuwerten. Meistens ist es einfacher und effizienter die Daten als Bytes, nach einem bestimmten Schema (z.B. [Startbedingung],[Kommando],[Daten...],[Endbedingung]) zu übertragen

Ähnliche Themen

  1. Ich komme einfach nicht weiter :(
    Von Sven1277 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 15.08.2009, 00:32
  2. Ich komme einfach nicht weiter.... :(
    Von Sven1277 im Forum Software, Algorithmen und KI
    Antworten: 3
    Letzter Beitrag: 13.08.2009, 23:10
  3. Ich komme beim Routen nicht weiter :-(
    Von space24 im Forum Konstruktion/CAD/3D-Druck/Sketchup und Platinenlayout Eagle & Fritzing u.a.
    Antworten: 22
    Letzter Beitrag: 22.02.2009, 21:09
  4. Komme nicht weiter-> Welche Akkus?
    Von Delfin im Forum Elektronik
    Antworten: 10
    Letzter Beitrag: 28.05.2008, 14:14
  5. ich komme nicht weiter
    Von Heiko.Weber im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 22.10.2006, 15:59

Stichworte

Berechtigungen

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

LiFePO4 Speicher Test