Code
- 32_Band_LED_Spectrum_Analyzer-009.ino
32_Band_LED_Spectrum_Analyzer-009.inoArduino
Fühlen Sie sich frei, meinen Anpassungsteilcode an Ihre Bedürfnisse anzupassen (Neuzuordnungsdaten, mit Kommentar gekennzeichnet).// Geänderter Code von Christian Suryanto, ab (c) 2019 Shajeeb TM// HAZI TECH/ / Aktualisiert von Christian Suryanto// #include #include #include #include #define HARDWARE_TYPE MD_MAX72XX::FC16_HW // Anzeigetyp so einstellen, dass MD_MAX72xx Bibliothek Treets es richtig#define CLK_PIN 13 // Clock-Pin für die Kommunikation mit dem Display#define DATA_PIN 11 // Daten-Pin für die Kommunikation mit dem Display#define CS_PIN 10 // Steuer-Pin für die Kommunikation mit dem Display#define SAMPLES 64 // Muss ein Strom sein of 2#define MAX_DEVICES 4 // Gesamtzahl Anzeigemodule#define xres 32 // Gesamtzahl der Spalten in der Anzeige, muss <=SAMPLES/2 sein#define yres 8 // Gesamtzahl der Zeilen in der Anzeige#define PREV 0xFF02FD // Adresse ist FFA25D, aber 0x wird hinzugefügt, weil so dem Arduino mitgeteilt wird, dass es HEXADECIMAL ist. #define NEXT 0xFFC23D // Kontrollstoppcode #define PWR 0xFFA25D // Steuerung Powerint audio_response =35; // Geben Sie einen Wert zwischen 10 und 80 ein. Je kleiner die Zahl, desto höher die Audioantwortdouble vReal[SAMPLES]; //double vReal2[SAMPLES];double vImag[SAMPLES];char data_avgs[xres];int yvalue;int displaycolumn , displayvalue;int Peaks[xres];const int buttonPin =6; // die Nummer des Pinint-Zustands der Drucktaste =HIGH; // der aktuelle Messwert vom Eingang pinint previousState =LOW; // der vorherige Messwert vom Eingang pinint displaymode; unsigned long lastDebounceTime =0; // das letzte Mal, als der Ausgangspin toggledunsigned war long debounceDelay =50; // die Entprellzeit; erhöhen, wenn die Ausgabe flickersint MY_ARRAY[]={0, 128, 192, 224, 240, 248, 252, 254, 255}; // Standard =Standardmuster //int MY_MODE_1[]={0, 128, 192, 224, 240, 248, 252, 254, 255}; // Standardmuster //int MY_MODE_2[]={0, 128, 64, 32, 16, 8, 4, 2, 1}; // nur Peakmuster //int MY_MODE_3[]={0, 128, 192, 160, 144, 136, 132, 130, 129}; // nur Peak + Bottom Point //int MY_MODE_4[]={0, 128, 192, 160, 208, 232, 244, 250, 253}; // eine Lücke oben, 3. Licht weiterbool EQ_ON =true; // auf false setzen um eqbyte eq1[32] ={40, 45, 50, 60, 65, 70, 75, 95, 110, 110, 110, 110, 110, 110, 110, 110, 130, 130, 130, 130, 130, 130, 130, 130, 145, 155, 170, 180, 215, 220, 245, 255 };byte eq2[11] ={40, 70, 75, 110, 110, 140, 145, 220, 220, 230, 250};MD_MAX72XX mx =MD_MAX72XX(HARDWARE_TYPE, CS_PIN, MAX_DEVICES); // Objekt anzeigenarduinoFFT FFT =arduinoFFT (); // FFT-Objekt void setup () { EEPROM.update (1,1); //(Speicheradresse, Wert), DIES ZUM ERSTEN MAL AUSFÜHREN displaymode =EEPROM.read(1); // Anzeigemodus =1; ADCSRA =0b11100101; // ADC in den Freilaufmodus setzen und Pre-Scalar auf 32 (0xe5) setzen ADMUX =0b00000000; // Pin A0 und externe Spannungsreferenz verwenden PinMode (buttonPin, INPUT); mx.begin(); // Anzeige initialisieren mx.control(MD_MAX72XX::INTENSITY, 0); // LED-Intensitätsverzögerung einstellen (50); // warten, bis die Referenzspannung stabilisiert ist} void loop () { // ++ Sampling int numData; doppelte rSumme; for(int i=0; i peaks[i]) peaks[i] =yvalue; yWert =Spitzen[i]; displayvalue=MY_ARRAY[yvalue]; Schalter (Anzeigemodus) { Fall 1:{ Anzeigespalte =31-i; mx.setColumn(Anzeigespalte, Anzeigewert); // von links nach rechts} break; Fall 2:{ Anzeigespalte =31-(3*i); mx.setColumn(displaycolumn-1, displayvalue); // von links nach rechts mx.setColumn(displaycolumn, displayvalue); // von links nach rechts} break; } } // -- senden zur Anzeige entsprechend dem gemessenen Wert displayModeChange (); // überprüfen, ob die Taste gedrückt wurde, um den Anzeigemodus zu ändern}void displayModeChange () { Int Reading =digitalRead (buttonPin); if (lesen ==HIGH &&previousState ==LOW &&millis() - lastDebounceTime> debounceDelay) // funktioniert nur, wenn gedrückt {switch (displaymode) { case 1:// von Modus 1 zu 2 wechseln displaymode =2; mx.clear(); Verzögerung (200); EEPROM.update(1,2); brechen; Fall 2:// von Modus 2 nach 3 wechseln displaymode =1; mx.clear(); Verzögerung (200); EEPROM.update(1,1); brechen; } lastDebounceTime =millis(); } previousState =Lesen;}