Forum: Mikrocontroller und Digitale Elektronik Fehlersuche 2 Tasten - 2 LED / Anfängerfrage


von Randy T. (peroja)


Angehängte Dateien:

Lesenswert?

Hallo,

Ich hab ein kleines Taster Problem.
Ich möchte 2 LED's unabhängig voneinander mittels 2 versch. tasten an 
und aus machen. Also taste 1 drücken Led1 = an und taste 1 nochmal 
drücken und Led1 aus. Das selbe mit Led 2

Nun hab ich das problem dass nur LED1 an und aus geht?
Beide tasten sind entprellt und genau gleich verdrahtet auf m 
breadboard.
LED ist auch richtig drinne....
Wenn jemand lust hat sich schnell meinen code anzusehen?
Wäre echt lieb.

Vielen Dank
Randy
1
#include <avr/io.h>
2
#include <util/delay.h>
3
#include <inttypes.h>
4
 
5
#define LED_AN(LED)  (PORTD |=  (1<<(LED)))
6
#define LED_AUS(LED)  (PORTD &= ~(1<<(LED)))
7
#define LED_TOGGLE(LED)  (PORTD ^=  (1<<(LED)))
8
9
#define LED1  PD0
10
#define LED2  PD1
11
12
13
// tester 1 
14
15
#define TASTER1  PD2
16
#define TASTER1_GEDRUECKT()  (PIND & (1<<TASTER1))
17
#define TASTE1_AUF 0
18
#define TASTE1_ZU  1
19
20
// taster 2
21
22
#define TASTER2  PD3
23
#define TASTER2_GEDRUECKT()  (PIND & (1<<TASTER2))
24
#define TASTE2_AUF 0
25
#define TASTE2_ZU  1
26
 
27
28
int main(void)
29
{
30
  uint8_t alter_tastenzustand1 = TASTE1_AUF;
31
  uint8_t alter_tastenzustand2 = TASTE2_AUF;
32
  DDRD &= ~(1<<TASTER1) | (1<<TASTER2);
33
  DDRD |= (1<<LED1) | (1<<LED2);
34
  
35
  
36
  while(1)
37
  {
38
39
  if (TASTER1_GEDRUECKT() && (alter_tastenzustand1 == TASTE1_AUF))
40
      {
41
       LED_TOGGLE(LED1);
42
  
43
    alter_tastenzustand1 = TASTE1_ZU;
44
      }
45
  
46
  if (!TASTER1_GEDRUECKT())
47
      alter_tastenzustand1 = TASTE1_AUF;
48
  }
49
50
// led 2
51
52
  if (TASTER2_GEDRUECKT() && (alter_tastenzustand2 == TASTE2_AUF))
53
      {
54
     
55
   
56
    LED_TOGGLE(LED2);
57
58
    alter_tastenzustand2 = TASTE2_ZU;
59
      }
60
  
61
  if (!TASTER2_GEDRUECKT())
62
      alter_tastenzustand2 = TASTE2_AUF;
63
  
64
65
66
67
}
von Karl H. (kbuchegg)


Lesenswert?

Rück mal deinen Code ordentlich ein, dann siehst du es selber.

Nach jeder { werden alle nachfolgenden Zeilen um 2 Stellen eingerückt. 
Die jeweils zugehörige } wird dann wieder 2 Stellen ausgerückt.
Und das ziehst du jetzt mal konsequent durch und siehst dir danach an, 
welche Programmteile innerhalb der zentralen while Schleife sind und 
welche nicht.
von Randy T. (peroja)


Lesenswert?

Hallo Karl,

Ja Logisch! Wenn ich die Schlaufe zumache nach dem ersten LED innerhalb 
des whiles geht Led2 natürlich nicht mehr!
OK vielen Dank. Problem gelöst!

Randy
von Karl H. (kbuchegg)


Lesenswert?

Was du lernen sollst:

Eine ordentliche konsequente Programmstruktur kann dir helfen Fehler zu 
vermeiden.
Also tu es! Nicht am Ende, wenn alles fertig ist, sondern von Anfang an. 
Dazu gehören unter anderem auch saubere Einrückungen. Sauberer Code, der 
auch optisch gut aufgebaut ist, ist ein Entwicklungswerkzeug und eine 
Hilfe. Und du willst doch jede Hilfe annehmen, die du kriegen kannst. 
Noch dazu wenn sie dir nichts kostet ausser ein paar Drücken auf die 
Leertaste.
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.