Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Digitale Uhr mit Arduino & Endlicher Automat (State Machine)

Komponenten und Zubehör

Arduino UNO (oder Mega, kompatibel zum LCD Shield) × 1
LCD Keypad Shield (16×2, 5 Tasten + Reset) × 1

Software & Tools

Projektbeschreibung

Eine **digitale Armbanduhr** (wie in den 90ern) mit Arduino und LCD-Keypad-Shield umsetzen – modelliert als **endlicher Automat (Finite State Machine)** mit **YAKINDU Statechart Tools**. Das Original-Modell stammt von David Harel (Statecharts-Papier).

Funktionsumfang der Uhr

Eingaben: On/Off, Mode, Set, Light On, Light Off

Modi (per Mode-Taste durchschalten):

Im Menü: On/Off konfiguriert, Set stellt Werte ein. Stoppuhr: Light On/Off = Start/Stopp, Set = Runde.

Zusatz: Stundenschlag (Piepser) & steuerbare Hintergrundbeleuchtung (initial nicht verdrahtet).

Das Zustandsdiagramm (Statechart)

Das Modell besteht aus grafischer (Zustandsdiagramm) und textueller Ebene (Definitionen). Hauptbereiche:

Interner Takt: every 100 ms / time += 1 → Zeitberechnung HH:MM:SS:

display.first  = (time / 36000) % 24;  // Stunden
display.second = (time / 600) % 60;    // Minuten
display.third  = (time / 10) % 60;     // Sekunden

Anzeige-Update via Operation updateLCD(first, second, third, text) bei jedem Zyklus.

LCD Keypad Shield – Tasten auslesen

Alle 5 Tasten liegen an **A0** über Spannungsteiler. Gemessene Werte (können variieren):

Keine Taste1023
Select640
Left411
Down257
Up100
Right0
#define NONE 0
#define SELECT 1
#define LEFT 2
#define DOWN 3
#define UP 4
#define RIGHT 5

static int readButton() {
  int result = analogRead(0);
  if (result < 50)  return RIGHT;
  if (result < 150) return UP;
  if (result < 300) return DOWN;
  if (result < 550) return LEFT;
  if (result < 850) return SELECT;
  return NONE;
}

State Machine anbinden (Entprellung & Events)

Generierter C++-Code stellt Interfaces bereit. Tasten werden **entprellt** (fallende Flanke nach 80 ms) und Events an die State Machine gesendet:

int oldState = NONE;
static void raiseEvents() {
  int buttonPressed = readButton();
  delay(80);
  oldState = buttonPressed;
  if (oldState != NONE && readButton() == NONE) {
    switch (oldState) {
      case SELECT: stateMachine->getSCI_Button()->raise_mode(); break;
      case LEFT:   stateMachine->getSCI_Button()->raise_set();  break;
      case DOWN:   stateMachine->getSCI_Button()->raise_light(); break;
      case UP:     stateMachine->getSCI_Button()->raise_light_r(); break;
      case RIGHT:  stateMachine->getSCI_Button()->raise_onoff(); break;
    }
  }
}

Hauptprogramm (main loop)


DigitalWatch* stateMachine = new DigitalWatch();
CPPTimerInterface* timer_sct = new CPPTimerInterface();
DisplayHandler* displayHandler = new DisplayHandler();

void setup() {
  stateMachine->setSCI_Display_OCB(displayHandler);
  stateMachine->setTimer(timer_sct);
  stateMachine->init();
  stateMachine->enter();
}

long current_time = 0, last_cycle_time = 0;
void loop() {
  raiseEvents();
  last_cycle_time = current_time;
  current_time = millis();
  timer_sct->updateActiveTimer(stateMachine, current_time - last_cycle_time);
  stateMachine->runCycle();
}

Beispiel ausführen

In YAKINDU IDE: File → New → Example → YAKINDU Statechart Examples → Next → Arduino - Digital Watch (C++)

30 Tage Testversion, danach kostenlose Lizenz für nicht-kommerzielle Nutzung.

Herstellungsprozess

  1. Endliche Zustandsautomaten designen: Vom Konzept zur Implementation
  2. Monitor-Ambilight selbst bauen mit Arduino Nano & WS2812B LEDs
  3. Arduino Digitaler Würfel: LCD-Würfel mit Zufallszahlen (1–6)
  4. Ultraschall-Schwebegerät mit Arduino bauen – Akustische Levitation Schritt für Schritt
  5. Intelligentes Voltmeter mit Arduino & Smartphone bauen – Einfaches DIY-Projekt
  6. Echtzeit-IoT-Herzfrequenzmonitor mit Arduino & MAX30100
  7. Arduino UNO WiFi Webserver: LED per Browser steuern
  8. Selbstbau-Tamagotchi: Digitales Haustier mit Arduino
  9. DIY Arduino Smartwatch: Eigene Apple-Watch-Alternative bauen
  10. Arduino-gesteuertes automatisiertes Chrome Dino-Spiel bauen