Code
- 32_Band_LED_Spectrum_Analyzer-009.ino
32_Band_LED_Spectrum_Analyzer-009.inoArduino
N'hésitez pas à modifier/personnaliser selon vos besoins, sur mon code de pièce de personnalisation (données de remappage, marquées d'un commentaire).// Code modifié par Christian Suryanto, à partir de (c) 2019 Shajeeb TM// HAZI TECH/ / Mis à jour par Christian Suryanto// #include #include #include #include #define HARDWARE_TYPE MD_MAX72XX::FC16_HW // Définir le type d'affichage de sorte que MD_MAX72xx la bibliothèque l'arbore correctement#define CLK_PIN 13 // Broche d'horloge pour communiquer avec l'affichage#define DATA_PIN 11 // Broche de données pour communiquer avec l'affichage#define CS_PIN 10 // Broche de contrôle pour communiquer avec l'affichage#define SAMPLES 64 // Doit être une alimentation of 2#define MAX_DEVICES 4 // Nombre total de modules d'affichage#define xres 32 // Nombre total de colonnes dans l'affichage, doit être <=SAMPLES/2#define yres 8 // Nombre total de lignes dans l'affichage#define PREV 0xFF02FD // l'adresse est FFA25D mais 0x est ajouté car c'est ainsi que l'arduino est informé qu'il s'agit de HEXADECIMAL.#define NEXT 0xFFC23D // contrôle le code d'arrêt#define PWR 0xFFA25D // contrôle Powerint audio_response =35; // mettre une valeur entre 10 et 80. Plus le nombre est petit, plus la réponse audio est élevéedouble vReal[SAMPLES];//double vReal2[SAMPLES];double vImag[SAMPLES];char data_avgs[xres];int yvalue;int displaycolumn , displayvalue;int peaks[xres];const int buttonPin =6; // le numéro du pinint du bouton poussoir state =HIGH; // la lecture actuelle du pinint d'entrée previousState =LOW; // la lecture précédente du pinint displaymode d'entrée ; non signé long lastDebounceTime =0 ; // la dernière fois que la broche de sortie a été basculée unsigned long debounceDelay =50; // le temps de rebond ; augmenter si la sortie scintilleint MY_ARRAY[]={0, 128, 192, 224, 240, 248, 252, 254, 255} ; // par défaut =modèle standard//int MY_MODE_1[]={0, 128, 192, 224, 240, 248, 252, 254, 255} ; // modèle standard//int MY_MODE_2[]={0, 128, 64, 32, 16, 8, 4, 2, 1} ; // uniquement le motif de pic//int MY_MODE_3[]={0, 128, 192, 160, 144, 136, 132, 130, 129} ; // uniquement pic + point bas//int MY_MODE_4[]={0, 128, 192, 160, 208, 232, 244, 250, 253} ; // un écart en haut , 3ème lumière en avant bool EQ_ON =true; // défini sur false pour désactiver 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 };octet eq2[11] ={40, 70, 75, 110, 110, 140, 145, 220, 220, 230, 250};MD_MAX72XX mx =MD_MAX72XX(HARDWARE_TYPE, CS_PIN, MAX_DEVICES); // afficher objectarduinoFFT FFT =arduinoFFT(); // FFT objet void setup() { EEPROM.update(1,1); //(adresse mémoire, valeur), LANCEZ CELA POUR LA PREMIÈRE FOIS displaymode =EEPROM.read(1); //mode d'affichage =1; ADCSRA =0b11100101 ; // définit l'ADC en mode d'exécution libre et définit le pré-scalaire sur 32 (0xe5) ADMUX =0b00000000 ; // utilise la broche A0 et la référence de tension externe pinMode (buttonPin, INPUT); mx.begin(); // initialise l'affichage mx.control(MD_MAX72XX::INTENSITY, 0); // définit le délai d'intensité de la LED (50); // attendre que la tension de référence se stabilise} void loop() { // ++ Sampling int numData; double rSomme ; for(int i=0; i peaks[i]) peaks[i] =yvalue; valeur y =pics[i] ; displayvalue=MY_ARRAY[yvalue] ; switch (displaymode) { cas 1 :{ displaycolumn=31-i; mx.setColumn(displaycolumn, displayvalue); // de gauche à droite } break; cas 2 :{ colonne d'affichage=31-(3*i); mx.setColumn(displaycolumn-1, displayvalue); // pour de gauche à droite mx.setColumn(displaycolumn, displayvalue); // de gauche à droite } break; } } // -- envoyer à l'affichage en fonction de la valeur mesurée displayModeChange (); // vérifie si le bouton est enfoncé pour changer le mode d'affichage} void displayModeChange() { int reading =digitalRead(buttonPin); if (reading ==HIGH &&previousState ==LOW &&millis() - lastDebounceTime> debounceDelay) // ne fonctionne que lorsque vous appuyez sur { switch (displaymode) { case 1 :// passer du mode 1 au 2 displaymode =2; mx.clear(); retard (200); EEPROM.update(1,2) ; Pause; cas 2 :// passer du mode 2 au 3 displaymode =1; mx.clear(); retard (200); EEPROM.update(1,1) ; Pause; } lastDebounceTime =millis(); } état précédent =lecture ;}