Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
button_und_led [2019/02/04 14:10]
127.0.0.1 Externe Bearbeitung
button_und_led [2019/07/25 21:40] (aktuell)
huwi [Realisierung]
Zeile 5: Zeile 5:
 Es ist eine Mikrocontrolleranwendung zu entwickeln, bei der durch Drücken einer Taste eine LED eingeschaltet wird. Es ist eine Mikrocontrolleranwendung zu entwickeln, bei der durch Drücken einer Taste eine LED eingeschaltet wird.
  
->>>​{{:​anwendersichttasteled.jpg?​400|}}+>​{{:​anwendersichttasteled.jpg?​400|}}
  
 ===== Vorbereitung ===== ===== Vorbereitung =====
Zeile 11: Zeile 11:
 //​Application Grundgerüst für PEC Anwendungen (XMC, STM32, AVR)//. Weisen Sie das Treiberpaket für STM32F4 zu.  //​Application Grundgerüst für PEC Anwendungen (XMC, STM32, AVR)//. Weisen Sie das Treiberpaket für STM32F4 zu. 
  
-{{:​neueskldbutton.PNG?​380|}} ​   {{:​umlprojekt8gg.jpg?​380|}} +>{{:​neueskldbutton.PNG?​380|}}{{:​umlprojekt8gg.jpg?​380|}}
- +
- +
  
 ===== Lösungsansatz ===== ===== Lösungsansatz =====
Zeile 23: Zeile 20:
 Navigieren wir zu den Quelldiagrammen des Tasters, ergibt sich das folgende Gesamtbild: Navigieren wir zu den Quelldiagrammen des Tasters, ergibt sich das folgende Gesamtbild:
  
->>>​{{:​basisklassebutton.jpg?​500|}}+>​{{:​basisklassebutton.jpg?​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. 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.
Zeile 36: Zeile 33:
 Damit lässt sich doch unsere Aufgabe locker lösen. Die Operation //​isPressed//​ sollte genau das sein was wir suchen. Damit lässt sich doch unsere Aufgabe locker lösen. Die Operation //​isPressed//​ sollte genau das sein was wir suchen.
  
->>>​{{:​tasteleddragdrop.png?​700|}}+>​{{:​tasteleddragdrop.png?​700|}}
  
 Ziehen Sie die Klassen //Button// und //Led// in den neuen Entwurf. Verbinden Sie diese mit der Klasse //​Controller//​ und dem Verbindungstyp //​Aggregation//​. Ziehen Sie die Klassen //Button// und //Led// in den neuen Entwurf. Verbinden Sie diese mit der Klasse //​Controller//​ und dem Verbindungstyp //​Aggregation//​.
Zeile 46: Zeile 43:
     * und eine //roteLED//     * und eine //roteLED//
  
->>>​{{:​intelligenterlichtschalter.png?​500|}}+>​{{:​intelligenterlichtschalter.png?​500|}}
  
 Die Initialisierung erfolgt, wie gehabt, in der Operation //​onStart//​. Laut Schaltplan des Discovery ist der Taster an Pin A0 und die rote LED an Pin D14 angeschlossen. Die Initialisierung erfolgt, wie gehabt, in der Operation //​onStart//​. Laut Schaltplan des Discovery ist der Taster an Pin A0 und die rote LED an Pin D14 angeschlossen.
  
->>>​**Controller::​onStart:​** +>​**Controller::​onStart:​** 
->>><​code cpp>+><​code cpp>
 roteLED.config(GPIOD,​BIT14);​ roteLED.config(GPIOD,​BIT14);​
 taste.config(GPIOA,​BIT0);​ taste.config(GPIOA,​BIT0);​
 </​code>​ </​code>​
  
->>>​{{:​seqtasteledinit.png?​350|}}+>​{{:​seqtasteledinit.png?​350|}}
  
 Die Verarbeitungslogik erfolgt in der Operation //onWork// im Polling. ​ Die Verarbeitungslogik erfolgt in der Operation //onWork// im Polling. ​
  
  
->>>​**Controller::​onWork:​** +>​**Controller::​onWork:​** 
->>><​code cpp>+><​code cpp>
 bool ok; bool ok;
 ok=taste.isPressed();​ ok=taste.isPressed();​
Zeile 72: Zeile 69:
  
  
->>>​{{:​ispressedledon.png?​350|}}+>​{{:​ispressedledon.png?​350|}}
  
 ===== Test ===== ===== Test =====
Zeile 96: Zeile 93:
 Und hier diesen Abschnitt wiederum als Videozusammenfassung. Und hier diesen Abschnitt wiederum als Videozusammenfassung.
  
->>><​html><​iframe width="​680"​ height="​425"​ src="​https://​www.youtube.com/​embed/​AGtFh_bkyLc"​ frameborder="​0"​ allowfullscreen></​iframe></​html>​+><​html><​iframe width="​680"​ height="​425"​ src="​https://​www.youtube.com/​embed/​AGtFh_bkyLc"​ frameborder="​0"​ allowfullscreen></​iframe></​html>​
  
 ====== Übung ====== ====== Übung ======