Forum: Mikrocontroller und Digitale Elektronik [C Code-Fehler]Taster Funktion funktioniert nicht. Warum?


von PoloShirt (Gast)


Lesenswert?

Moin,

ich kann leider nicht debuggen und finde den Fehler nicht in meiner 
selbst geschriebener Taster Funktion.

Das soll sie machen:

Ersten Tastendruck erkennen und return 1; machen.
Wenn die Taste gedrückt bleibt, für eine Zeit x immer return 0; zurück 
geben.
Nach Zeit x schell ein return 1; zurück geben, damit z.B. ein Counter 
schneller hochgezählt wird.

Wenn Taste nicht gedrückt ist, halt immer return 0;

Ich benutze ein Atmega128A, weil ich einige davon geschenkt bekommen 
habe.
Es sind 3 Taster angeschlossen (an PC4, PC5 und PC6). Interne PullUps 
sind an und der Schließer geht gegen Masse.

Habe da einige mehr return 0; drin, weil es einfach nicht 
funktioniert....
1
#define F_CPU 8000000UL
2
#include <util/delay.h>
3
#include <avr/io.h>
4
#define inputBit(port, mask) ((port) & (1<<mask))
5
6
volatile unsigned char debounce;
7
volatile unsigned char holdedPress;
8
volatile unsigned char fastPress;
9
10
char getTaster(char port, char pin)
11
{
12
  if((inputBit(port,pin)) == 0)
13
  {
14
    _delay_ms(1);
15
    debounce++;
16
    
17
    if((holdedPress == 1) && (fastPress == 1))
18
    {
19
      if(debounce == 10)
20
      {
21
        debounce = 0;
22
        return 1;
23
      }
24
      return 0;
25
    }
26
    
27
    if((holdedPress == 1) && (fastPress == 0))
28
    {
29
      if(debounce == 120)
30
      {
31
        holdedPress = 1;
32
        fastPress = 1;
33
        debounce = 0;
34
        return 1;
35
      }
36
      return 0;
37
    }
38
    
39
    
40
    
41
    if((holdedPress == 0) && (fastPress == 0))
42
    {
43
      if(debounce == 20)
44
      {
45
        debounce = 0;
46
        holdedPress = 1;
47
        fastPress = 0;
48
        return 1;
49
      }
50
      return 0;
51
    }
52
    return 0;
53
  }
54
55
  else
56
  {
57
    holdedPress = 0;
58
    fastPress = 0;
59
    return 0;
60
  }
61
62
  holdedPress = 0;
63
  fastPress = 0;
64
  
65
  return 0;
66
}

von PoloShirt (Gast)


Lesenswert?

und es sieht so aus, als würde er immer nur ganz schnell den ersten 
Tastendruck machen....

von Peter D. (peda)


Lesenswert?

Erstelle erstmal einen Programmablaufplan und spiele diesen durch.
Und erst, wenn der funktioniert, kann man anfangen, ihn in Code 
umzusetzen.
Und damit man später immer noch durchsieht, schreibt man natürlich noch 
Kommentare zum Code, wie er funktioniert.
Bzw. wenn Du Fragen hast, helfen die Kommentare einem anderen zu 
verstehen, was Du Dir gedacht hast, was der Code machen soll.

Das Hauptproblem von Anfängern ist, daß sie meinen, man könne einfach so 
drauflos schreiben und alles ist selbst kommentierend.

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.