[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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.