Hallo,
ich bastel gerade etwas mit einem RTC und einem Arduino rum.
Die Beispiel Codes funktionieren auch soweit.
Jetzt wollte ich mir ein kleines Alarmprogramm schreiben, welches
bei einer bestimmten Uhrzeit, eine Aktion ausführt (LED einschalten
z.B.)
Die Ausgabe in dem Beispielcode sieht wie folgt aus:
tmElements_t tm;
if (RTC.read(tm)) {
Serial.print("Time = ");
print2digits(tm.Hour);
Serial.write(':');
print2digits(tm.Minute);
Serial.write(':');
print2digits(tm.Second);
Ich wollte jetzt die komplette Uhrzeit (tm.Hour:tm.Minute:tm.Second) in
eine Variable schreiben, so das ich sie abfragen kann ...
if (Time == 12:00:00){
Alarm
}
Kriege vom Compiler aber immer eine Fehlermeldung:
error: invalid conversion from 'const char*' to 'char'
Kenne mich damit leider noch nicht so richtig aus.
Kann mir jemand sagen, wie ich die drei Elemente Hour, Minute und Second
in
einer Variable schreiben kann ?.
Vielen Dank im voraus.
Lieben Gruß
Christian
Gast
#3733211
Vergleiche die einzelnen Elemente einfach separat:
1 | |
2 | |
3 | |
Gast
#3733219
Christian B. schrieb: > error: invalid conversion from 'const char*' to 'char' Du willst eine Variable (Time) mit einer Zeichenkette (String) vergleichen. Das geht nicht! Eher so:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
So müsste es besser gehen
Gast
#3733225
greg schrieb: > if (tm.Hour = 12 && tm.Minute = 0 && tm.Second = 0) { > ... > } Man bedenke das dieser Aufruf durchaus öfter vorkommt, wenn das Programm hier weniger als 1s für den Durchlauf benötigt! Ingo
Gast
#3733251
Ingo schrieb: > greg schrieb: >> if (tm.Hour = 12 && tm.Minute = 0 && tm.Second = 0) { >> ... >> } > Man bedenke das dieser Aufruf durchaus öfter vorkommt, wenn das Programm > hier weniger als 1s für den Durchlauf benötigt! > Das ist doch eine andere Baustelle. Polling ist sowieso eine sehr schlechte Idee.
Gast
#3733255
greg schrieb: > Polling ist sowieso eine sehr > schlechte Idee. Nicht wenn es in einer ISR stattfindet! Das ist das nämlich die Beste Idee!
Das Konstrukt 12:00:00 funktioniert nicht, wie oben erklärt (ich wusste gar nicht dass man einen string überhaupt ohne Anführungszeichen deklarieren kann) Es gibt das Standardformat Unix Time Stamp, das sind glaube ich die Millisekunden seit 1980 oder so, passt in einen long. Wenn du kleinere Zahlen benötigt bastel dein eigenes Format, entweder auch fortlaufend zB in Sekunden oder mit versetzten Stellen, also bei 12:00:00 entweder: 120000, das ist eindeutig, passt in uint32, hat aber Lücken in den Zahlen. A la Unix timestamp könntest du aber auch variablesek = 12*(24*60)+00*60+00 = 34560 (keine Gewähr im Kopf berechnet ;) ) somit müssten 24h sogar in 16 bit passen. Ich weiß nicht bei welcher Methode vergleiche und Manipulationen einfacher sind, Größer kleiner ist gleich geht beides normal, das erstellen der Zahl könnte per macro oder Funktion passieren. Auch eine rück Konvertierung sollte einfach gehen.
Gast
#3733259
greg schrieb: > Das ist doch eine andere Baustelle Und warum dies? Das ist genau die Baustelle in die er als nächstes gerät...
Lenny D. schrieb: > Das Konstrukt 12:00:00 funktioniert nicht, wie oben erklärt (ich wusste > gar nicht dass man einen string überhaupt ohne Anführungszeichen > deklarieren kann) Das hängt von der Programmiersprache ab. Lenny D. schrieb: > Es gibt das Standardformat Unix Time Stamp, das sind glaube ich die > Millisekunden seit 1980 oder so, Die Anzahl der Sekunden seit dem 01.01.1970 Bei Microsoft zählt es erst seit 1980
Dirk B. schrieb: > Bei Microsoft zählt es erst seit 1980 Oder seit 1601: http://msdn.microsoft.com/en-us/library/windows/desktop/ms724284%28v=vs.85%29.aspx
Hallo,
danke für all' Eure antworten.
Habe jetzt mal Ingos Vorschlag als erstes Versucht und klappt
auch soweit. Vor dem !Lock fehlte wohl noch eine öffnende Klammer.
if ((tm.Hour == 12) && (tm.Minute == 0) && (tm.Second == 0) && (!Lock)){
Ingo schrieb:
> static uint8_t Lock = 0;
> ...
> ...
>
> if ((tm.Hour == 12) && (tm.Minute == 0) && (tm.Second == 0) && !Lock)){
> Lock = 1;
> mach etwas nur einmal;
> }else if (tm.Second != 0){
> Lock = 0;
> }
Vielen Dank.
Gruß
Christian
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.