![]()
| Musikvisualisierer mit MSGEQ7![]() Einen einfachen Musikvisualisierer haben wir bereits konstruiert. Die Schaltung und das Ergebnis können auf der folgenden Seite
betrachtet werden: In der Schaltung wurde einfach das analoge Signal, das ein Mikrofon lieferte, in bestimmten Zeitabständen ausgelesen und in Form von farbigen Balken
auf einer Matrix angezeigt.
Audio-Frequenzanalysator MSGEQ7![]() ![]()
1. VDD - Spannungsversorgung, typisch 5V Schaltplan![]() Testschaltung![]() Programm// *******************************************************************************************// Musikvisualisierer mit MSGEQ7 // eine Schaltung mit dem Audio-Frequenzanalysator MSGEQ7 und Arduino Mega // Arduino IDE 2.3.5 // ******************************************************************************************* #include "RGBmatrixPanel.h" // Matrix-Bibliothek #define CLK 11 // Matrix-Anschlüsse #define OE 9 #define LAT 10 #define A A0 #define B A1 #define C A2 #define D A3 #define E A4 RGBmatrixPanel matrix(A, B, C, D, E, CLK, LAT, OE, false, 64); int MSGEQ7_Reset = 52; // Anschlüsse MSGEQ7 an Arduino int MSGEQ7_Strobe = 53; int MSGEQ7_Kanal_A_Out = A5; // Kanal A int MSGEQ7_Kanal_B_Out = A6; // Kanal B int Frequenzband [14]; // [0 bis 6 ][0] - Analogwerte Kanal A // [7 bis 13][0] - Analogwerte Kanal B int PosYa [14]; // Y-Positionen der Max-Balken unsigned long Millis_Alt; // Zeit festhalten // ******************************************************************************************* void setup() { pinMode(MSGEQ7_Reset, OUTPUT); // Arduino Pin 52 (Reset) als Ausgang pinMode(MSGEQ7_Strobe, OUTPUT); // Arduino Pin 53 (Strobe) als Ausgang digitalWrite(MSGEQ7_Reset, LOW); digitalWrite(MSGEQ7_Strobe, HIGH); matrix.begin(); // Matrix aktivieren delay(500); matrix.drawRect(0, 0, 64, 64, matrix.Color333(0, 0, 7)); // Feld markieren matrix.drawLine(0, 51, 64, 51, matrix.Color333(0, 0, 7)); matrix.setTextSize(1); matrix.setCursor(2, 2); // Cursor positionieren für Textausgabe matrix.setTextColor(matrix.Color333(0,7,0)); // Textfarbe matrix.println("MSGEQ7"); // Text ausgeben matrix.setCursor(15, 54); // Cursor neue Position matrix.setTextColor(matrix.Color333(7,0,0)); // Textfarbe matrix.println("Stereo"); // Textausgabe for (int i = 0; i < 14; i++) { // Variable PosYa [] vorbelegen PosYa [i] = 50; } } // ******************************************************************************************* void loop() { digitalWrite(MSGEQ7_Reset, HIGH); // MSGEQ7 Reset delayMicroseconds(10); digitalWrite(MSGEQ7_Reset, LOW); for (int i = 0; i < 7; i++) { // Alle analoge Werte auslesen digitalWrite(MSGEQ7_Strobe, LOW); // Umschaltung mit Strobe delayMicroseconds(100); // Wartezeit Frequenzband[i] = analogRead(MSGEQ7_Kanal_A_Out); // Amplituden Kanal A Frequenzband[i+7] = analogRead(MSGEQ7_Kanal_B_Out); // Amplituden Kanal B digitalWrite(MSGEQ7_Strobe, HIGH); delayMicroseconds(100); } for (int i = 0; i < 14; i++) { // Ergebnisse in Balkenform anzeigen Balken_anzeigen (i); // Unterprogramm "Balken_anzeigen" } if (millis() - Millis_Alt (*groeser) 250) { // Wartezeit für Max-Balken, hier 250 ms Millis_Alt = millis(); for (int i = 0; i < 14; i++) { PosYa [i] = PosYa [i] + 1; } } delay(20); // Wartezeit } // ******************************************************************************************* void Balken_anzeigen (byte Nummer) { int PosY = 50; // Y - Ausgangskoordinate int PosX = 9; // X - Ausgangskoordinate für Kanal A PosX = PosX + (Nummer * 3); // X - Positionen balken Kanal A (0-6) if (Nummer (*groeser) 6) { PosX = 35; // X - Ausgangskoordinate für Kanal B PosX = PosX + ((Nummer-7) * 3); // X - Positionen für Kanal B (7-13) } int Balken_Hoehe = Frequenzband[Nummer] / 30; // Balken-Matrix-Höhe berechnen PosY = PosY - Balken_Hoehe; // Y - Neue Koordinate berechnen int R = random(7); // Farben via Zufall int G = random(7); int B = random(7); // Balken auf Matrix anzeigen matrix.drawRect(PosX, PosY, 2, Balken_Hoehe, matrix.Color333(R, G, B)); // Reste löschen matrix.drawRect(PosX, 16, 2, 34 - Balken_Hoehe, matrix.Color333(0, 0, 0)); // Y - Koordinate Max-Balken aktualisieren if (PosY < PosYa [Nummer]) { PosYa [Nummer] = PosY; } // Max-Balken (2 Pixel) anzeigen matrix.drawLine(PosX, PosYa [Nummer], PosX+1, PosYa [Nummer], matrix.Color333(0, 0, 7)); } // *******************************************************************************************LED - Matrix 64x64 Arduino Programmierung
|
Google-Suche auf MEINE-SCHALTUNG.de : |