Einen Arduino programmieren.... Stoppuhr

Eine mögliche Lösung:

Ausgabe:

1:09
1:08
...
0:58
0:57
...
0:02
0:01
0:00

Aufgabe

Schreibe ein Programm für eine Stopp-Uhr

  • Die Stoppuhr zählt von 1 Minute 10 Sekunden zurück.
  • Die Uhr bleibt bei 0 Minuten 0 Sekunden stehen.
  • Das Programm soll einmal durchlaufen.

    Hinweise

    Befehlszeile:

    endet mit ';' oder '}'
    

    Variable int:

    int bedeutet ganze Zahlen
    von -32768 bis 32767
    

    Serielle Ausgabe:

    void setup() 
    {
      Serial.begin(9600);
      Serial.println("0:00");
    }
    

    Schleife:

    while (Bedingung stimmt)
    { 
      // Beginn der Schleife
      ... tue das ...
      // Ende der Schleife
    }
    

    Abfrage:

    if (Bedingung stimmt)
    { 
      // ja
      ... tue das ...
    } else {
      // nein
      ... tue das ...
    }
    
  • Lösungsansatz:

    Aufgabe

    Ändere das Programm für die Stopp-Uhr

  • Anfangswerte beim Start setzen.
  • Die Stoppuhr soll jeweils neu starten, wenn eine Taste gedrückt wird.
  • Die Tasterabfrage Tasterabfrage muss in der loop() erfolgen.
  • Verwende ein Unterprogramm.

    Hinweise

    Unterprogramm:

    void neu(int TEST)
    {
      // tue was mit der Variablen TEST
    }
    

    Tasterabfrage:

    // Der Taster wird an Pin 7 
    // und GND angeschlossen
    #define Pin_TASTER 7
    
    void setup() 
    {
      // Pin 7 auf HIGH = 1 setzen
      pinMode(Pin_TASTER, INPUT_PULLUP);
    
    }
    
    void loop() 
    {
      if (digitalRead(Pin_TASTER) == LOW) 
      {
        // Taster ist gedrückt
        delay(1000);
        // tue was
      }
    }
    
    
  • Lösungsansatz:

    Aufgabe

    Erhöhe die Genauigkeit

    Durch die Verwendung von delay(1000), ergibt sich eine Wartezeit von 1000 ms. Die Rechenzeit für die Abfragen werden aber nicht berücksichtigt! Die Stoppuhr läuft ungenau!

  • Timer setzen
  • Tasterabfrage
  • Uhr starten

    Bei jedem Tastenruck erfolgt ein Neustart der Uhr.

  • Zusatz: Ein vorzeitiger Neustart soll verhindert werden.

    Hinweise

    unsigned long last = 0;
    
    void setup() 
    {
      last = millis();
    }
    
    void loop() 
    {
      if (millis() - last >= 1000) 
      {
        // tue was jede Sekunde
      } 
      ...
      last = millis(); 
    }
    

    Lösung

    Mögliche Lösung für eine auf Null zählende Stoppuhr ohne 'delay' mit Start über einen 'Taster'.