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
io-delux [2019/01/29 15:33]
127.0.0.1 Externe Bearbeitung
io-delux [2019/07/27 16:45]
huwi
Zeile 5: Zeile 5:
 Vergegenwärtigen wir uns die Aufgabenstellung. Es ist eine Mikrocontrolleranwendung zu erstellen, bei der an den Controller eine Taste und eine LED angeschlossen sind. Wenn die Taste gedrückt ist soll die LED angeschaltet werden, ansonsten soll die LED aus sein. Vergegenwärtigen wir uns die Aufgabenstellung. Es ist eine Mikrocontrolleranwendung zu erstellen, bei der an den Controller eine Taste und eine LED angeschlossen sind. Wenn die Taste gedrückt ist soll die LED angeschaltet werden, ansonsten soll die LED aus sein.
  
->>>>>​>​{{:​lichtschalter.jpg?​400|}}+>​{{:​lichtschalter.jpg?​400|}}
  
 Das myAVR C++ Framework stellt uns für die Abbildung einer Taste die Klasse //Button// zur Verfügung. Um eine einfache LED zu nutzen bietet sich, ja was sonst, die Klasse //Led// an. Die folgende Darstellung zeigt einen Ausschnitt aus dem UML Klassendiagramm des Framework mit genau diesen Klassen. Das myAVR C++ Framework stellt uns für die Abbildung einer Taste die Klasse //Button// zur Verfügung. Um eine einfache LED zu nutzen bietet sich, ja was sonst, die Klasse //Led// an. Die folgende Darstellung zeigt einen Ausschnitt aus dem UML Klassendiagramm des Framework mit genau diesen Klassen.
  
->>>>>>​>​{{:​buttonled.jpg?​500|}}+>​{{:​buttonled.jpg?​500|}}
  
 Beim ersten Darüberschauen ist schon zu sehen, dass diese Klassen uns Funktionen anbieten, die man in Mikrocontrolleranwendungen gut gebrauchen kann. Als Erstes beschränken wir uns auf die Anwendung der Möglichkeit den Taster zu fragen, ob er gedrückt ist und die LED ein bzw. auszuschalten. ​ Beim ersten Darüberschauen ist schon zu sehen, dass diese Klassen uns Funktionen anbieten, die man in Mikrocontrolleranwendungen gut gebrauchen kann. Als Erstes beschränken wir uns auf die Anwendung der Möglichkeit den Taster zu fragen, ob er gedrückt ist und die LED ein bzw. auszuschalten. ​
Zeile 15: Zeile 15:
 Hier das Board mit der gewünschten Schaltung. Der Taster 1 ist an Port D Bit 2 angeschlossen und die rote LED an Port B Bit 0. Hier das Board mit der gewünschten Schaltung. Der Taster 1 ist an Port D Bit 2 angeschlossen und die rote LED an Port B Bit 0.
  
->>>>>>​> {{:​lichtsachalter1.jpg?​400|}}+>​{{:​lichtsachalter1.jpg?​400|}}
  
 Zuerst notieren wir unsere konzeptuellen Gedanken als Kommentare an die richtigen Stellen in der geladenen Programmvorlage. Zuerst notieren wir unsere konzeptuellen Gedanken als Kommentare an die richtigen Stellen in der geladenen Programmvorlage.
  
-<code cpp>+><code cpp>
 //////////////////////////////////////////////////////////​ //////////////////////////////////////////////////////////​
 // Lichtschalter 2 ENTWURF // Lichtschalter 2 ENTWURF
Zeile 48: Zeile 48:
 Nochmal ein kleines Review über das Konzept und dann kann es mit der Realisierung los gehen. ​ Nochmal ein kleines Review über das Konzept und dann kann es mit der Realisierung los gehen. ​
  
-<code cpp>+><code cpp>
 //////////////////////////////////////////////////////////​ //////////////////////////////////////////////////////////​
 // Lichtschalter 2 // Lichtschalter 2
Zeile 83: Zeile 83:
 Kompilieren,​ linken, brennen und testen Sie das Programm. Kompilieren,​ linken, brennen und testen Sie das Programm.
  
->>>>>​>​{{:​lichtsachalter1a.jpg?​400|}}+>​{{:​lichtsachalter1a.jpg?​400|}}
  
 ====== Möglichkeiten der Klassen nutzen ====== ====== Möglichkeiten der Klassen nutzen ======
Zeile 90: Zeile 90:
 Für diese Funktionalität wird ein weiteres Merkmal des Framwork benötigt. Es bietet für bestimmte aktive Klassen die Möglichkeit,​ Ereignisse an die Applikation zu melden. Dafür muss die Applikation einen sogenannten //​EventHandler//​ bereitstellen. Das ist eine Operation, die von einem Objekt welches ein Ereignis melden möchte aufgerufen werden kann. dabei muss das Objekt sich als Absender der Ereignisnachricht identifizieren und kann zusätzlich Daten über das Ereignis senden. Der Name und die Parameter der Operation für das Melden eines Ereignisses ist festgelegt, damit jeder potenzielle Absender einer Ereignismeldung diese auch erreichen kann. Das nennt man eine Schnittstelle (//​Interface//​). Legen Sie ein neues kleines Programm an und laden sie eine Programmvorlage. Ergänzen Sie die folgende Operation: Für diese Funktionalität wird ein weiteres Merkmal des Framwork benötigt. Es bietet für bestimmte aktive Klassen die Möglichkeit,​ Ereignisse an die Applikation zu melden. Dafür muss die Applikation einen sogenannten //​EventHandler//​ bereitstellen. Das ist eine Operation, die von einem Objekt welches ein Ereignis melden möchte aufgerufen werden kann. dabei muss das Objekt sich als Absender der Ereignisnachricht identifizieren und kann zusätzlich Daten über das Ereignis senden. Der Name und die Parameter der Operation für das Melden eines Ereignisses ist festgelegt, damit jeder potenzielle Absender einer Ereignismeldung diese auch erreichen kann. Das nennt man eine Schnittstelle (//​Interface//​). Legen Sie ein neues kleines Programm an und laden sie eine Programmvorlage. Ergänzen Sie die folgende Operation:
  
-<code cpp>+><code cpp>
 //    EreignisHandler ​    ​Absender ​      ​Ereignisdaten ​   //    EreignisHandler ​    ​Absender ​      ​Ereignisdaten ​  
 public: void onEvent(const Object& sender, uint8 data) public: void onEvent(const Object& sender, uint8 data)
Zeile 100: Zeile 100:
 Zuerst wieder das Konzept als Kommentare notieren. Zuerst wieder das Konzept als Kommentare notieren.
  
-<code cpp>+><code cpp>
 //////////////////////////////////////////////////////////​ //////////////////////////////////////////////////////////​
 // Benutzerschnittstelle 1 ENTWURF // Benutzerschnittstelle 1 ENTWURF
Zeile 135: Zeile 135:
 Dann erfolgt die Realisierung. Dann erfolgt die Realisierung.
  
-<code cpp>+><code cpp>
 //////////////////////////////////////////////////////////​ //////////////////////////////////////////////////////////​
 // Benutzerschnittstelle 1 // Benutzerschnittstelle 1
Zeile 171: Zeile 171:
 Kompilieren,​ linken, brennen und testen Sie die Anwendung. Kompilieren,​ linken, brennen und testen Sie die Anwendung.
  
->>>​{{:​blinken3.jpg?​300|}} {{:​blinkenaus.jpg?​300|}}+>​{{:​blinken3.jpg?​300|}} {{:​blinkenaus.jpg?​300|}}
  
 Beim Klicken der Taste 1 wird der Blinkcode der LED als Anzeige einer gewählten Funktion jeweils um eins weiter gestellt. Beim Halten der Taste 1 wird das Zurücksetzen der Funktion durch das Ausschalten der LED visualisiert. Vergleichen Sie die tatsächliche Funktionalität der Anwendung mit dem Quellcode des Programms. Versuchen Sie sich vorzustellen,​ welchen Aufwand eine Lösung ohne Klassenbibliothek erfordert hätte. Beim Klicken der Taste 1 wird der Blinkcode der LED als Anzeige einer gewählten Funktion jeweils um eins weiter gestellt. Beim Halten der Taste 1 wird das Zurücksetzen der Funktion durch das Ausschalten der LED visualisiert. Vergleichen Sie die tatsächliche Funktionalität der Anwendung mit dem Quellcode des Programms. Versuchen Sie sich vorzustellen,​ welchen Aufwand eine Lösung ohne Klassenbibliothek erfordert hätte.
  
 ====== Videozusammenfassung ====== ====== Videozusammenfassung ======
->>><flashplayer ​width="​700"​ height="​550" ​position="0">​file=http://youtu.be/​_qA1Air0R1w</​flashplayer> +><html><iframe ​width="​700"​ height="​550" ​src="https://www.youtube.com/​embed/​_qA1Air0R1w" frameborder="​0"​ allow="​accelerometer;​ autoplay; encrypted-media;​ gyroscope; picture-in-picture"​ allowfullscreen>​</iframe></html>
- +
->>>​[[http:​//​youtu.be/​_qA1Air0R1w|oder direkt auf youTube]]+
  
 ====== Nächstes Thema ====== ====== Nächstes Thema ======
 [[Sound|Töne und Melodien generieren]] [[Sound|Töne und Melodien generieren]]