Forum: Mikrocontroller und Digitale Elektronik Uhrzeitauswertung mit 1-maliger auslösung


von Matthias S. (mat-sche)


Lesenswert?

Hallo Gemeinde,

ich progge in Bascom und überlege mir gerade einen Weg wie ich eine 
bestimmte Aufgabe lösen kann.
Ich habe eine DCF77 geführte Uhr mit festgelegten Variablen. Zum 
Beispiel steht in der Variable _hour die Stunde drin.
Nun möchte ich z.Bsp. um 22 Uhr eine Aktion ausführen:
1
Select Case _hour
2
3
        Case 22 : If Rgb_auto = 1 Then
4
                      Rf12_data(2) = &H1                    ' Küchen Nachtbeleuchtung Nachtmodus => RGB ausschalten
5
                      Rf12_data(6) = &H2
6
                      Byteanzahl = 5
7
                      Slaveadress = 40
8
                      Gosub Sendsnapframe
9
                      Gosub Rf12_rxd_on
10
                  End If
11
         Case 6 : If Rgb_auto = 1 Then
12
                      Rf12_data(2) = &H1                    ' Küchen Nachtbeleuchtung Nachtmodus => RGB einschalten
13
                      Rf12_data(6) = &H3
14
                      Byteanzahl = 5
15
                      Slaveadress = 40
16
                      Gosub Sendsnapframe
17
                      Gosub Rf12_rxd_on
18
                  End If
19
   End Select
Nun habe ich hier das Problem, dass ja im Programmablauf die 
Caseschleife so lange es 22Uhr ist, gesprungen wird.
Die obrige Aktion soll aber nur einmal durchgeführt werden.
Ich könnte mir eine zusätzliche Variable anlegen, die nach der Aktion 
auf 1 gesetzt wird und zur bestimmten Zeit wieder zurück.
So bräuchte ich für jede Schaltaktion/Zeit jeweils eine Variable.

Wie löst Ihr solch eine Aufgabe, gibt es etwas eleganteres?

Grüße!

von Flip B. (frickelfreak)


Lesenswert?

Man braucht nur eine Variable mit der zuletzt überprüften uhrzeit. Die 
Abfrage ist dann wahr, wenn es 22 uhr ist, und es vorher noch nicht 
22uhr war.

If (hour==22 && hour_last==21)
{
  do_whatever();
}
hour_last=hour;

von Herbert (Gast)


Lesenswert?

Flip B. schrieb:
> If (hour==22 && hour_last==21)
> {
>   do_whatever();
> }
> hour_last=hour;

If (hour == 22  &&  hour_last == hour-1)
{
  do_whatever();
}
hour_last=hour;

von Matthias S. (mat-sche)


Lesenswert?

ok und danke!
Wie schaut es aber aus wenn man ich sage mal 100 Schaltzeiten benötigt, 
bedeutet das 100byte nur als "merker" benutzt werden.
Geht dies noch irgendwie "eleganter" für mehrer Schaltzeiten?

von Flip B. (frickelfreak)


Lesenswert?

nö, wenn  mehrere sachen geschaltet werden nutzen die alle die selbe 
variable. wird mit der aktualisierung der uhrzeit oder nach allen 
abfragen gesetzt. Es juckt doch net ob die mehrmals benutzt wird.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Matthias S. schrieb:
> Wie schaut es aber aus wenn man ich sage mal 100 Schaltzeiten benötigt,
> bedeutet das 100byte nur als "merker" benutzt werden.
> Geht dies noch irgendwie "eleganter" für mehrer Schaltzeiten?

 100 Schaltzeiten muss man irgendwo merken, meistens im Eeprom.
 Aber das kriegst du schlecht hin mit 1 Byte, es sei den 6 Minuten
 Abstand ist OK.

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.