Archiv verlassen und diese Seite im Standarddesign anzeigen : Fragen zu den Stopwatch
TrainMen
28.06.2009, 22: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, 23:42
Was "geht" denn nicht?
Sollen vielleicht die setLEDs auch noch in die Bedinungen rein?
Fabi
TrainMen
29.06.2009, 00: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, 18: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, 22: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, 23:41
Hast dus denn jetzt verstanden? Konnte ich deiner Antwort nicht so ganz entnehmen ;)
Fabi
TrainMen
30.06.2009, 13: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, 14: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, 15: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>
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.