Forum: Mikrocontroller und Digitale Elektronik Arduino Beste Lösung meinen Code um einen Taster zu erweitern


von Ardu (Gast)


Lesenswert?

Hi,

ich will einen weiteren Taster für "timeset - 1" nutzen, bin aber 
unsicher, wie man das am besten löst, wie es funktonieren kann ist mir 
klar, aber eben nicht, obs dann so ordentlich ist, würde den gesammten 
digitalRead-Prozess einfach kopieren, den Taster-Pin ändern und aus dem 
+ ein - machen. Denke das müsste irgendwie mit nem else kürzer gehen, 
komm aber nicht dahinter wie. Hoffe ihr könnt mir da mal eben helfen.

Mfg
1
      case 1: //Hour setting
2
        if (flash) {
3
          display.drawRect(15, 0, 13, 9, BLACK); //Flash cursor (5Hz)
4
        }
5
        if (!digitalRead(8) && (!flash)) { //Update setting at 5Hz rate if button held down
6
          timeset = t.hour; //Get the current hour and save in temporary variable
7
          timeset = timeset + 1; //Increment the hour at 5Hz rate
8
          if (timeset > 23) {
9
            timeset = 0; //Roll over hour after 23rd hour (setting done in 24-hour mode)
10
          }
11
          t.hour = timeset; //After each update, write the hour to the time structure
12
          set_rtc_field(t, hourset); //Write the set field only to the RTC after each update
13
        }
14
        break;

von Sascha (Gast)


Lesenswert?

Da das ganze ja scheinbar in 200ms Intervallen aufgerufen wird: Mach das 
so.

Begründung: Kostet praktisch keine Performance.

Und für Code der nur die Uhrzeit einstellen soll, muss man jetzt auch 
kein riesiges Fass aufmachen.

Wenn du mal was anderes hast: Normal liest man regelmäßig oder per 
Pin-INT alle Taster ein, speichert die in ne Variable und verwendet die 
dann im Code.

Hat den Vorteil dass Taster entprellen und einlesen zeitlich entkoppelt 
sind und dass man Programmlogik einfach von der Hardware abstrahieren 
kann.

Gerade bei OO Programmierung wichtig.

Bei kleineren Projekten kann man sich das aber auch mal ausnahmsweise 
schenken.

von Michael U. (amiga)


Lesenswert?

Hallo,

denke aber daran, daß Du das auch anpassen mußt:
1
          if (timeset > 23) {
2
            timeset = 0; //Roll over hour after 23rd hour (setting done in 24-hour mode)
3
          }

Gruß aus Berlin
Michael

von Ardu (Gast)


Lesenswert?

Danke.
Ich lerne noch, das hat nicht wirklich alles einen Sinn, noch nicht, 
will halt erstmal ein paar Funktionen und Methoden lernen.
Also die übliche Methode, die man zu Tastern allgemein so findet... ist 
wohl doch besser. Hab da noch ne "flash"-Funktion im Code, bin noch 
nicht sicher, wie wichtig das ist und wie ich eine saubere 
Aktualisierung sonst hinkriege, ohne dass das Display beim flackert, die 
flash-Funktion gehört zum Code-Teil, den ich irgendwo gefunden habe.

von Ardu (Gast)


Lesenswert?

Ja Michael, habs nur vergessen zu erwähnen, danke.

von Sascha (Gast)


Lesenswert?

!flash ist aber das Abprüfen einer Variablen. Das ist keine Methode, die 
da aufgerufen wird.

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.