[C Code-Fehler]Taster Funktion funktioniert nicht. Warum?

Gast #4265780
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
}
#4265902
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren