%x, sprich "modulo x", ist der Rest bei Division durch x. %10 liefert also Ziffern von 0 bis 9. Erlauben willst du 7,8,9. Danach geht er wieder auf 0, also reicht der Test > 6.Code:if (soft_seconds%10 > 6)
Hallo allemiteinander,
für eine Uhr möchte ich eine Datumsanzeige machen, die alle 10s für 3s das Datum anzeigt. Da es sich um ein achtstelliges, einzeiliges LCD-Modul handelt, kann ich Zeit und Datum nicht gleichzeitig darstellen. Mit meiner Abfrage funktioniert das auch einwandfrei, allerdings bin ich der Meinung, dass die If-Abrage irgendwie einfacher machbar sein sollte:
Ich bin jetzt nicht der Held in Sachen C und funktionieren tuts ja auch, mich würde aber schon interessieren, ob das auch kürzer geht. Ich habe schon rumprobiert und z.B. den Inhalt vonCode:if (((soft_seconds >= 7) & (soft_seconds <= 9)) | ((soft_seconds >= 17) & (soft_seconds <= 19)) | ((soft_seconds >= 27) & (soft_seconds <= 29)) | ((soft_seconds >= 37) & (soft_seconds <= 39)) | ((soft_seconds >= 47) & (soft_seconds <= 49)) | ((soft_seconds >= 57) & (soft_seconds <= 59))) { sprintf(buffer, "%02d.%02d.%02d", date_D, date_M, date_Y); lcd_puts(buffer); }in char zu wandeln, den linken Teil abzuschneiden und dann für den Vergleich zu verwenden. Das ist aber noch aufwändiger und hat auch nicht geklappt.Code:soft_seconds
Für einen Tipp würde ich mich freuen.
Servus
Peter
%x, sprich "modulo x", ist der Rest bei Division durch x. %10 liefert also Ziffern von 0 bis 9. Erlauben willst du 7,8,9. Danach geht er wieder auf 0, also reicht der Test > 6.Code:if (soft_seconds%10 > 6)
Hallo ich würde versuchen die sekunden mit einem einzigen zähler (= 7) hochzuzählen: also sekundenzähler == 7 dann... datum zeigen für 3sec anzeigen. Gleichzeitig den zähler um +10 erhöhen (= 17) darauf wieder prüfen usw usw.... wenn zähler 57 dann ...datum zeigen und zähler wieder auf 7 setzen.
Mir fällt grad ein, du wirst doch nicht ständig aufs LCD schreiben, oder? Im Zeitmodus brauchst ja nur einmal pro Sekunde, im Datumsmodus sowieso nur einmal. Da wird man sicher was optimieren können. Was und wie hängt auch vom Rest des Codes ab.
Hi ichbinsisyphos,
danke für Deine Antwort.
Deine if-Abfrage funktioniert einwandfrei und mein Programm ist um 182 Bytes kleiner geworden
Modulo x - so einfach kanns sein...
Ich schreibe nur einmal pro Sekunde auf das Display, soft_seconds wird per Interrupt pro Sekunde um 1 erhöht.
Dank Dir, Du hast mir sehr weitergeholfen.
Servus
Peter
Lesezeichen