Timer Funktion
-
Hallo, ich bin gerade dabei mich etwas in das programmieren c einzuarbeiten.
Ich versuche gerade eine Stoppuhr über 5 Taster zu steuern und komme dabei nicht recht weiter.Dabei soll die Stoppuhr beim ersten drücken auf den Taster starten und beim zweiten drücken anhalten.
Dafür hatte ich an diesen Befehl gedacht: uint8_t checkPressedKeyEvent(void)
Diese Funktion prüft ob ein Taster gedrückt worden ist und gibt dann ein einziges mal
die Tastennummer zurück – im Gegensatz zu getPressedKeyNumber, wo die Tastennummer
ständig zurückgegeben wird. Das ist nützlich um in der Hauptschleife die
Tasten abzufragen ohne den Programmfluss zu unterbrechen.Meine Frage hierzu:
kann ich jetzt sagen der ausgegebene Taster(1) = 1 (beim 1. drücken)
Taster(1) = 2 (beim 2. drücken)... und dann mit einer if/else Funktion sagen: wenn der Wert = 1 ist -> start
wenn der Wert = 2 ist -> stoppwäre für Hilfe dankbar
-
Irgendwie falsches Forum oder...
-
klar kannst du das
so in etwa:
stopuhr_t stopuhr; char x = /*...*/; //kA, kenn die Fkt nicht - klingt nach unix-API?! if(x == 'a') stopuhr.start() if(x == 'b') stopuhr.stop(); if(x == 'c') stopuhr.reset(); if(x == 'd') stopuhr.show();
der Block geht auch über ein switch zu lösen...
die stopuhr geht ja eigtl relativ einfach zu implementieren, da brauchst du ja nur eine zeit speichern(bspweise die, die dir std::time() zurückgibt, wenn dir die genauigkeit reicht und du plattformunabhängig bleiben möchtest).bb
-
Hi,
#Balboa# schrieb:
Hallo, ich bin gerade dabei mich etwas in das programmieren c einzuarbeiten.
Gute Idee
#Balboa# schrieb:
Ich versuche gerade eine Stoppuhr über 5 Taster zu steuern und komme dabei nicht recht weiter.
Hier ein Ansatz mit zwei 'Tastern':
#include <stdio.h> #include <time.h> #include <conio.h> int main() { time_t start, stop; int flag = 0, c = 0, run = 1; char line[80] = {0}; double duration = 0.0; char* status[] = { "OFF ", "RUNNING" }, *fmt = "Satus: %s - Last measurement: %.0f Seconds.\r"; puts ( "Start/Stop: Enter. Quit: 'q'" ); do { sprintf ( line, fmt, status[flag], duration ); printf(line); while ( c != 'q' && c != 13 ) c = getch(); // Nicht ganz so portabel, aber chic! :) if ( c == 'q' ) run = 0; else flag ^= 1, c = 0; if ( flag ) time(&start); else time(&stop), duration = difftime ( stop, start ); }while(run); puts("\nGood bye!"); return 0; }
Gruß,
B.B.
-
Schonmal danke für die Antworten!
Also, so wie unskilled das beschreibt, habe ich mir das auch überlegt. Wenn ich das jetzt so ausführen möchte komme ich aber auf ein weiteres Problem.
Wie definiere ich, ob der Taster das erste, oder das 100ste mal gedrückt wurde!?
Wenn ich den Taster drücke, dann bekomme ich die Tastennummer ausgegeben z.B.
-> Taste 1
Diese kann ich jetzt definieren und sagen Taste 1 == 1.
Wenn ich jetzt erneut drücke bekomme ich wieder "Taste 1" ausgegeben.
"Taste 1 " ist ja nun schon mit 1 verküpft und kann nicht als 2 definiert werden.Falls ich jetzt if/ else verwenden will, kann ich also nur sagen if ==1, oder else >1!?
Kann mir jemand sagen, wie man das definieren kann?
-
#Balboa# schrieb:
Wie definiere ich, ob der Taster das erste, oder das 100ste mal gedrückt wurde!?
Garnicht. Wozu auch? Das 'definiert' der Benutzer. Wenn es dir wichig erscheint, kannst du zählen, wie oft eine Taste gedrückt wurde.
char x; unsigned zaehler_a = 0, zaehler_b = 0, .... ... if(x == 'a') { stopuhr.start(); zaehler_a++; if ( zaehler_a > 1000 ) puts("Poweruser modus entered!"); } if(x == 'b') { stopuhr.stop(); zaehler_b++; } ...