Código
- 32_Band_LED_Spectrum_Analyzer-009.ino
32_Band_LED_Spectrum_Analyzer-009.ino Arduino
Sinta-se à vontade para modificar / personalizar de acordo com sua necessidade, no meu código de peça de personalização (re-mapeamento de dados, marcado com comentário). // Código modificado por Christian Suryanto, de (c) 2019 Shajeeb TM // HAZI TECH / / Atualizado por Christian Suryanto // #include #include #include #include #define HARDWARE_TYPE MD_MAX72XX ::FC16_HW // Defina o tipo de exibição para que MD_MAX72xx a biblioteca o treina corretamente # define CLK_PIN 13 // Pino do relógio para se comunicar com o display # define DATA_PIN 11 // Pino de dados para se comunicar com o display # define CS_PIN 10 // Pino de controle para se comunicar com o display # define SAMPLES 64 // Deve ser um poder de 2 # define MAX_DEVICES 4 // Número total de módulos de exibição # define xres 32 // Número total de colunas no display, deve ser <=SAMPLES / 2 # define yres 8 // Número total de linhas no display # define PREV 0xFF02FD // o endereço é FFA25D, mas 0x é adicionado porque é assim que o arduino é informado de que é HEXADECIMAL. # define NEXT 0xFFC23D // código de parada de controle # define PWR 0xFFA25D // controle Powerint audio_response =35; // coloque um valor entre 10 e 80. Quanto menor o número, maior será a resposta de áudio. Double vReal [SAMPLES]; // double vReal2 [SAMPLES]; double vImag [SAMPLES]; char data_avgs [xres]; int yvalue; int displaycolumn, displayvalue; int picos [xres]; const int buttonPin =6; // o número do botão de pressão pinint state =HIGH; // a leitura atual do pino de entrada previousState =LOW; // a leitura anterior da entrada pinint displaymode; não assinado long lastDebounceTime =0; // a última vez que o pino de saída foi alternado para assinar long debounceDelay =50; // o tempo de debounce; aumentar se a saída piscar em MY_ARRAY [] ={0, 128, 192, 224, 240, 248, 252, 254, 255}; // padrão =padrão padrão // int MY_MODE_1 [] ={0, 128, 192, 224, 240, 248, 252, 254, 255}; // padrão padrão // int MY_MODE_2 [] ={0, 128, 64, 32, 16, 8, 4, 2, 1}; // apenas padrão de pico // int MY_MODE_3 [] ={0, 128, 192, 160, 144, 136, 132, 130, 129}; // apenas pico + ponto inferior // int MY_MODE_4 [] ={0, 128, 192, 160, 208, 232, 244, 250, 253}; // uma lacuna no topo, 3ª luz onwardsbool EQ_ON =true; // definir como falso para desativar eqbyte eq1 [32] ={40, 45, 50, 60, 65, 70, 75, 95, 110, 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); // exibe objectarduinoFFT FFT =arduinoFFT (); // objeto FFT void setup () {EEPROM.update (1,1); // (endereço de memória, valor), EXECUTE ISTO PELA PRIMEIRA VEZ displaymode =EEPROM.read (1); // displaymode =1; ADCSRA =0b11100101; // definir ADC para modo de execução livre e definir pré-escalar para 32 (0xe5) ADMUX =0b00000000; // use o pino A0 e a referência de tensão externa pinMode (buttonPin, INPUT); mx.begin (); // inicializa o display mx.control (MD_MAX72XX ::INTENSITY, 0); // definir o atraso de intensidade do LED (50); // aguarde a estabilização da voltagem de referência} void loop () {// ++ Sampling int numData; double rSum; para (int i =0; i peaks [i]) peaks [i] =yvalue; valor y =picos [i]; displayvalue =MY_ARRAY [yvalue]; switch (modo de exibição) {case 1:{displaycolumn =31-i; mx.setColumn (displaycolumn, displayvalue); // da esquerda para a direita} break; caso 2:{displaycolumn =31- (3 * i); mx.setColumn (displaycolumn-1, displayvalue); // da esquerda para a direita mx.setColumn (displaycolumn, displayvalue); // da esquerda para a direita} break; }} // - enviar para exibir de acordo com o valor medido displayModeChange (); // verifique se o botão foi pressionado para alterar o modo de exibição} void displayModeChange () {int reading =digitalRead (buttonPin); if (leitura ==HIGH &&previousState ==LOW &&millis () - lastDebounceTime> debounceDelay) // funciona apenas quando pressionado {switch (displaymode) {case 1:// move do modo 1 para 2 displaymode =2; mx.clear (); atraso (200); EEPROM.update (1,2); pausa; caso 2:// passa do modo 2 para o modo 3 displaymode =1; mx.clear (); atraso (200); EEPROM.update (1,1); pausa; } lastDebounceTime =millis (); } previousState =reading;}