====== Mit den Klassen Button und LED weiter arbeiten====== Lassen Sie uns diese Arbeitsweise vertiefen. Das zweite Beispiel in klassischem C war der intelligente Lichtschalter. Dabei sollte per Tastendruck eine LED eingeschaltet werden. Im letzten Abschnitt benutzten wir die vorhandene Klasse //Led//. Aufmerksame Beobachter haben gewiss schon die Klasse //Button// im selben Paket entdeckt. ===== Die Aufgabe ===== Es ist eine Mikrocontrolleranwendung zu entwickeln, bei der durch Drücken einer Taste eine LED eingeschaltet wird. >>>{{:anwendersichttasteled.jpg?400|}} ===== Vorbereitung ===== Falls Sie jetzt noch das Klassendiagramm geöffnet haben wählen Sie im Kontextmenü (rechte Maustaste) des Diagramms den Menüpunkt nach oben. Falls das Projekt nicht mehr geöffnet ist, öffnen sie das SiSy UML-Projekt wieder. Legen Sie ein neues Klassendiagramm an und wählen Sie die Sprache //ARM C++//. Beachten Sie die Einstellungen für die Zielplattform //XMC4500 Relax Kit//. Beim Öffnen des Diagramms (rechte Maustaste, nach unten) laden Sie die Diagrammvorlage für eine //PEC Applikation// und fügen das Treiberpaket für den XMC4500 ein. >>><html><iframe width="640" height="480" src="https://www.youtube.com/embed/-YRw0XvoNyQ" frameborder="0" allowfullscreen></iframe></html> ===== Lösungsansatz ===== 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, an, aus * Taster, ist gedrückt Navigieren wir zu den Quelldiagrammen des Tasters, ergibt sich das folgende Gesamtbild: >>>{{:basisklassebutton.png?500|}} 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 //PecButtonClickAndHold//. * Es gibt eine Variante des Button die //low activ// arbeitet. * Alle Button besitzen unter anderem folgende Operationen * isPressed * waitForPress * //onClick// Damit lässt sich doch unsere Aufgabe locker lösen. Die Operation //isPressed// sollte genau das sein was wir suchen. >>>{{:tasteleddragdrop.png?550|}} Ziehen Sie die Klassen //Button// und //Led// in den neuen Entwurf. Verbinden Sie diese mit der Klasse //Controller// mit dem Verbindungstyp //Aggregation//. ===== Realisierung ===== Der Entwurf sollte jetzt folgenden Stand aufweisen. * der //Controller// hat * einen //button// vom Typ //Button// * und eine //led// vom Typ //Led// >>>{{:intelligenterlichtschalter.png?600|}} Die Initialisierung erfolgt, wie gehabt, in der Operation //onStart//. Laut [[http://www.myavr.info/download/produkte-myxmc/techb_xmc_referenzkarte_de_en.pdf|Referenzkarte XMC]] ist der Taster an Pin 1.15 und die LED an Pin 1.0 angeschlossen. **Controller::onStart** >>><code cpp> led.config(PORT1,BIT0); button.config(PORT1,BIT15); </code> >>>{{:seqtasteledinit.png?450|}} Die Verarbeitungslogik erfolgt in der Operation //onWork// im Polling. **Controller::onWork** >>><code cpp> bool pressed; pressed=button.isPressed(); if (pressed) led.on(); else led.off(); </code> >>>{{:ispressdledon.png?450|}} ===== Test ===== Übersetzen Sie das Programm. Korrigieren Sie ggf. Schreibfehler. Übertragen Sie das lauffähige Programm in den Programmspeicher des Controllers. - Erstellen (Kompilieren und Linken) - Brennen >{{:erstellenbrennen.png?350|}}{{:tasterblaueled.jpg?350|}} Die LED auf dem //XMC4500 Relax Kit// leuchtet jetzt immer solange, wie der Taster gedrückt ist. ====== Videozusammenfassung ====== Erlernte und gefestigte Arbeitsschritte: - Klassendiagramm anlegen und öffnen - Diagrammvorlage für ARM C++ Applikation auswählen und laden - Navigator auf UML Pakete umschalten - gewünschte Klassen Led und Button im Navigator suchen und ins Diagramm ziehen - Klassen aggregieren - den nötigen Quellcode in den Operationen erstellen - Erstellen und Brennen eine ARM Applikation im Klassendiagramm Und hier diesen Abschnitt wiederum als Videozusammenfassung. >>><html><iframe width="640" height="480" src="https://www.youtube.com/embed/pY82QJfRvkw" frameborder="0" allowfullscreen></iframe></html> ====== Übung ====== Erweitern Sie die Anwendung um die zweite LED an Pin1.1. Diese soll leuchten, wenn der Taster nicht gedrückt ist und aus sein wenn er gedrückt wird. ====== Nächstes Thema ====== * [[SystemTickUML|Der SystemTick in C++]] <sub>(login erforderlich)</sub>

button_und_led.txt · Zuletzt geändert: 2025/03/10 19:27 (Externe Bearbeitung)