Forum: Compiler & IDEs Taster doppelt belegen


von Daniel S. (natrium)


Lesenswert?

Moin,

für meine Nixieuhr benötige ich einige Taster zum einstellen der Uhrzeit 
usw.
Da ich aber nicht so viele Taster haben möchte, würde ich gerne einige 
Taster doppelt belegen. Bisher stelle ich die Uhrzeit mit 2 Tastern, 
einer für die Minuten, und einer für die Stunden, nun möchte ich gerne, 
dass wenn man beide Taster gleichzeitig betätigt der AVR die Alarmzeit 
anzeigt. Wenn man nun wieder einen der beiden Taster drückt soll er nun 
nicht die Zeit verstellen, sondern eben die Alarmzeit. Nach 30 Sek soll 
er nun wieder die normale Uhrzeit anzeigen.

Leider reichen meine C Kenntnisse dafür nicht aus, daher hoffe ich, dass 
mir hier jemand weiterhelfen kann. Ich benutze einen ATmega und 
programmiere mit C.

Gruß, Natrium

von Fabian (Gast)


Lesenswert?

1
if ((PINB & 0x03) == 0x03)
2
  state = STATE_SET_ALARMCLOCK;
3
...
4
5
switch (state)
6
7
case STATE_NORMAL:
8
 ....
9
break;
10
11
case STATE_SET_ALARMCLOCK:
12
 ....
13
break;

Soll heißen: Mit sowenig Angaben können wir Dir nicht helfen. Da musst 
Du schon deinen Code mit anhängen.

von Peter D. (peda)


Lesenswert?

Nimm doch meine EiWoMiSa, da gibt es auch ne Lösung für 
Zweitastenerkennung:

Beitrag "Universelle Tastenabfrage mit 2 Tastenerkennung"


Peter

von Daniel S. (natrium)


Lesenswert?

Ich hab hier die relvanten Teile mal angehängt.
1
  set_bit(taster_hour_port,taster_hour_pin);              //Pullup einschalten
2
  set_bit(taster_minute_port,taster_minute_pin);          //Pullup einschalten
3
4
    if (bit_is_clear(taster_hour_pin, taster_hour_bit)) {        
5
    if (h<23) h++;
6
    else h=0;
7
    _delay_ms(10);
8
    while (bit_is_clear(taster_hour_pin, taster_hour_bit));      
9
    _delay_ms(10);
10
    ds1307_setTime(h,m,s);                      
11
    } 
12
13
    if (bit_is_clear(taster_minute_pin, taster_minute_bit)) {    
14
    if (m<59) m++;
15
    else m=0;
16
    _delay_ms(10); 
17
    ds1307_setTime(h,m,s);                      
18
    while (bit_is_clear(taster_minute_pin, taster_minute_bit));    
19
    _delay_ms(10);
20
    }


So sieht es bis jetzt aus, wo nur einfach die Stunden und Minuten 
hochgezählt werden. Der Teil steht in der Hauptschleife.

Gruß, Natrium


EDIT: Peters Code werde ich mir mal ansehen.

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.