Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
projektiteration_4 [2019/02/04 14:10]
127.0.0.1 Externe Bearbeitung
projektiteration_4 [2019/07/25 12:41] (aktuell)
huwi
Zeile 2: Zeile 2:
 Der Helligkeitssensor ist vergleichsweise unkritisch. Dieser kann als einfacher Analogeingang wie gehabt realisiert werden. Die Helligkeitswerte müssen dann nur noch als String formatiert werden und dem Datensatz für unsere Log-Datei angefügt werden. Für den Speaker sieht die Sache schon schwieriger aus. Wir finden in den bisher verwendeten UML Paketen keine Lösung für einen Speaker. Zur Erinnerung das Blockbild der bis hier zu nutzenden Bausteine des Systems. Der Helligkeitssensor ist vergleichsweise unkritisch. Dieser kann als einfacher Analogeingang wie gehabt realisiert werden. Die Helligkeitswerte müssen dann nur noch als String formatiert werden und dem Datensatz für unsere Log-Datei angefügt werden. Für den Speaker sieht die Sache schon schwieriger aus. Wir finden in den bisher verwendeten UML Paketen keine Lösung für einen Speaker. Zur Erinnerung das Blockbild der bis hier zu nutzenden Bausteine des Systems.
  
->>>​{{:​bdd_kleines_projekt_pi3.jpg?​700|}}+>​{{:​bdd_kleines_projekt_pi3.jpg?​700|}}
  
 ====== Komponenten entwerfen ====== ====== Komponenten entwerfen ======
Zeile 13: Zeile 13:
 Daraus lässt sich folgender Klassenentwurf für den Speaker ableiten: Daraus lässt sich folgender Klassenentwurf für den Speaker ableiten:
  
->>>​{{:​speaker_klassenentwurf.jpg?​300|}}+>​{{:​speaker_klassenentwurf.jpg?​300|}}
  
 Da es sich hier nicht um eine allgemeine Klasse für einen Speaker handelt haben wir im Namen der Klasse notiert, dass diese sondern ein PWM mit dem Timer 9 an Pin E5 erzeugt. Die Operation Start überladen wir womit ein Start des Speakers mit Angabe von Frequenz und Lautstärke möglich ist aber auch ein Start ohne Parameter für die Initialisierung mit den Werten aus den Attributen //​frequenz//​ und //volume//. Da es sich hier nicht um eine allgemeine Klasse für einen Speaker handelt haben wir im Namen der Klasse notiert, dass diese sondern ein PWM mit dem Timer 9 an Pin E5 erzeugt. Die Operation Start überladen wir womit ein Start des Speakers mit Angabe von Frequenz und Lautstärke möglich ist aber auch ein Start ohne Parameter für die Initialisierung mit den Werten aus den Attributen //​frequenz//​ und //volume//.
Zeile 19: Zeile 19:
 Der betreffende Ausschnitt unseres Klassendiagramms sieht bei bewährter Konstruktion des Lichtsensors und dem obigen Speakerkonzept wie folgt aus: Der betreffende Ausschnitt unseres Klassendiagramms sieht bei bewährter Konstruktion des Lichtsensors und dem obigen Speakerkonzept wie folgt aus:
  
->>>​{{:​kd_datenlogger_iteration3.jpg?​700|}}+>​{{:​kd_datenlogger_iteration3.jpg?​700|}}
  
 Ergänzen Sie das Klassendiagramm des Projektes um die gezeigten Elemente. Ergänzen Sie das Klassendiagramm des Projektes um die gezeigten Elemente.
Zeile 38: Zeile 38:
     * PWM-Ausgabe erlauben     * PWM-Ausgabe erlauben
  
->>>​**start(ton,​volume):​** +>​**start(ton,​volume):​** 
->>><​code c>+><​code c>
 Rcc rcc; Rcc rcc;
  
Zeile 78: Zeile 78:
 Und hier die Operation //start// ohne Parameter. Und hier die Operation //start// ohne Parameter.
  
->>>​**start():​** +>​**start():​** 
->>><​code c>+><​code c>
 this->​start(frequency,​volume);​ this->​start(frequency,​volume);​
 </​code>​ </​code>​
  
->>>​**stop():​** +>​**stop():​** 
->>><​code c>+><​code c>
 tim.cmd(DISABLE);​ tim.cmd(DISABLE);​
 tim.ctrlPwmOutputs(DISABLE);​ tim.ctrlPwmOutputs(DISABLE);​
 </​code>​ </​code>​
  
->>>​**setFrequency(ton):​** +>​**setFrequency(ton):​** 
->>><​code c>+><​code c>
 frequency=ton;​ frequency=ton;​
 tim.timeBaseInitStruct.TIM_Period = ((SystemCoreClock/​10) / frequency ) - 1; tim.timeBaseInitStruct.TIM_Period = ((SystemCoreClock/​10) / frequency ) - 1;
Zeile 96: Zeile 96:
 </​code>​ </​code>​
  
->>>​**setVolume(level):​** +>​**setVolume(level):​** 
->>><​code c>+><​code c>
 tim.ocInitStruct.TIM_Pulse = volume; tim.ocInitStruct.TIM_Pulse = volume;
 tim.ocxInit(1);​ tim.ocxInit(1);​
Zeile 107: Zeile 107:
 Zum Test schalten wir den Speaker in der Startsequenz einfach an. Diese und die folgenden Codezeile entfernen wir wieder nach dem Test. Zum Test schalten wir den Speaker in der Startsequenz einfach an. Diese und die folgenden Codezeile entfernen wir wieder nach dem Test.
  
->>>​**onStart:​** +>​**onStart:​** 
->>><​code c>+><​code c>
 // nur zum kurzen Test  // nur zum kurzen Test 
 speaker.start(400,​200);​ speaker.start(400,​200);​
Zeile 115: Zeile 115:
 Wir können beide Komponenten wunderbar miteinander testen indem die Werte vom Lichtsensor an den Speaker gegeben werden. Dabei erreichen wir eine maximale Lautstärke wenn als Volumelevel die Hälfte der Tonfrequenz benutzt wird. Wir können beide Komponenten wunderbar miteinander testen indem die Werte vom Lichtsensor an den Speaker gegeben werden. Dabei erreichen wir eine maximale Lautstärke wenn als Volumelevel die Hälfte der Tonfrequenz benutzt wird.
  
->>>​**onTimer100ms:​** +>​**onTimer100ms:​** 
->>><​code c>+><​code c>
 // nur zum kurzen Test  // nur zum kurzen Test 
 uint16_t helligkeit; uint16_t helligkeit;
Zeile 127: Zeile 127:
 Sie können jetzt mit dem Finger den Lichtsensor abdecken und sollten eine entsprechende Änderung der Tonfrequenz deutlich hören. Ich hoffe Sie haben genauso viel Spaß an diesem Test wie ich ;-) Sie können jetzt mit dem Finger den Lichtsensor abdecken und sollten eine entsprechende Änderung der Tonfrequenz deutlich hören. Ich hoffe Sie haben genauso viel Spaß an diesem Test wie ich ;-)
  
->>><​flashplayer width="​560"​ height="​450"​ position="​0">​file=http://​youtu.be/​H8NXbax50zs</​flashplayer>​+><​flashplayer width="​560"​ height="​450"​ position="​0">​file=http://​youtu.be/​H8NXbax50zs</​flashplayer>​
  
->>>​[[http://​youtu.be/​H8NXbax50zs|besser auf youTube]]+>​[[http://​youtu.be/​H8NXbax50zs|besser auf youTube]]
  
 OK, jetzt nervt es :-/ Also weiter im Text :-| OK, jetzt nervt es :-/ Also weiter im Text :-|
Zeile 137: Zeile 137:
 Entfernen Sie nach erfolgreichem test die Operation //​onTimer10ms//​ aus der Applikation und die in der Operation //onStart// enthaltenen Test-Codezeilen. Ergänzen Sie die Operation //onWork// wie folgt: Entfernen Sie nach erfolgreichem test die Operation //​onTimer10ms//​ aus der Applikation und die in der Operation //onStart// enthaltenen Test-Codezeilen. Ergänzen Sie die Operation //onWork// wie folgt:
  
->>>​**onWork** +>​**onWork** 
->>><​code c>+><​code c>
 String datensatz,​lage="​0",​trennzeichen=";​ ",​zeilenende="​\n";​ String datensatz,​lage="​0",​trennzeichen=";​ ",​zeilenende="​\n";​
  
Zeile 186: Zeile 186:
 Erstellen, Übersetzen und Übertragen Sie das Programm. Korrigieren Sie ggf. Schreibfehler im Quelltext. Achten sie darauf, dass eine µSD-Karte mit maximal 1 GB Kapazität und FAT16-Formatierung ordnungsgemäß in den SD-Kartenhalter eingelegt ist bevor das Programm startet. Lassen Sie die Anwendung einige Minuten laufen. Beobachten Sie die Protokollausgaben im SiSy-Controlcenter. Entnehmen sie die SD-Karte und überprüfen Sie den Inhalt der Datei log.csv. Erstellen, Übersetzen und Übertragen Sie das Programm. Korrigieren Sie ggf. Schreibfehler im Quelltext. Achten sie darauf, dass eine µSD-Karte mit maximal 1 GB Kapazität und FAT16-Formatierung ordnungsgemäß in den SD-Kartenhalter eingelegt ist bevor das Programm startet. Lassen Sie die Anwendung einige Minuten laufen. Beobachten Sie die Protokollausgaben im SiSy-Controlcenter. Entnehmen sie die SD-Karte und überprüfen Sie den Inhalt der Datei log.csv.
  
->>>​{{:​cc_bald_fertig.jpg?​600|}}+>​{{:​cc_bald_fertig.jpg?​600|}}
  
 ====== Nächster Schritt ====== ====== Nächster Schritt ======