PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Fragen zu den Stopwatch



TrainMen
28.06.2009, 21:44
Hi,

ich wollte mal mSleep durch die Stopwatches ersetzen, geht aber so nicht, warum nicht ?


#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);
}

Fabian E.
28.06.2009, 22:42
Was "geht" denn nicht?
Sollen vielleicht die setLEDs auch noch in die Bedinungen rein?

Fabi

TrainMen
28.06.2009, 23:35
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



#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

Fabian E.
29.06.2009, 17:55
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

TrainMen
29.06.2009, 21:58
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

Fabian E.
29.06.2009, 22:41
Hast dus denn jetzt verstanden? Konnte ich deiner Antwort nicht so ganz entnehmen ;)

Fabi

TrainMen
30.06.2009, 12:53
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

radbruch
30.06.2009, 13:54
Hallo

Wenn man stur die mSleep()s durch die Stopwatches ersetzt gewinnt man nichts:

// 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:


// 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

TrainMen
30.06.2009, 14:10
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>