Touchscreen (tslib) "debounce"

OP Persönliche Seite #1672290
Lesenswert?
• ▲
▼
Hi,

ich bastle gerade mit der tslib herum. Dabei stosse ich auf folgendes 
Problem und weiss gerade nicht weiter.

Wenn ich auf den Touchscreen tippe, werden gleich mehrere Clicks 
registriert.

Meine Funktion zum abfragen sie so aus:
1
...
2
clock_t time1;
3
...
4
int getxy(int *x, int *y) {
5
    int ret=0;
6
    while( (time1 + (CLOCKS_PER_SEC)) <= clock() ) {
7
      printf("x");
8
    }
9
    ret = ts_read(ts, &samp, 1);
10
    if(ret < 0) { printf("can't read from touchscreen!\n"); return(-1); }
11
  if(debug) printf("ts_debug: x: %d y: %d\n", samp.x, samp.y);
12
    *x = samp.x;
13
    *y = samp.y;
14
    time1 = clock();
15
    return 0;
16
}
clock_t ist ein unsigned int und clock() liefert die Anzahl der clocks 
seit Programmstart zurück. CLOCKS_PER_SEC ist ein #define, welches die 
Anzahl der Clocks pro Sekunde enthält.
time1 ist eine globale Variable (clock_t).

Normalerweise sollte er doch hier warten bis er in der Funktion 
fortfährt, bis eine Sekunde seit dem letzten Click vergangen ist, nur 
leider funzt das nicht, er fährt einfach so weiter fort.

Irgendwo ist ein Denkfehler drin und ich finde ihn nicht, vielleicht 
könnt ihr mir ja helfen.
#1672332
Lesenswert?
• ▲
▼
Die while-Bedingung macht keinen Sinn. "time1 + (CLOCKS_PER_SEC)" ist 
ein konstanter Wert (konstant innerhalb der Schleife), der auf 
kleiner-gleich gegen einen sich vergrößernden Wert getestet wird. Daraus 
ergibt sich, dass die Bedingung entweder sofort false, oder für immer 
(zumindest bis zum Überlauf des von clock() gelieferten Wertes) true 
ist.
OP Persönliche Seite #1672549
Lesenswert?
• ▲
▼
Hmmm jetzt hab ich den Fehler entdeckt, das <= wurde zu > und er wartet 
mir brav die Sekunde.
Jetzt hab ich noch CLOCKS_PER_SEC/3, aber stosse auf ein weiteres 
Problem.

Er "erkennt" trotzdem immer mehrere Clicks auf einmal, die dann 
nacheinander, als stehen sie in einer Warteschlange, an getxy() gegeben 
werden.
Ich habe es schon mit einem dummy ts_read() in der Warteschleife 
versucht, aber dann kann ich nicht draufbleiben, es wird dann nur ein 
click gezählt, obwohl die getxy mehrfach aufgerufen wird.
Sprich ich habe einen Button, der eine Variable runterzählt. Ohne die 
Warteschleife kann ich auf dem Button bleiben und er zählt immer weiter 
runter (was so gewollt ist) und wenn ich den dummy-read einbaue, muss 
ich pro Runterzählen einmal drücken und wieder loslassen.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.