Was "geht" denn nicht?
Sollen vielleicht die setLEDs auch noch in die Bedinungen rein?
Fabi
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); }
Was "geht" denn nicht?
Sollen vielleicht die setLEDs auch noch in die Bedinungen rein?
Fabi
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
TrainmenCode:#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); }
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
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
Hast dus denn jetzt verstanden? Konnte ich deiner Antwort nicht so ganz entnehmen
Fabi
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
Hallo
Wenn man stur die mSleep()s durch die Stopwatches ersetzt gewinnt man nichts:
Der Vorteil der Stopwatches ist die nicht blockierende Anwendung: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); }
(beides nicht getestet!)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); }
Gruß
mic
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
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>
Lesezeichen