- 12V Akku mit 280 Ah bauen         
Seite 3 von 3 ErsteErste 123
Ergebnis 21 bis 25 von 25

Thema: Testprogramm läuft nicht

  1. #21
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    21.04.2009
    Beiträge
    523
    Anzeige

    Powerstation Test
    Wenn du mit den task_xxx-Methoden arbeitest, darfst du nicht solange Sleeps einbauen... und warum rufst du nach jeder Änderung wieder task_motionControl auf?

    Fabi

  2. #22
    Neuer Benutzer Öfters hier
    Registriert seit
    19.04.2009
    Beiträge
    18
    Ohne die Sleeps funktioniert´s auch nicht:

    Code:
    #include "RP6RobotBaseLib.h"
    
    uint8_t rc5command;
    uint8_t obstrue;
    uint8_t SPEEDset;
    
    void RC5_COMMAND(RC5data_t rc5data)
    {
    	rc5command = rc5data.key_code;
    }
    /*void ACS_EVENT_HANDLER(void)
    {
    	if(obstacle_left || obstacle_right)
    	{
    		changeDirection(RIGHT);
    		writeString_P("!\n");
    		while(true)
    		{
    			if(!obstacle_left && !obstacle_right)
    			{
    				changeDirection(FWD);
    				break;
    			}
    		}
    	}
    }*/
    
    void ACS_EVENT_HANDLER(void)
    {
    	obstrue = 1;
    }
    
    int main(void)
    {
    	initRobotBase();
    	powerON();
    	setACSPwrHigh();
    	/*ACS_setStateChangedHandler(ACS_EVENT_HANDLER);*/
    	IRCOMM_setRC5DataReadyHandler(RC5_COMMAND);
    	uint8_t SPEED = 45;
    	
    	while(true)
    	{
    		task_motionControl();
    		task_ACS();
    		
    		if(rc5command > 0)
    		{
    			switch(rc5command)
    			{
    				case 32: // Vorwärtstaste
    					changeDirection(FWD); //Vorwärtsfahren
    					break;
    				case 33: //Rückwärtstaste
    					changeDirection(BWD); //Rückwärtsfahren
    					break;
    				case 17: //Volume -
    					changeDirection(LEFT);
    					break;
    				case 16: //Volume +
    					changeDirection(RIGHT);
    					break;
    				case 34: //SFI
    					if(SPEED < 160)
    					{
    						SPEED += 10; //Geschwindigkeit erhöhen
    					}
    					break;
    				case 47: //Swap
    					if(SPEED > 10)
    					{
    						SPEED -= 10; //Geschwindigkeit erniedrigen
    					}
    					break;
    				case 12: //OFF-Taste (Funktioniert noch nicht richtig)
    					SPEEDset = 0;
    					if(SPEED > 0) //Wenn Geschwindigkeit > 0
    					{
    						SPEED = 0;//setze Geschwindigkeit auf 0
    						SPEEDset = 1;
    					}
    					else if(SPEED == 0 && SPEEDset == 0)//Wenn Geschwindigkeit gleich 0
    					{
    						SPEED = 45;//Setze Geschwindigkeit auf 45
    					}
    			}
    			moveAtSpeed(SPEED,SPEED);
    			task_motionControl();
    			rc5command = 0;
    			if(obstrue == 1)
    			{
    				changeDirection(RIGHT);
    				startStopwatch1();
    				while(true)
    				{
    					task_motionControl();
    					if(getStopwatch1() >= 100)
    					{
    						changeDirection(FWD);
    						setStopwatch1(0);
    						break;
    					}
    				}
    				obstrue = 0;
    			}
    		}
    	}
    }

  3. #23
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    21.04.2009
    Beiträge
    523
    Wenn du die Registrierung des Eventhandlers ausklammerst kanns auch nicht gehen.

    Fabi

  4. #24
    Neuer Benutzer Öfters hier
    Registriert seit
    19.04.2009
    Beiträge
    18
    Zitat Zitat von Fabian E.
    Wenn du die Registrierung des Eventhandlers ausklammerst kanns auch nicht gehen.

    Fabi
    Die Zeile " ACS_setStateChangedHandler(ACS_EVENT_HANDLER);"ist jetzt nicht mehr auskommentiert, allerdings funktioniert das ganze immernoch nicht.

    Code:
    #include "RP6RobotBaseLib.h"
    
    uint8_t rc5command;
    uint8_t obstrue;
    uint8_t SPEEDset;
    
    void RC5_COMMAND(RC5data_t rc5data)
    {
    	rc5command = rc5data.key_code;
    }
    /*void ACS_EVENT_HANDLER(void)
    {
    	if(obstacle_left || obstacle_right)
    	{
    		changeDirection(RIGHT);
    		writeString_P("!\n");
    		while(true)
    		{
    			if(!obstacle_left && !obstacle_right)
    			{
    				changeDirection(FWD);
    				break;
    			}
    		}
    	}
    }*/
    
    void ACS_EVENT_HANDLER(void)
    {
    	obstrue = 1;
    }
    
    int main(void)
    {
    	initRobotBase();
    	powerON();
    	setACSPwrHigh();
    	ACS_setStateChangedHandler(ACS_EVENT_HANDLER);
    	IRCOMM_setRC5DataReadyHandler(RC5_COMMAND);
    	uint8_t SPEED = 45;
    	
    	while(true)
    	{
    		task_motionControl();
    		task_ACS();
    		
    		if(rc5command > 0)
    		{
    			switch(rc5command)
    			{
    				case 32: // Vorwärtstaste
    					changeDirection(FWD); //Vorwärtsfahren
    					break;
    				case 33: //Rückwärtstaste
    					changeDirection(BWD); //Rückwärtsfahren
    					break;
    				case 17: //Volume -
    					changeDirection(LEFT);
    					break;
    				case 16: //Volume +
    					changeDirection(RIGHT);
    					break;
    				case 34: //SFI
    					if(SPEED < 160)
    					{
    						SPEED += 10; //Geschwindigkeit erhöhen
    					}
    					break;
    				case 47: //Swap
    					if(SPEED > 10)
    					{
    						SPEED -= 10; //Geschwindigkeit erniedrigen
    					}
    					break;
    				case 12: //OFF-Taste (Funktioniert noch nicht richtig)
    					SPEEDset = 0;
    					if(SPEED > 0) //Wenn Geschwindigkeit > 0
    					{
    						SPEED = 0;//setze Geschwindigkeit auf 0
    						SPEEDset = 1;
    					}
    					else if(SPEED == 0 && SPEEDset == 0)//Wenn Geschwindigkeit gleich 0
    					{
    						SPEED = 45;//Setze Geschwindigkeit auf 45
    					}
    			}
    			moveAtSpeed(SPEED,SPEED);
    			task_motionControl();
    			rc5command = 0;
    			if(obstrue == 1)
    			{
    				changeDirection(RIGHT);
    				startStopwatch1();
    				while(true)
    				{
    					task_motionControl();
    					if(getStopwatch1() >= 100)
    					{
    						changeDirection(FWD);
    						setStopwatch1(0);
    						break;
    					}
    				}
    				obstrue = 0;
    			}
    		}
    	}
    }

  5. #25
    Neuer Benutzer Öfters hier
    Registriert seit
    19.04.2009
    Beiträge
    18
    Weiss keiner woran´s liegt?

Seite 3 von 3 ErsteErste 123

Berechtigungen

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

Labornetzteil AliExpress