{"id":235,"date":"2013-02-07T00:38:29","date_gmt":"2013-02-06T22:38:29","guid":{"rendered":"http:\/\/marko-seifert.de\/blog\/?p=235"},"modified":"2020-01-15T12:23:36","modified_gmt":"2020-01-15T10:23:36","slug":"arduino-lichtorgel-teil-2-software","status":"publish","type":"post","link":"http:\/\/marko-seifert.de\/blog\/?p=235","title":{"rendered":"Arduino Lichtorgel, Teil 2: Software"},"content":{"rendered":"<p>Im ersten <a title=\"Arduino Lichtorgel, Teil 1: Hardware\" href=\"http:\/\/marko-seifert.de\/blog\/?p=210\">Teil des Blogs<\/a>\u00a0ging es um den Hardwareaufbau. Jetzt, im zweiten Teil, \u00a0steht die Software im Mittelpunkt.<\/p>\n<p>Die Ausgangsbasis f\u00fcr meine 4-Kanal Lichtorgel stellt das Tutorial &#8222;<a href=\"http:\/\/fftarduino.blogspot.de\/2011\/02\/color-organ-spectrum-analyzer-on.html\">Color Organ \/ Spectrum Analyzer on Arduino<\/a>&#8220; dar. Um es besser zu verstehen, anpassen und erweitern zu k\u00f6nnen habe ich den Sourcecode refactored und auf mehrere Klassen aufgeteilt.<\/p>\n<p><!--more--><\/p>\n<h2>Softwaredesign<\/h2>\n<p><a href=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2013\/02\/lightcontrol.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-247\" title=\"lightcontrol\" alt=\"\" src=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2013\/02\/lightcontrol.png\" width=\"792\" height=\"588\" srcset=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2013\/02\/lightcontrol.png 792w, http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2013\/02\/lightcontrol-300x222.png 300w, http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2013\/02\/lightcontrol-404x300.png 404w\" sizes=\"auto, (max-width: 792px) 100vw, 792px\" \/><\/a><\/p>\n<p>Die Software ist ein C++ Eclipse-Projekt und besteht aus folgenden Komponenten:<\/p>\n<p><strong><em>main<\/em><\/strong>-Klasse<br \/>\nArduino-Klasse mit den beiden Methoden <em>setup()<\/em> und <em>loop()<\/em>. In der <em>main<\/em>-Klasse wird die Klasse <em>LightControl\u00a0<\/em>instanziiert.<\/p>\n<p><em><strong>LightControl<\/strong><br \/>\n<\/em>Die<em>\u00a0<\/em>Klasse<em> LightControl <\/em>ist das zentrale Steuerorgan. Hier werden die die konkreten Implementierungen zu den Interfaces erzeugt und verkn\u00fcpft. Au\u00dferdem implementiert die Klasse das Interface\u00a0<em>ICallbackEventHandler<\/em> und kann somit mit der Methode\u00a0<em>handleEvent(int bthEvent)<\/em> auf <em>ButtonEvents<\/em> reagieren.<\/p>\n<p><strong>IAudioAnalyser und\u00a0AudioAnalyser<\/strong><br \/>\nDie Klasse und das zugeh\u00f6rige Interface sind f\u00fcr das Sampeln des Audiosignals\u00a0und die FFT verantwortlich. Aufgerufen wird die Methode\u00a0<em>readAndTransform()<\/em> in jedem Arduino-Loop. Als R\u00fcckgabewert wir ein int-Array mit 128 Stufen des Frequenzbandes \u00fcbergaben.<\/p>\n<p><em><strong>ILightControlStrategy<\/strong><\/em><br \/>\nIst das Interface f\u00fcr verschieden Implementierungen.<\/p>\n<p><strong>LightorganStrategy<\/strong><br \/>\nDie Klasse LightorganStrategy ist Implementierung des Interfaces\u00a0<em>ILightControlStrategy <\/em>f\u00fcr eine 4 Kanal Lichtorgel. Der Ausgangscode war f\u00fcr 3 Kan\u00e4le a 4 Stufen f\u00fcr die Amplitude. Den Code habe ich dahingehen angepasst, dass es 4 Kan\u00e4le ohne Stufen gibt. Ist ein gewisser Schwellwert erreicht, wird der Kanal angeschaltet. Folgende Zuordnung ist eingestellt:<\/p>\n<ul>\n<li>Frequenzband 0-7, Kanal 1, Bass, Farbe: blau<\/li>\n<li>Frequenzband 8-15, Kanal 2, untere Mitten, Farbe: rot<\/li>\n<li>Frequenzband 16-23, Kanal 3, h\u00f6here Mitten, Farbe: gr\u00fcn<\/li>\n<li>Frequenzband 24-31, Kanal 4, H\u00f6hen, Farbe: gelb<\/li>\n<\/ul>\n<h2>Sourcecode<\/h2>\n<ul>\n<li><a href=\"https:\/\/github.com\/msedd\/lightcontrol\">https:\/\/github.com\/msedd\/lightcontrol<\/a><\/li>\n<\/ul>\n<pre>git clone\u00a0https:\/\/github.com\/msedd\/lightcontrol<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Im ersten Teil des Blogs\u00a0ging es um den Hardwareaufbau. Jetzt, im zweiten Teil, \u00a0steht die Software im Mittelpunkt. Die Ausgangsbasis f\u00fcr meine 4-Kanal Lichtorgel stellt das Tutorial &#8222;Color Organ \/ Spectrum Analyzer on Arduino&#8220; dar. Um es besser zu verstehen, anpassen und erweitern zu k\u00f6nnen habe ich den Sourcecode refactored und auf mehrere Klassen aufgeteilt.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5,11,12],"tags":[161,53,54,50,51,52],"class_list":["post-235","post","type-post","status-publish","format-standard","hentry","category-arduino","category-development","category-microcontroller","tag-arduino","tag-audio","tag-fft","tag-led","tag-lichtorgel","tag-lightcontrol-2"],"_links":{"self":[{"href":"http:\/\/marko-seifert.de\/blog\/index.php?rest_route=\/wp\/v2\/posts\/235","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/marko-seifert.de\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/marko-seifert.de\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/marko-seifert.de\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/marko-seifert.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=235"}],"version-history":[{"count":23,"href":"http:\/\/marko-seifert.de\/blog\/index.php?rest_route=\/wp\/v2\/posts\/235\/revisions"}],"predecessor-version":[{"id":1435,"href":"http:\/\/marko-seifert.de\/blog\/index.php?rest_route=\/wp\/v2\/posts\/235\/revisions\/1435"}],"wp:attachment":[{"href":"http:\/\/marko-seifert.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=235"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/marko-seifert.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=235"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/marko-seifert.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=235"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}