Hallo,
ich will mir einen Wecker programmieren der durch die Tasten auf dem
SainSmart Keypad Shield gestellt werden können soll. Tasten einlesen
funktioniert ohne Probleme, auch das erstmalige Stellen ist kein
Problem. Ich will aber erst die Stunde einstellen, per Knopfdruck auf
die Minuten wechseln und dann eventuell per nochmaligen Knopfdruck
wieder auf die Stunden usw. falls etwas falsch eingestellt wurde.
Meine "Wechselfunktion" sieht folgendermaßen aus:(Und sry, ich checke
nicht ganz wie das Code formatieren funktioniert)
Ich denke, das meiste ist selbsterklärend. Es geschieht alles in einer
10ms Zeitscheibe. Die gedrückte Taste wird in key_10ms gespeichert.
Wenn wecker_einstellung_stunde true ist, soll man die Stunde einstellen
können.
Wenn wecker_einstellung_minute true ist, soll man die Minute einstellen
können.
Mit den Tasten 2 und 5 soll gewechselt werden.
Wenn jetzt aber wecker_einstellung_stunde true ist und ich
beispielsweise die 5 drücke, dann wird die if-Abfrage ausgeführt. Das
löst aber gleichzeitig die zweite If-Abfrage aus, da deren Bedingungen
ja in der ersten Abfrage gesetzt werden und ich lande wieder in der
Stundeneinstellung.
Ich weiß nicht wie ich das beheben soll.
Ich hoffe ich habe es nicht zu kompliziert erklärt und man kann mir
helfen :)
Stefan B. schrieb:> Ich denke, das meiste ist selbsterklärend.
Ich denke nicht.
Stefan B. schrieb:> if-Schleife
Endlich mal wieder eine Flasche Sekt aufmachen!
Mit if-Schleife lockt man immer wieder jemanden raus hier.
Stefan B. schrieb:> (Und sry, ich checke> nicht ganz wie das Code formatieren funktioniert)
Dann fang doch mal damit an?
Klaus W. schrieb:> Dann fang doch mal damit an?
Erledigt...
Klaus W. schrieb:> Endlich mal wieder eine Flasche Sekt aufmachen!> Mit if-Schleife lockt man immer wieder jemanden raus hier.
Willst du mir damit sagen, dass man if eig. nicht nimmt? Ok, falls das
jmd stört, es tut mir Leid ich weiß es aber nicht besser da ich ein
ziemlicher Anfänger in dem Gebiet bin...
Klaus W. schrieb:> Ich denke nicht.
Was nicht?
Stefan B. schrieb:> Klaus W. schrieb:>> Endlich mal wieder eine Flasche Sekt aufmachen!>> Mit if-Schleife lockt man immer wieder jemanden raus hier.>> Willst du mir damit sagen, dass man if eig. nicht nimmt? Ok, falls das> jmd stört, es tut mir Leid ich weiß es aber nicht besser da ich ein> ziemlicher Anfänger in dem Gebiet bin...http://if-schleife.de/
Gruesse
Th.
Ok, wurde behoben... In Zukunft überlege ich es mir ob ich im Forum nach
Hilfe fragen soll... Man weiß doch ganz genau was mit if-Schleife
gemeint ist... Das ist einfach nur absolut kindisch... Aber ich werde es
mir merken.
o, danke.
Wirklich verstanden habe ich es vielleicht nicht.
Aber fehlt dir einfach ein else vor dem zweiten if?
Also in der Art:
1
if(ersteBedingung...)
2
{
3
....
4
}
5
elseif(zweiteBedingung...)
6
{
7
....
8
}
Dann wird nur der erste Teil ausgeführt, wenn seine Bedingung passt.
Falls das nicht das Problem ist, wäre mehr Quelltext vielleicht
hilfreich. Dann sieht man eher, was du treibst.
Und dann: warum hast du zwei bool für die Unterscheidung, was gerade
eingestellt wird?
Wenn eine true ist, ist die andere automatisch false. Da würde ich nur
eine nehmen, und statt der zweiten bspw. einfach immer !dieerste
schreiben.
Stefan B. schrieb:> In Zukunft überlege ich es mir ob ich im Forum nach> Hilfe fragen soll... Man weiß doch ganz genau was mit if-Schleife> gemeint ist... Das ist einfach nur absolut kindisch... Aber ich werde es> mir merken.
Kein Grund für Bluthochdruck...
Wenn du dich ins Internet traust, darfst du nicht so zimperlich sein :-)
Sieh es als Bereicherung: wenn du in Zukunfst nicht mehr von einer
if-Schleife redest, wirst du eher ernst genommen.
Stefan B. schrieb:> Man weiß doch ganz genau was mit if-Schleife gemeint ist...
nicht jeder und deswegen die Antwort zum Lernen!
> Das ist einfach nur absolut kindisch...
zu schmollen statt anzunehmen, nennt sich Hilfe zur Selbsthilfe
So deutlich herausgestellt merkt man sich das eben leichter weil es
peinlich ist!
Stefan B. schrieb:> In Zukunft überlege ich es mir ob ich im Forum nach> Hilfe fragen soll...
warum? Magst du nichts dazulernen?
War ja nicht unbedingt böse gemeint und dazulernen kann jeder, der Eine
leicht der Andere schwer und manche brauchen deutliche Worte!
Klaus W. schrieb:> Aber fehlt dir einfach ein else vor dem zweiten if?
Oh gott, ja das ist das Problem... Jetzt funktioniert es, das else muss
ich bei meinem ganzen Rumprobieren(ich hab mich erst bei meinen ganzen
Unterscheidungen selbst nicht mehr ausgekannt :) ) aus Versehen entfernt
haben. Und dafür hab ich jetzt 2 Stunden verbraucht... Danke für deine
Hilfe.
Ach ja, die ganzen Unterscheidungen sind dafür gut, dass ich genau weiß
was gerade passieren soll, es ist für mich übersichtlicher als bei nur
einer Unterscheidung (hört sich komisch an, ist aber so).
Klaus W. schrieb:> Wenn du dich ins Internet traust, darfst du nicht so zimperlich sein :-)
Ok, wenn ich aber die ganze Zeit an so nem Problem rumtüfftle, das aus
obigem Grund nicht gelöst bekomme und mich dann erstmal jmd auf so eine
Kleinigkeit hinweist anstatt mir zu helfen, dann reagiere ich vielleicht
etwas gereizt wenn du verstehst was ich meine ;)
Stefan B. schrieb:> Ach ja, die ganzen Unterscheidungen sind dafür gut, dass ich genau weiß> was gerade passieren soll, es ist für mich übersichtlicher als bei nur> einer Unterscheidung (hört sich komisch an, ist aber so).
Dir muss es gefallen, und du musst dich darin zurechtfinden.
Stefan B. schrieb:> das else muss> ich bei meinem ganzen Rumprobieren(ich hab mich erst bei meinen ganzen> Unterscheidungen selbst nicht mehr ausgekannt :) ) aus Versehen entfernt> haben. Und dafür hab ich jetzt 2 Stunden verbraucht...
Weniger überflüssige Variablen würden die Übersicht erhöhen :-)
Deshalb nochmal (musst es ja nicht annehmen) die Idee im Sinne der
Lesbarkeit:
Nur eine bool, die ist genau dann true, wenn meinetwegen gerade Stunden
eingestellt werden können, und false, wenn es gerade um die Minuten
geht.
Dein gesamter Code oben reduziert sich dann auf:
1
if(key_10ms=='2'||key_10ms=='5')
2
{
3
aktuellerModusIstStunde=!aktuellerModusIstStunde;
4
}
Weniger zu lesen, und weniger Möglichkeiten einen Fehler zu machen.