-         

Ergebnis 1 bis 4 von 4

Thema: frage zu programm

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    26.01.2008
    Ort
    Allgäu
    Alter
    30
    Beiträge
    220

    frage zu programm

    Anzeige

    hallo leute, hab grad folgendes wahrscheinlich für die meisten von euch recht einfaches programm geschrieben..... nun würde ich gerne wissen warum das led lauflicht in diesem programm nicht funktioniert?

    #include "RP6RobotBaseLib.h"



    int main(void)
    {
    initRobotBase(); // Mikrocontroller initialisieren


    startStopwatch1(); // Stopwatch1 starten!
    powerON();


    uint8_t runningLight = 1;

    while(true)
    {move(60, FWD, DIST_MM(300), true);
    rotate(50, LEFT, 180, true);
    // Ein kleines LED Lauflicht:
    if(getStopwatch1() > 100) // Sind 100ms (= 0.1s) vergangen?
    {
    setLEDs(runningLight); // LEDs setzen
    runningLight <<= 1; // Nächste LED (shift Operation)
    if(runningLight > 32) // Letzte LED?
    runningLight = 1; // Ja, also wieder von vorn beginnen!
    setStopwatch1(0); // Stopwatch1 auf 0 zurücksetzen
    }
    }
    return 0;
    }

  2. #2
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.781
    Blog-Einträge
    8
    Hallo

    nun würde ich gerne wissen warum das led lauflicht in diesem programm nicht funktioniert?
    Du meinst vermutlich, warum die LEDs während der Fahrt nicht laufen. Das liegt am true in move() und rotate(). Mit diesen true wird der blockierende Modus dieser Funktionen eingeschaltet, das bedeutet, der RP6 macht nicht anderes bis das Ziel der jeweiligen Fahrt erreicht ist.

    Mit einem false als Parameter und dem Task-System des RP6 kann man das ändern. Allerdings muss man dann dafür sorgen, das der entsprechende Task (in diesem Fall "task_motionControl()") regelmässig aufgerufen wird:

    Code:
    #include "RP6RobotBaseLib.h"
    
    
    
    int main(void)
    {
    initRobotBase(); // Mikrocontroller initialisieren
    
    
    startStopwatch1(); // Stopwatch1 starten!
    powerON();
    
    
    uint8_t runningLight = 1;
    
    while(true)
    {
    	move(60, FWD, DIST_MM(300), false);
    	while(!isMovementComplete()) // solange wir fahren
    	{
    		// Ein kleines LED Lauflicht:
    		if(getStopwatch1() > 100) // Sind 100ms (= 0.1s) vergangen?
    		{
    			setLEDs(runningLight); // LEDs setzen
    			runningLight <<= 1; // Nächste LED (shift Operation)
    			if(runningLight > 32) // Letzte LED?
    			runningLight = 1; // Ja, also wieder von vorn beginnen!
    			setStopwatch1(0); // Stopwatch1 auf 0 zurücksetzen
    		}
       task_motionControl();
       }
    	rotate(50, LEFT, 180, false);
    	while(!isMovementComplete()) // solange wir fahren
    	{
    		// Ein kleines LED Lauflicht:
    		if(getStopwatch1() > 100) // Sind 100ms (= 0.1s) vergangen?
    		{
    			setLEDs(runningLight); // LEDs setzen
    			runningLight <<= 1; // Nächste LED (shift Operation)
    			if(runningLight > 32) // Letzte LED?
    			runningLight = 1; // Ja, also wieder von vorn beginnen!
    			setStopwatch1(0); // Stopwatch1 auf 0 zurücksetzen
    		}
       task_motionControl();
       }
    }
    return 0;
    }
    Gruß

    mic

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

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    26.01.2008
    Ort
    Allgäu
    Alter
    30
    Beiträge
    220
    danke für deine antwort hat mir weitergeholfen.... mich würde jetzt nur noch interessieren wie du auf while(!isMovementComplete()) kommst? hab ich des in der library übersehen oder woher hast du diese schleifenbezeichnung? gruß

  4. #4
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.781
    Blog-Einträge
    8
    Hallo

    Das ist eine kleine Funktion in der Lib:

    Code:
    /**
     * You can use this function to check if there is any movement going on or if
     * every operation like moving a specific distance or rotating has been finished. 
     */
    inline uint8_t isMovementComplete(void)
    {
    	return !(motion_status.move_L || motion_status.move_R);
    }
    Aus RP6RobotBaseLib.c v1.3 Zeile 736ff

    Hab' ich mal in den Demos gesehen (glaube ich).

    Gruß

    mic

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

Berechtigungen

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