Arduino, Hardware- und Softwareentwicklung, Mikrocontroller

Arduino Lichtorgel, Teil 2: Software

Im ersten Teil des Blogs ging es um den Hardwareaufbau. Jetzt, im zweiten Teil,  steht die Software im Mittelpunkt.

Die Ausgangsbasis für meine 4-Kanal Lichtorgel stellt das Tutorial “Color Organ / Spectrum Analyzer on Arduino” dar. Um es besser zu verstehen, anpassen und erweitern zu können habe ich den Sourcecode refactored und auf mehrere Klassen aufgeteilt.

Softwaredesign

Die Software ist ein C++ Eclipse-Projekt und besteht aus folgenden Komponenten:

main-Klasse
Arduino-Klasse mit den beiden Methoden setup() und loop(). In der main-Klasse wird die Klasse LightControl instanziiert.

LightControl
Die Klasse LightControl ist das zentrale Steuerorgan. Hier werden die die konkreten Implementierungen zu den Interfaces erzeugt und verknüpft. Außerdem implementiert die Klasse das Interface ICallbackEventHandler und kann somit mit der Methode handleEvent(int bthEvent) auf ButtonEvents reagieren.

IAudioAnalyser und AudioAnalyser
Die Klasse und das zugehörige Interface sind für das Sampeln des Audiosignals und die FFT verantwortlich. Aufgerufen wird die Methode readAndTransform() in jedem Arduino-Loop. Als Rückgabewert wir ein int-Array mit 128 Stufen des Frequenzbandes übergaben.

ILightControlStrategy
Ist das Interface für verschieden Implementierungen.

LightorganStrategy
Die Klasse LightorganStrategy ist Implementierung des Interfaces ILightControlStrategy für eine 4 Kanal Lichtorgel. Der Ausgangscode war für 3 Kanäle a 4 Stufen für die Amplitude. Den Code habe ich dahingehen angepasst, dass es 4 Kanäle ohne Stufen gibt. Ist ein gewisser Schwellwert erreicht, wird der Kanal angeschaltet. Folgende Zuordnung ist eingestellt:

  • Frequenzband 0-7, Kanal 1, Bass, Farbe: blau
  • Frequenzband 8-15, Kanal 2, untere Mitten, Farbe: rot
  • Frequenzband 16-23, Kanal 3, höhere Mitten, Farbe: grün
  • Frequenzband 24-31, Kanal 4, Höhen, Farbe: gelb

Sourcecode

git clone https://github.com/msedd/lightcontrol
Share on FacebookShare on Google+Tweet about this on TwitterPin on Pinterest