- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 10 von 20

Thema: Brauche dringend hilfe!TV remote mit linienverfolgung einprogrammieren

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    18.05.2011
    Ort
    Mannheim
    Beiträge
    11
    Hi Jungs ich bin es wieder,
    wie versprochen habe jetzt nun ein programm geschrieben,
    alles funzt,jetzt habe ich das nächste problem das er ins modus2linienverfolgung reinspringt und anfängt zu stottern bis mir der RP6Loader einen fehler raus bringt.
    Der fehler heißt Motor current check motioncontrol was kann das sein.
    Vermute irgendwas wird zeitgleich aufgerufen aber was?
    Hoffe irgenjemand kann mir da helfen
    Code:
    #include "RP6RobotBaseLib.h" 
    
    #define RC_PROMO8
    
    
    #ifdef RC_PROMO8
    
    
    #define RC5_KEY_vorwaertsm		2
    #define RC5_KEY_rueckwaertsm	8
    #define RC5_KEY_linksm			4
    #define RC5_KEY_rechtsm			6
    #define RC5_KEY_Ledanm			32
    #define RC5_KEY_Ledausm			33 
    #define RC5_KEY_modus1fernbedienung	7
    #define RC5_KEY_modus2linieverfolgen 9
    
    
    #endif
    
    
    uint8_t vorwaertsm;
    uint8_t rueckwaertsm;
    uint8_t rechtsm;
    uint8_t linksm;
    uint8_t	Ledanm;
    uint8_t	Ledausm;
    uint8_t	Resetm;
    uint8_t mleftptmp;
    uint8_t mrightptmp;
    uint8_t power_links; 
    uint8_t power_rechts;
    uint8_t mleft_ptmp; 
    uint8_t mright_ptmp;
    
    uint8_t modus1fernbedienung;
    uint8_t modus2linieverfolgen;
    
    
    
    void ruecksetzen(void)
    			{
    				if(getStopwatch2() > 200)
    					{
    					vorwaertsm=0;
    					rueckwaertsm=0;
    					linksm=0;
    					rechtsm=0;
    				
    					setStopwatch2(0);
    					}
    			
    			}
    
    
    void receiveRC5Data(RC5data_t rc5data)
    
    	
    		{writeString_P("Toggle Bit:");
    		writeChar(rc5data.toggle_bit + '0');
    		writeString_P(" | Device Address:");
    		writeInteger(rc5data.device, DEC);
    		writeString_P(" | Key Code:");
    		writeInteger(rc5data.key_code, DEC);
    		writeChar('\n');
            
            
            
    		
    		switch(rc5data.key_code)
    		
    			{
    			case RC5_KEY_vorwaertsm:
    					writeString_P("vorwaertsm: ");
    					writeIntegerLength(vorwaertsm, DEC, 4);
    					writeChar('\n');
    					writeChar('\n');
    					vorwaertsm=1;								//vorwärts fahren
    					if(vorwaertsm==1&&modus1fernbedienung==1)
    					{
    					move(200,FWD,DIST_MM(150),0);
    					}
    					break;
    			case RC5_KEY_rueckwaertsm:
    					writeString_P("rueckwaertsm: ");
    					writeIntegerLength(rueckwaertsm, DEC, 4);
    					writeChar('\n');
    					writeChar('\n');
    					rueckwaertsm=1;								//rückwärts fahren
    					if(rueckwaertsm==1&&modus1fernbedienung==1)
    					{
    					move(200,BWD,DIST_MM(150),0);
    					}
    					break;
    			case RC5_KEY_rechtsm:
    					writeString_P("rechtsm: ");
    					writeIntegerLength(linksm, DEC, 4);
    					writeChar('\n');
    					writeChar('\n');
    					rechtsm=1;								//rechts fahren
    					if(rechtsm==1&&modus1fernbedienung==1)
    					{
    					rotate(50, RIGHT, 55, 0);
    					}
    					break;
    			case RC5_KEY_linksm:
    					writeString_P("linksm: ");
    					writeIntegerLength(linksm, DEC, 4);
    					writeChar('\n');
    					writeChar('\n');
    					linksm=1;								//links fahren
    					if(linksm==1&&modus1fernbedienung==1)
    					{
    					rotate(50, LEFT, 55, 0);
    					}
    					break;
    			case RC5_KEY_Ledanm:
    					writeString_P("Ledanm: ");
    					writeIntegerLength(linksm, DEC, 4);
    					writeChar('\n');
    					writeChar('\n');
    					Ledanm=1;									// Ledan:
    					if(Ledanm==1&&modus2linieverfolgen==1)
    					{
    					DDRA|=(E_INT1);
    					PORTA|=E_INT1;
    					}
    					break;
    			case RC5_KEY_Ledausm:
    					writeString_P("Ledausm: ");
    					writeIntegerLength(linksm, DEC, 4);
    					writeChar('\n');
    					writeChar('\n');
    					Ledausm=1;
    					if(Ledausm==1&&modus2linieverfolgen==1)
    					{											// Ledaus:
    					DDRA|=(E_INT1);
    					PORTA &= ~E_INT1;
    					}
    					break;
    			case RC5_KEY_modus1fernbedienung:	
    					writeString_P("modus1fernbedienung: ");
    					writeIntegerLength(modus1fernbedienung,DEC, 4);
    					writeChar('\n');
    					writeChar('\n');											//Fernbedienung
    					modus1fernbedienung=1;
    					modus2linieverfolgen=0;
    					break;	
    				
    			case RC5_KEY_modus2linieverfolgen:	
    					writeString_P("modus2linieverfolgen: ");
    					writeIntegerLength(modus2linieverfolgen,DEC, 4);
    					writeChar('\n');
    					writeChar('\n');		                                   //Linieverfolgen
    					modus2linieverfolgen=1;
    					modus1fernbedienung=0;
    					break;
    			
    					
    				}
    
    			}
    			
    			
    			
    					
    	
    					void setMotorPWM(void)
    
    				{
    					
    				if(power_links > 210) power_links = 210;
    				if(power_rechts > 210) power_rechts = 210;
    				mleft_power=mleft_ptmp=power_links;
    				mright_power=mright_ptmp=power_rechts;
    
    				OCR1BL = power_links;
    				OCR1AL = power_rechts;
    
    				if(power_links || power_rechts)
    				TCCR1A = (1 << WGM11) | (1 << COM1A1) | (1 << COM1B1);
    				else
    				TCCR1A = 0;
    				
    				}
    				
    				
    				
    				
    				void lichtsensoren (void)
    				
    				{					  
    				writeInteger(readADC(ADC_LS_L), 10);
    				writeString_P(" - ");
    				writeInteger(readADC(ADC_LS_R), 10);
    				writeString_P("\n\r");
    				if (readADC(ADC_LS_L) > readADC(ADC_LS_R))
    				{
    				setLEDs(4);
    				setMotorPower(100,50);
    				}
    				else
    				{
    				setLEDs(32);
    				setMotorPower(50,100);
    				}
    				mSleep(100);
    				}
    				
    
    			
    
    
    			
    			
    					
    				
    
    			
    			int main(void)
    {
    	initRobotBase(); 
    	
    	setLEDs(0b111111);
    	writeChar('\n');
        writeString_P("RP6 controlled by RC5 TV Remote\n");
    	writeString_P("___________________________\n");
    	mSleep(500);	 
    	setLEDs(0b000000); 
    	powerON();
    	
    	
    	startStopwatch2();// Stopuhr 2 wird gestartet
    	
    	// Set the RC5 Receive Handler:
    	IRCOMM_setRC5DataReadyHandler(receiveRC5Data);
    	
    	
    	// Main loop 
    	while(true) 
    	{
    	if(modus2linieverfolgen==1)
    		{
    		setMotorPWM();
    		lichtsensoren();
    		
    		}
    	
    		task_RP6System();
    		
    		// Motion Control tasks etc.
    	}	  // "
    		//Reset();	
    	
    	return 0;
    }
    Geändert von radbruch (27.05.2011 um 16:25 Uhr) Grund: Code-Tags richtig eingefügt.

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von SlyD
    Registriert seit
    27.11.2003
    Ort
    Paderborn
    Alter
    40
    Beiträge
    1.516
    Bitte im Forum [ code ] tags verwenden.


    Da Du direkt die PWM Werte mit deiner eigenen setMotorPWM Funktion änderst (ohne die normale Geschwindigkeitsregelung) darfst Du task_RP6System(); nicht verwenden da darin die MotionControl funktion aufgerufen wird.
    Das funktioniert dann natürlich nicht weil zwei verschiedene Funktionen die PWM Werte ändern...

    Oh moment ich sehe gerade du verwendest auch zustäzlich noch setMotorPower - die macht das gleiche wie Deine setMotorPWM Funktion hat aber den Vorteil das die PWM Werte sanft geändert werden und nicht abrupt.
    Da steht übrigens in der Doku auch dabei das man die nicht verwenden darf wenn die Geschwindigkeitsregelung benutzt wird.

    setMotorPWM, setMotorPower und task_MotionControl werden also gleichzeitig verwendet - vertragen sich aber überhaupt nicht untereinander.

    In der MotionControl Funktion sind diverse Fehlerabfragen drin und die schalten dann aus gutem Grund vorsichtshalber die Motoren aus.


    Gibt es einen bestimmten Grund warum Du nicht die normalen Funktionen zur Geschwindigkeitsregelung aus der RP6Lib verwendest?
    Falls nein, dann solltest Du das mal lieber ändern (also die setMotorPWM / Power Aufrufe durch moveAtSpeed(links, rechts) ersetzen - dann MUSS die task_RP6System natürlich da bleiben wo sie ist).


    MfG,
    SlyD

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    18.05.2011
    Ort
    Mannheim
    Beiträge
    11
    Hi slyd danke für die schnelle antwort,
    wie meinst du das mit [code] tags?
    Der fehler ist mir jetzt aufgefallen nachdem du es sagst ,stimmt in der Doku steht das setMotorPWM und task_Motioncontrol sich nicht vertragen.
    Ich habe aus dem grund die setMotorPower verwendet da ich nicht ganz verstanden habe wie die geschwindigkeitsregelierung in der RP6LiB funktionieren.
    Werde mich mal heute wieder dran wagen mal sehen was der tag so bringt danke dir slyd denke das ich es jetzt hinkriege wenn nicht,
    muss ich dich oder andere noch nerven.
    Ich denke habe jetzt schon viel geschafft da ich zur zeit auch noch viele Prüfungen habe wird der Robby ein bisschen vernachlässigt.
    Danke dir erst mal werde demnächst wieder berichten vielleicht klappt es heute abend.

  4. #4
    Erfahrener Benutzer Roboter Genie Avatar von SlyD
    Registriert seit
    27.11.2003
    Ort
    Paderborn
    Alter
    40
    Beiträge
    1.516
    Kein Problem.


    > wie meinst du das mit [code] tags?

    Na um Code

    Code:
               while(true) 
                             readTheManual();
    so darzustellen das die Formatierung erhalten bleibt sonst ist das total unübersichtlich.

    das setMotorPWM und task_Motioncontrol sich nicht vertragen.
    Ich habe aus dem grund die setMotorPower verwendet
    uh nö da haste immer noch was falsch verstanden setMotorPWM ist keine Funktion aus der RP6Lib und kommt dementsprechend auch nicht in der Doku vor. Die hast Du da selbst in Deinen Code eingefügt (wahrscheinlich von radbruch hier aus dem Forum kopiert die hat er aber aus ganz anderen Gründen geschrieben).
    setMotorPower macht wie gesagt was ganz ähnliches, nur besser

    Du musst aber moveAtSpeed verwenden.

    MfG,
    SlyD

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    18.05.2011
    Ort
    Mannheim
    Beiträge
    11
    ja stimmt ich habe es von radbruch um zu testen als erstes mal und die funktion übersichtlicher ist finde ich.
    okey war aber dann doch nicht schlecht es von radbruch zu benutzen.
    Mir fehlen halb noch so paar übungen in sachen c werde mich aber dranhalten wenn mann es versteht macht es sogar spaß wenn
    der erfolg dann da ist .
    Danke dir erstmal bin wieder dran die sachen umzuändern.
    werde es mal posten demnächst danke dir vorerst.

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    18.05.2011
    Ort
    Mannheim
    Beiträge
    11
    Hier ist der gesamte code scheint noch ein fehler drin zu sein.
    Code:
    #include "RP6RobotBaseLib.h" 
    
    #define RC_PROMO8
    
    
    #ifdef RC_PROMO8
    
    
    #define RC5_KEY_vorwaertsm		2
    #define RC5_KEY_rueckwaertsm	8
    #define RC5_KEY_linksm			4
    #define RC5_KEY_rechtsm			6
    #define RC5_KEY_Ledanm			32
    #define RC5_KEY_Ledausm			33 
    #define RC5_KEY_modus1fernbedienung	7
    #define RC5_KEY_modus2linieverfolgen 9
    
    
    #endif
    
    
    uint8_t vorwaertsm;
    uint8_t rueckwaertsm;
    uint8_t rechtsm;
    uint8_t linksm;
    uint8_t	Ledanm;
    uint8_t	Ledausm;
    uint8_t	Resetm;
    uint8_t mleftptmp;
    uint8_t mrightptmp;
    uint8_t power_links; 
    uint8_t power_rechts;
    uint8_t mleft_ptmp; 
    uint8_t mright_ptmp;
    
    uint8_t modus1fernbedienung;
    uint8_t modus2linieverfolgen;
    
    
    
    void ruecksetzen(void)
    			{
    				if(getStopwatch2() > 200)
    					{
    					vorwaertsm=0;
    					rueckwaertsm=0;
    					linksm=0;
    					rechtsm=0;
    				
    					setStopwatch2(0);
    					}
    			
    			}
    
    
    void receiveRC5Data(RC5data_t rc5data)
    
    	
    		{writeString_P("Toggle Bit:");
    		writeChar(rc5data.toggle_bit + '0');
    		writeString_P(" | Device Address:");
    		writeInteger(rc5data.device, DEC);
    		writeString_P(" | Key Code:");
    		writeInteger(rc5data.key_code, DEC);
    		writeChar('\n');
            
            
            
    		
    		switch(rc5data.key_code)
    		
    			{
    			case RC5_KEY_vorwaertsm:
    					writeString_P("vorwaertsm: ");
    					writeIntegerLength(vorwaertsm, DEC, 4);
    					writeChar('\n');
    					writeChar('\n');
    					vorwaertsm=1;								//vorwärts fahren
    					if(vorwaertsm==1&&modus1fernbedienung==1)
    					{
    					move(200,FWD,DIST_MM(150),0);
    					}
    					break;
    			case RC5_KEY_rueckwaertsm:
    					writeString_P("rueckwaertsm: ");
    					writeIntegerLength(rueckwaertsm, DEC, 4);
    					writeChar('\n');
    					writeChar('\n');
    					rueckwaertsm=1;								//rückwärts fahren
    					if(rueckwaertsm==1&&modus1fernbedienung==1)
    					{
    					move(200,BWD,DIST_MM(150),0);
    					}
    					break;
    			case RC5_KEY_rechtsm:
    					writeString_P("rechtsm: ");
    					writeIntegerLength(linksm, DEC, 4);
    					writeChar('\n');
    					writeChar('\n');
    					rechtsm=1;								//rechts fahren
    					if(rechtsm==1&&modus1fernbedienung==1)
    					{
    					rotate(50, RIGHT, 55, 0);
    					}
    					break;
    			case RC5_KEY_linksm:
    					writeString_P("linksm: ");
    					writeIntegerLength(linksm, DEC, 4);
    					writeChar('\n');
    					writeChar('\n');
    					linksm=1;								//links fahren
    					if(linksm==1&&modus1fernbedienung==1)
    					{
    					rotate(50, LEFT, 55, 0);
    					}
    					break;
    			case RC5_KEY_Ledanm:
    					writeString_P("Ledanm: ");
    					writeIntegerLength(linksm, DEC, 4);
    					writeChar('\n');
    					writeChar('\n');
    					Ledanm=1;									// Ledan:
    					if(Ledanm==1&&modus2linieverfolgen==1)
    					{
    					DDRA|=(E_INT1);
    					PORTA|=E_INT1;
    					}
    					break;
    			case RC5_KEY_Ledausm:
    					writeString_P("Ledausm: ");
    					writeIntegerLength(linksm, DEC, 4);
    					writeChar('\n');
    					writeChar('\n');
    					Ledausm=1;
    					if(Ledausm==1&&modus2linieverfolgen==1)
    					{											// Ledaus:
    					DDRA|=(E_INT1);
    					PORTA &= ~E_INT1;
    					}
    					break;
    			case RC5_KEY_modus1fernbedienung:	
    					writeString_P("modus1fernbedienung: ");
    					writeIntegerLength(modus1fernbedienung,DEC, 4);
    					writeChar('\n');
    					writeChar('\n');											//Fernbedienung
    					modus1fernbedienung=1;
    					modus2linieverfolgen=0;
    					break;	
    				
    			case RC5_KEY_modus2linieverfolgen:	
    					writeString_P("modus2linieverfolgen: ");
    					writeIntegerLength(modus2linieverfolgen,DEC, 4);
    					writeChar('\n');
    					writeChar('\n');		                                   //Linieverfolgen
    					modus2linieverfolgen=1;
    					modus1fernbedienung=0;
    					break;
    			
    					
    				}
    
    			}
    			
    			
    			
    					
    	
    				
    				
    				
    				void lichtsensoren (void)
    				
    				{					  
    				writeInteger(readADC(ADC_LS_L), 10);
    				writeString_P(" - ");
    				writeInteger(readADC(ADC_LS_R), 10);
    				writeString_P("\n\r");
    				if (readADC(ADC_LS_L) > readADC(ADC_LS_R))
    				{
    				setLEDs(4);
    				moveAtSpeed(100,50);
    				}
    				else
    				{
    				setLEDs(32);
    				moveAtSpeed(50,100);
    				}
    				mSleep(0);
    				}
    				
    
    			
    
    
    			
    			
    					
    				
    
    			
    			int main(void)
    {
    	initRobotBase(); 
    	
    	setLEDs(0b111111);
    	writeChar('\n');
        writeString_P("RP6 controlled by RC5 TV Remote\n");
    	writeString_P("___________________________\n");
    	mSleep(500);	 
    	setLEDs(0b000000); 
    	powerON();
    	
    	
    	startStopwatch2();// Stopuhr 2 wird gestartet
    	
    	// Set the RC5 Receive Handler:
    	IRCOMM_setRC5DataReadyHandler(receiveRC5Data);
    	
    	
    	// Main loop 
    	while(true) 
    	{
    	if(modus2linieverfolgen==1)
    		{
    		
    		lichtsensoren();
    		
    		}
    	
    		task_RP6System();
    		
    		// Motion Control tasks etc.
    	}	  // "
    		//Reset();	
    	
    	return 0;
    }

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    18.05.2011
    Ort
    Mannheim
    Beiträge
    11
    Keiner eine Idee es kommt immer nach einer hewissen zeit motor current weis nicht was noch sich stören soll auser moveAtSpeed ist ja nichts mehr drin?
    Werde die nächsten tagen mich mal dran verweilen.

Ähnliche Themen

  1. Brauche Dringend HILFE!!!!
    Von RP6 Noob im Forum Robby RP6
    Antworten: 16
    Letzter Beitrag: 14.08.2009, 19:48
  2. Linienverfolgung... brauche hilfe
    Von Fouwe im Forum Asuro
    Antworten: 12
    Letzter Beitrag: 21.06.2009, 17:49
  3. Brauche dringend Hilfe!!!!!!!!!!
    Von leuchti im Forum Asuro
    Antworten: 10
    Letzter Beitrag: 26.06.2007, 12:21
  4. Brauche dringend Hilfe!!!!!! Linienverfolgung
    Von astrotiger im Forum Asuro
    Antworten: 5
    Letzter Beitrag: 12.04.2007, 12:34
  5. Brauche dringend hilfe!!!!!
    Von Swaliste im Forum PIC Controller
    Antworten: 1
    Letzter Beitrag: 15.01.2007, 11:12

Stichworte

Berechtigungen

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

12V Akku bauen