Die Templates für Button und LED anwenden

Bei unseren ersten PEC-Übungen bauten wir die Beispiele mit den Templates PecPinOutput, welches wir für die Realisierung der LED nutzen, und PecPinInput, für die Realisierung des Tasters. Das reichte für die gestellte Anforderung auch völlig aus. Erweitern wir die Anforderungen werden die Möglichkeiten dieser beiden Templates schnell erreicht. Die scheinbar einfache Anforderung, dass der Taster zum Beispiel einen kurzen Click von längerem Halten unterscheiden können soll, verlässt den Bereich der trivialen Programmierung. Wenn jetzt noch die Anforderung besteht, dass die Mainloop (onWork) möglichst unbelastet bleiben soll damit dort weitere Verarbeitungsaufgaben ausgeführt werden können wird es selbst für manche erfahrene Programmierer diffizil.

Die Aufgabe

Entwickeln Sie eine Mikrocontrolleranwendung bei eine Mensch Maschine Schnittstelle lediglich mit einem Taster und einer LED realisiert werden soll. Der Anwender kann die gewünschte Systemfunktion durch kurzes betätigen (clicken) der Taste auswählen. Die StatusLED zeigt durch einen Blink-Code die ausgewählte Systemfunktion an. Durch langes Halten der Taste wird das System zurückgesetzt.

Theorie

Falls der Navigator nicht auf UML Pakete umgeschaltet, ist sollten Sie dies jetzt tun. Die benötigten Klassenkandidaten und die Anforderungen an diese ergeben sich aus der Aufgabenstellung:

  • Led, blinken, aus
  • Taster, clicken, halten

Navigieren wir zum Template ButtonClickAndHold. Für diesen Basisbaustein ergibt sich das folgende Gesamtbild:

Klassendiagramme sind die Konstruktionszeichnungen einer objektorientierten Anwendung. Kein Elektrotechniker würde sich mit der textuellen Beschreibung einer Schaltung zufrieden geben. Wehement würde er auf einen Schaltplan drängen. Fragt sich, warum sich manche Programmierer mit Nachdruck gegen die UML stemmen. Die Antwort ist unter Umständen recht trivial. Sie können die UML nicht lesen. Ein Elektroniklaie würde bei Vorlage eines Schaltplanes, diesen beiseite schieben und sich das ganze lieber in seiner Sprache erklären lassen. Unter anderem können wir Aussagen aus der obigen Darstellung entnehmen.

  • Die Klasse Button ist ein ButtonClickAndHold.
  • Es gibt eine Variante des Button die low activ arbeitet.
  • Alle Button besitzen unter anderem folgende Operationen
    • isPressed
    • waitForPress
    • onClick
    • onHoldStart
    • onHolding
    • onHoldEnd

Damit lässt sich doch unsere Aufgabe locker lösen. Die Operationen onClick und onHoldStart sollte genau das sein was wir suchen.

Vorbereitung

Falls Sie jetzt kein SiSy mit einem frischen PEC-Projekt vorliegen haben sollten Sie das jetzt vorbereiten. Ansonsten überspringen Sie diesen Absatz.

(Mit installiertem Flash kann man an dieser Stelle ein Video in dieser Web-Seite ansehen.)

Lösungsansatz

Erstellen Sie die Klassen StatusLED und Taster. Aggrigieren Sie diese im Controller. Ziehen Sie das Template PecButtonClickAndHold und PecLed in den neuen Entwurf. Verbinden Sie diese mit den Klasse StatusLED und Taste mit dem Verbindungstyp Realisierung.

Die neue LED ist offensichtlich doch recht sexy. Schauen wir uns für die Taste ebenfalls ein etwas höher entwickeltes Template an. Den PecButtonClickAndHold. Die spannensten Aspekte dieses Templates sind die Event Handler onClick und onHoldxx. Im nächsten Schritt wollen wir schauen wie viel Arbeit uns eine hoch entwickelte Klasse bzw. ein hochentwickeltes Template abnehmen kann. Wir stellen uns folgende Aufgabe:

  • wenn der Taster nur kurz gedrückt also geklickt wurde soll der Blink-Code einer LED um eins erhöht werden
  • wenn der Taster jedoch lange gedrückt also gehalten wird soll die Zweitbelegung der Tastenfunktion die LED komplett ausschalten

Das ist eigentlich eine recht knifflig zu programmierende Benutzerinteraktion. Schauen wir uns an wie das mit dem PEC-Template zu realisieren ist.

Realisierung

  • ziehen Sie ein Operation aus der Objektbibliothek auf die Klasse Taste

Im Folgenden wir Ihnen das UML-Tool SiSy einen Folge von Dialogen anbieten bei der Sie aufgefordert werden Operationen der Basisklassen zu überschreiben. Das istz genau der Punkt an dem Sie sich in das Ereignissystem des Framworks „reinhängen“. Indem Sie eine geeignete Operation überschreiben weisen Sie das system an, dass beim eintreten des entsprechenden Ereignisses Ihr spezifischer, individueller Code ausgeführt wird. Überschreiben Sie die Operationen onClick und onHoldStart der Klasse Taste.

Wenn Sie die entsprechenden Operationen überschrieben haben sollte Ihr Klassenmodell wie folgt aussehen. Beachten Sie die Signatur der Klasse Taste.

Ergänzen sie den Code der überschriebenen Event Handler wie folgt:

Taster::onClick
   app.statusLED.nextBlinkCode();
Taster::onHoldStart
   app.statusLED.off();

Test

Testen Sie diese Lösung.

Nur für das Protokoll. Die jetzt vorliegende Funktionalität wurde zu 99% vom Systemdesiner in Ihnen grafisch, mit der UML, über die Systemarchitektur gelöst. Der Programmierer in Ihnen musste 2, in Worten zwei Zeilen programmieren. Wer bis hier immer noch der Meinung ist, Mikrocontrollerprogrammierung macht nur Spaß wenn man hunderte oder besser tausende Zeilen in einen Zeileneditor hackt, sollte wohl jetzt besser die Reißleine ziehen.

Videozusammenfassung

Und hier diesen Abschnitt als kurze Videozusammenfassung.

Wählen Sie hier Ihren Mikrocontrollerfamilie aus:

AVR Mikrocontrollerfamilie SAM Mikrocontrollerfamilie STM Mikrocontrollerfamilie XMC Mikrocontrollerfamilie

Nächstes Thema

button_und_led.txt · Zuletzt geändert: 2015/11/12 17:28 von dokuwi13