-         

Ergebnis 1 bis 9 von 9

Thema: Fragen zu den Stopwatch

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.05.2009
    Ort
    Berlin
    Beiträge
    450

    Fragen zu den Stopwatch

    Anzeige

    Hi,

    ich wollte mal mSleep durch die Stopwatches ersetzen, geht aber so nicht, warum nicht ?
    Code:
    #include "RP6RobotBaseLib.h" 
    int main(void) 
    { 
    initRobotBase();
      startStopwatch1();
      startStopwatch2();
      startStopwatch3();
       while(true) 
       { 
          if(getStopwatch1() > 150) { writeString_P("1 ist 150:"); writeString_P("\n");setStopwatch1(0);}
         //mSleep(150);
    	 setLEDs(0b010010);
    	
    	if(getStopwatch2() > 150) { writeString_P("2 ist 150:"); writeString_P("\n");setStopwatch2(0);}
    	// mSleep(150);
         setLEDs(0b100100); 	
        
        if(getStopwatch3() > 150) { writeString_P("3 ist 150:"); writeString_P("\n");setStopwatch3(0);}
    	// mSleep(150);
    	 setLEDs(0b000000);
    
       } 
       return(0); 
    }

  2. #2
    RN-Premium User Roboter-Spezialist
    Registriert seit
    21.04.2009
    Beiträge
    522
    Was "geht" denn nicht?
    Sollen vielleicht die setLEDs auch noch in die Bedinungen rein?

    Fabi

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.05.2009
    Ort
    Berlin
    Beiträge
    450
    Hi
    sorry was hab ich da denn reingestellt, also ohne die Stopwatches mit mSleep ist es ein lauflicht, mit den Stopwatches nur wildes geflacker
    so hier der code der nicht funktioniert

    Code:
    #include "RP6RobotBaseLib.h" 
    
    int main(void) 
    { 
    initRobotBase();
      startStopwatch1();
      startStopwatch2();
      startStopwatch3();
    		
    	
       while(true) 
       { 
      
        if(getStopwatch1() > 150) { setLEDs(0b010010);setStopwatch1(0);}
         //mSleep(150);
    	 //setLEDs(0b010010);
    	
    	if(getStopwatch2() > 150) { setLEDs(0b100100);setStopwatch2(0);}
    	// mSleep(150);
        // setLEDs(0b100100); 	
        
        if(getStopwatch3() > 150) { setLEDs(0b000000);setStopwatch3(0);}
    	// mSleep(150);
    	// setLEDs(0b000000);
    
    	
       } 
       return(0); 
    }
    Trainmen

  4. #4
    RN-Premium User Roboter-Spezialist
    Registriert seit
    21.04.2009
    Beiträge
    522
    Das Problem ist die Logik dahinter. Überleg dir mal was da genau passiert. Du startest zur selben Zeit alle drei Stopwatches. Daher sind auch alle drei Bedingungen mehr oder weniger zur gleichen Zeit erfüllt. Du müsstest die Stopwatches 2 und 3 jeweils in der vorherigen Bedingung starten vom Prinzip her.

    Fabi

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.05.2009
    Ort
    Berlin
    Beiträge
    450
    hi Fabian,
    genau und nur darum ging es, um die Logik.
    es wird eine Pause gemacht genau 150 ms, also nehme ich eine Stopuhr und gucke einfach nach wann 150 ms um sind, nee eben nicht, ich muss ja jetzt auch daran denken, was zu machen bis 150 ms um sind.
    Es war nur ein Gespräch, so beim Einkaufen, am Rechner nervte es mich dann das ich es nicht hinbekam.
    Trainmen

  6. #6
    RN-Premium User Roboter-Spezialist
    Registriert seit
    21.04.2009
    Beiträge
    522
    Hast dus denn jetzt verstanden? Konnte ich deiner Antwort nicht so ganz entnehmen

    Fabi

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.05.2009
    Ort
    Berlin
    Beiträge
    450
    hi Fabian,
    hmm, was soll ich denn verstehen ?
    das es um eine logische abfolge geht, war uns schon klar.
    Du hast nicht verstanden um was es uns ging, wir wollten einfach nur mSleep ersetzen und waren der Meinung das ist "nur mal so" einfach ist. Nein eben nicht, man muß da schon mehr drüber nachdenken.
    Trainmen

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

    Wenn man stur die mSleep()s durch die Stopwatches ersetzt gewinnt man nichts:
    Code:
    // Lauflicht mit Stopwatch (blockierend)
    
    #include "RP6RobotBaseLib.h"
    
    int main(void)
    {
    	initRobotBase();
    	startStopwatch1();
    	startStopwatch2();
    	startStopwatch3();
    
    
    	while(true)
    	{
    
    		setStopwatch1(0);
    		while(getStopwatch1() < 150);
    		setLEDs(0b001001);
    
    		setStopwatch2(0);
    		while(getStopwatch2() < 150);
    		setLEDs(0b010010);
    
    		setStopwatch3(0);
    		while(getStopwatch3() < 150);
    		setLEDs(0b100100);
    	 
          task_RP6System(); // wird alle 3*150ms aufgerufen
    
       }
       return(0);
    }
    Der Vorteil der Stopwatches ist die nicht blockierende Anwendung:

    Code:
    // Lauflicht mit Stopwatch (nicht blockierend)
    
    #include "RP6RobotBaseLib.h"
    
    uint8_t step;
    
    int main(void)
    {
    	initRobotBase();
    	step=0;
    	startStopwatch1();
    
    	while(true)
    	{
    
    		if(getStopwatch1() > 150)
    		{
    			setStopwatch1(0);
    			step++;
    			if(step > 3) step=0;
    
    			if(step==0) setLEDs(0b000000);
    			if(step==1) setLEDs(0b001001);
    			if(step==2) setLEDs(0b010010);
    			if(step==3) setLEDs(0b100100);
    		}
    
          task_RP6System(); // wird bei jedem Schleifendurchgang aufgerufen
    
       }
       return(0);
    }
    (beides nicht getestet!)

    Gruß

    mic

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

  9. #9
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.05.2009
    Ort
    Berlin
    Beiträge
    450
    Hi,
    ja genau, wir wollten das "stur" ersetzen um eine nicht blockierende Lauflichtversion zu haben, nur scheiterte es bei uns an Logik und Programmierkentnisse. Ich denke deine werden funktionieren ich guck sie mir heute Nacht mal an.
    Trainmen

    tief in der Nacht
    na klar funktioniert es =D>

Berechtigungen

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