Inhaltsverzeichnis:

State Machine auf Arduino - eine Fußgängerampel - Gunook
State Machine auf Arduino - eine Fußgängerampel - Gunook

Video: State Machine auf Arduino - eine Fußgängerampel - Gunook

Video: State Machine auf Arduino - eine Fußgängerampel - Gunook
Video: State Machine - ganz einfach 2024, Juli
Anonim
State Machine auf Arduino - eine Fußgängerampel
State Machine auf Arduino - eine Fußgängerampel

Hallo! Ich zeige Ihnen, wie Sie mit YAKINDU Statechart Tools eine Fußgängerampel für Arduino in C++ mit einer endlichen Zustandsmaschine programmieren. Dies wird die Leistungsfähigkeit von State Machines demonstrieren und kann als Blaupause für weitere Projekte verwendet werden.

Lieferungen

Sie benötigen nur einen Arduino, einige Taster, LEDs, Jumper und Widerstände.

Hardware

  • 2x Taster
  • 2x Ampeln oder Sie können LEDs mit 220 Ohm Widerständen verwenden
  • 2x 10k Ohm Widerstände
  • Steckbrett
  • Jumper
  • Arduino Uno/Mega (oder ein anderes, das mindestens 8 GPIOs hat)

Software

  • YAKINDU Statechart-Tools
  • Eclipse C++ IDE für Arduino

Schritt 1: Definieren Sie, wie es funktioniert: Fußgängerampel

Zunächst müssen wir festlegen, wie die Fußgängerampel funktionieren soll. Ich habe versucht, die Stichpunkte zusammenzufassen:

  • Zwei Ampeln werden verwendet - eine für die Autos, die andere für die Fußgänger
  • Ampel kann per Taster eingeschaltet werden
  • Fußgänger können per Knopfdruck das Überqueren der Straße anfordern
  • Eine ausgeschaltete Ampel wird durch Blinken der beiden gelben LEDs angezeigt
  • Nach dem Einschalten wartet die Ampel 10 Sekunden im abgesicherten Modus
  • Nach dem abgesicherten Modus haben Autos immer eine Grünphase, bis ein Fußgänger eine Anfrage startet
  • Fußgängerüberfahrtsaufforderung wird durch Umschalten der gelben LED angezeigt

Darüber hinaus gibt es einige Zeitereignisse, die von der Funktionsweise einer Ampel abhängen.

Schritt 2: Bauen Sie die Schaltung auf

Baue die Schaltung
Baue die Schaltung

Beginnen wir mit dem Aufbau der Schaltung. In meinem Beispiel habe ich, wie Sie auf dem Vorschaubild sehen können, einen Arduino Mega 2560 verwendet, aber jeder andere Arduino mit mindestens acht GPIOs sollte in Ordnung sein. Außerdem habe ich bei Amazon einige 5V-Ampeln gekauft. Suchen Sie einfach nach Ampel Arduino. Ansonsten können Sie einfach sechs verschiedene LEDs verwenden. Außerdem benötigen Sie zwei Taster und zwei 10k Ohm Widerstände.

Die drei linken LEDs werden für den Autoverkehr verwendet und die drei rechten LEDs für die Fußgänger, wobei die gelbe eine Aufforderung anzeigen kann.

Schritt 3: Erstellen der Zustandsmaschine

Erstellen der Zustandsmaschine
Erstellen der Zustandsmaschine

Wie Sie sehen können, gibt es also zwei Hauptzustände mit zusammengesetzten Elementen - Zustand ein und Zustand aus. Sie können zwischen beiden Zuständen umschalten, indem Sie das Ereignis onOff verwenden, das mit der ON/OFF-Taste verdrahtet ist. Im Ausgangszustand, dem Aus-Zustand, beginnen beide gelben LEDs im Sekundentakt zu blinken. Nach dem Einschalten der Ampel startet sie im Safestate. Nach 10 Sekunden wird das typische Verhalten der Ampel gehandhabt. Die rote und gelbe LED leuchten im StreetPrepare-Zustand und die Ampel wird nach weiteren 2 Sekunden grün. Von nun an wartet der Zustandsautomat auf das Ereignis FußgängerRequest, das mit dem zweiten Button verbunden ist. Nach dem Senden des Ereignisses wird die Anfrage angezeigt, indem im PedWating-Zustand jede Sekunde die gelbe LED umgeschaltet wird. 7 Sekunden später wird die Ampel zuerst auf Gelb und dann auf Rot geschaltet, bis die Fußgänger im Zustand FußgängerGrün das Signal bekommen. Danach wird das PedestrianRed aktiviert und der Zyklus wiederholt sich. Dieser kann nur unterbrochen werden, indem die Ampel wieder ausgeschaltet wird.

Schritt 4: Ausführen des Beispiels

Schritt 5: Generierter C++-Code

Der generierte C++-Code ist ein klassischer Switch-Case, um die Logik der Zustandsmaschine zu handhaben. Dies ist nur ein Code-Snippet, wie es aussieht:

void TrafficLightCtrl::runCycle() { clearOutEvents(); for (stateConfVectorPosition = 0; stateConfVectorPosition < maxOrthogonalStates; stateConfVectorPosition++) { switch (stateConfVector[stateConfVectorPosition]) { case main_region_on_r1_StreetGreen: { main_region_on_r1_StreetGreen_react(true); brechen; } case main_region_on_r1_PedWaiting_r1_waitOn: { main_region_on_r1_PedWaiting_r1_waitOn_react(true); brechen; } Standard: Pause; } clearInEvents(); }

Schritt 6: Holen Sie sich das Beispiel

Das gesamte Beispiel ist bereit zum Kompilieren und Ausführen. Es wird mit YAKINDU Statechart Tools geliefert, die für die nicht-kommerzielle Nutzung kostenlos sind. Nach dem Download können Sie das Beispiel direkt in das Tool importieren:

Datei -> Neu -> Beispiel -> YAKINDU Statechart Beispiele -> Weiter -> Ampel (C++) für Arduino

> HIER können Sie die YAKINDU Statechart Tools herunterladen <<

Sie können mit einer 30-tägigen Testversion beginnen. Danach müssen Sie eine Lizenz erwerben, die für die nicht-kommerzielle Nutzung kostenlos ist!

Empfohlen: