Guten Tag.
Ich möchte einen Taster in meinen Schaltkreis implementieren.
Zu erst mal der bestehende Code
1 | #define F_CPU 1000000UL /* 1MHz */
|
2 | #include <avr/io.h>
|
3 | #include <avr/interrupt.h>
|
4 |
|
5 | // Defines:
|
6 | #define LED1 (1<<PD5)
|
7 | #define LED2 (1<<PD6)
|
8 | #define Taster1 (1<<PD2)
|
9 |
|
10 | //Variablen für die Zeit
|
11 | volatile unsigned int millisekunden;
|
12 | volatile unsigned int sekunde;
|
13 | volatile unsigned int minute;
|
14 | volatile unsigned int stunde;
|
15 |
|
16 | int main(void)
|
17 | {
|
18 |
|
19 | // LED-Pins als Ausgang definieren
|
20 | DDRD |= LED1 | LED2;
|
21 |
|
22 | // LED1 einschalten
|
23 | PORTD |= LED1;
|
24 |
|
25 |
|
26 | // Timer 1 konfigurieren
|
27 | TCCR1B = (1<<WGM12); // CTC Modus
|
28 | TCCR1B |= (1<<CS11); // Prescaler 8
|
29 | // ((1000000/8)/1000) = 125
|
30 | OCR1A = 125-1;
|
31 |
|
32 | // Compare Interrupt erlauben
|
33 | // Compare Interrupt erlauben
|
34 | TIMSK = (1<<OCIE1A);
|
35 |
|
36 | // Global Interrupts aktivieren
|
37 | sei();
|
38 | uint8_t isLedBlinking;
|
39 |
|
40 |
|
41 | while( 1 )
|
42 | {
|
43 | if( ( stunde == 1 && minute == 3 ) ||
|
44 | ( stunde == 4 && minute == 10 ) || ( stunde == 5 && minute == 15) )
|
45 | isLedBlinking = 1;
|
46 | else
|
47 | isLedBlinking = 0;
|
48 |
|
49 |
|
50 | if( isLedBlinking )
|
51 | {
|
52 | if( sekunde % 2 == 0 )
|
53 | PORTD &= LED1;
|
54 | else
|
55 | PORTD |= LED2;
|
56 | }
|
57 | else
|
58 | PORTD &= LED1;
|
59 |
|
60 | }
|
61 |
|
62 |
|
63 |
|
64 | }
|
65 |
|
66 | /*
|
67 | Der Compare Interrupt Handler
|
68 | wird aufgerufen, wenn
|
69 | TCNT0 = OCR0A = 125-1
|
70 | ist (125 Schritte), d.h. genau alle 1 ms
|
71 | */
|
72 | ISR(TIMER1_COMPA_vect)
|
73 | {
|
74 | millisekunden++;
|
75 | if(millisekunden == 1000)
|
76 | {
|
77 | sekunde++;
|
78 | millisekunden = 0;
|
79 | if(sekunde == 60)
|
80 | {
|
81 | minute++;
|
82 | sekunde = 0;
|
83 | }
|
84 | if(minute == 60)
|
85 | {
|
86 | stunde++;
|
87 | minute = 0;
|
88 | }
|
89 | if(stunde == 24)
|
90 | {
|
91 | stunde = 0;
|
92 | }
|
93 | }
|
94 | }
|
Wie man sieht, wird eine LED bei 1h3m, 4h3m, 5h3m sekündlich blinkend
geschaltet. Ich möchte erreichen, dass ein Taster geschaltet wird, der
zwischen verschiedenen "Modi" schaltet:
Der Taster betätigt eine Variable (ich weiß, muss entprellt werden).
Wenn taster1 einmal gedrückt == Variable zählt auf 1 hoch.
wenn variable auf 1, dann LED1 blinkt 2 mal und LED2 geht halbstündlich
in einer minute sekündlich blinkend an.
Wenn taster1 Variable auf 2 (2x gedrückt) LED1 blinkt 3 mal, LED2 geht
stündlich sekündlich blinkend an.
Wenn taster 1 variable auf 3 (3"") LED1 blinkt 4 mal, LED2 geht
2stündlich sekündlich an.
Ich hoffe ihr versteht was ich meine, mein problem ist jetzt, wie ich
das genau anstelle. Ich würde mich über Tipps freuen :-)
Danke!