Stoppuhr für den Feuersport via Arduino


  • Die Feuerwehr hat jedes Dorf oder einen Teil der Stadt.
  • Dorfwochenwettbewerbe finden jede Woche statt, besonders im Sommer, und die Teams erzielen wertvolle Punkte, Erfolge und Misserfolge, die in Hundertstel- oder Tausendstelsekunden entschieden werden.
  • Die Stoppuhr verwendet Millis, einen internen Arduino-Timer, der die Anzahl der Millisekunden seit dem Start des Prozessors zurückgibt.
  • Somit können wir die Zeit mit 3 Dezimalstellen messen (1000 ms = 1 Sekunde).
  • Die Systemlogik wird jede Millisekunde ausgeführt!
  • Systemfunktionalität
  • Die Stoppuhr startet mit der Taste, die zweite Taste kann die Uhrzeit zurücksetzen.
  • 2 Schaltkontakte an den Zielen werden aktiviert, wenn das Ziel fällt, der Strom der linken / rechten Stoppuhr stoppt.
  • (Teil der Zeitsystemlogik)

  • (Senden von Daten an die Anzeigezeile)
  • Was verwendet das Projekt nach der technischen (Hardware-) Projektseite?
  • Arduino oder eigenständiger AtMega-Chip
  • 16x2 oder 20x4 LCD Display mit I2C Konverter
  • 2 Knöpfe
  • 2 Schaltkontakte
  • Stoppuhr in Aktion:

    Stoppuhrlogik - bis zu Zehntel - kann für Ihr Projekt in Tausendstel bearbeitet werden


    #include <Wire.h>
    #include <LiquidCrystal_I2C.h>
    LiquidCrystal_I2C lcd(0x27, 16, 2); //I2C adresa, stlpce, riadky, pouziva sa i 0x3F pre displej
    const int spustacresettlacidlo = 12;
    unsigned long lastPressedspustacresettlacidlo = 0; //berie cas z millisu - unsigned long
    boolean run = false;         //bezi cas?
    int spustacresettlacidloState = HIGH;
    int spustacresettlacidloCurrState = HIGH;
    long timer = 0; //The timer
    int second = 0;
    int minute = 0;
    int tenth = 0;
    void setup() {
      lcd.begin();
      lcd.backlight();
      pinMode(spustacresettlacidlo, INPUT_PULLUP);
      lcd.setCursor(0, 0);
      lcd.print("00:00:0");
    }
    
    void tickClock() {
      Serial.println(millis() / 10);
      if ((timer - millis() / 100) >= 100 || timer == 0) {
        tick();
        timer = millis() / 100;
      }
    }
    
    void loop() {
      tickClock();
      spustacresettlacidloState = digitalRead(spustacresettlacidlo);
      checkStart();
    }
    
    void checkStart() {
      if (spustacresettlacidloState != spustacresettlacidloCurrState) {
        if (spustacresettlacidloState == LOW && (millis() - lastPressedspustacresettlacidlo) > 100 || lastPressedspustacresettlacidlo == 1) {
          lastPressedspustacresettlacidlo = millis();
          run = !run;
        }
      }
      spustacresettlacidloCurrState = spustacresettlacidloState;
    }
    
    
    void tick() {
      if (run) {
        updateLCD();
        if (tenth == 9) {
          tenth = 0;
          if (second == 59) {
            second = 0;
            minute++;
          } else {
            second++;
          }
        } else {
          tenth++;
        }
      }
    }
    
    void updateLCD() {
      lcd.setCursor(0, 0);
      if (minute < 10) {
        lcd.print("0");
      }
      lcd.print(minute, DEC);
      lcd.print(":");
      if (second < 10) {
        lcd.print("0");
      }
      lcd.print(second, DEC);
      lcd.print(":");
      lcd.print(tenth, DEC);
    }
    

    Lib (I2C) pre LCD 16x2, 20x4

    Scheme: