MSGEQ7 with LCD 20x4 I2C

Hello everyone I read this link

The original link of it is this; link, my intention is to adapt my LCD 20x4 with I2C bus

I use this library Malpartida

All right. I managed to go down to the second and third column the spectrum but want to have all the lcd, but modified and it does not work.

Pictures;

This is the modified my code;

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

#define I2C_ADDR    0x3f // <<----- Add your address here.  Find it from I2C Scanner
#define BACKLIGHT_PIN     3
#define En_pin  2
#define Rw_pin  1
#define Rs_pin  0
#define D4_pin  4
#define D5_pin  5
#define D6_pin  6
#define D7_pin  7


LiquidCrystal_I2C lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);

byte vumetro[8][8];

float vumetros[16];

// The analog pin 0 is used to read value.
int valor_analogico = 0; 
// The 6 & 7 pins are used for control the integrated.
int strobe = 4; 
int reset = 5; 
int valores_frecuencias[7]; 

void setup() {
  
        lcd.begin(20, 4);
        lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
        lcd.setBacklight(HIGH);
  

  
  // Built the characters for bars.
  for (int j=0; j<=7; j++)  
  {
    for (int i=0; i<=7; i++)
    {
       for (int h=0; h<=7; h++)
      {
        for (int z=0; z<=7; z++)
        {
      if (i<=j)
      { vumetro[j][7-i] = B11111;} // B01110
//   { vumetro[j][i][h][7-z] = B11111;}
//      { vumetro[j][7-i] = B01010;}  Uncomment this lines for getting other variants for bars.
//      { vumetro[j][7-i] = B11111;}      
      else
      { vumetro[j][7-i] = 0;} 
//        { vumetro[j][i][h][7-z] = 0;}  
      }
    }
  }  
  for (int i=0; i<=7;i++)
  {
    lcd.createChar(i, vumetro[i]);
  }

  
  for (int j=0; j<=7;j++)
  {
    lcd.setCursor(j, 0);
    lcd.write(j);
    lcd.setCursor(j, 1);
    lcd.write(j);  
    lcd.setCursor(j, 2);
    lcd.write(j);
    lcd.setCursor(j, 3);
    lcd.write(7);   
    
  pinMode(valor_analogico, INPUT);
  pinMode(strobe, OUTPUT);
  pinMode(reset, OUTPUT);
  analogReference(DEFAULT);

  digitalWrite(reset, LOW);
  digitalWrite(strobe, HIGH);
    
  }  
  }
}

void loop() {
  
  digitalWrite(reset, HIGH);
  digitalWrite(reset, LOW);

  // The read of integrated is done by multiplexing.
  for (int i = 0; i < 7; i++)
  {
    digitalWrite(strobe, LOW);
    delayMicroseconds(5); 
    valores_frecuencias[i] = analogRead(valor_analogico);
    digitalWrite(strobe, HIGH);
  }

// It's necesary to interpolate for calculating 16 bars having only 7 values read.
for (int k=0; k<=15; k++)
  {
  switch (k) 
  {
    case 0:
      vumetros[k]= valores_frecuencias[0]/64;
      break;
    
    case 1:
      vumetros[k]= (valores_frecuencias[0]/64 + valores_frecuencias[1]/64)/2;
      break;

    case 2:
      vumetros[k]= valores_frecuencias[1]/64;
      break;
   
    case 3:
      vumetros[k]= (valores_frecuencias[1]/64 + valores_frecuencias[2]/64)/2;
      break;
 
    case 4:
      vumetros[k]= valores_frecuencias[2]/64;
      break;
    
    case 5:
      vumetros[k]= (valores_frecuencias[1]/64 + valores_frecuencias[2]/64 + valores_frecuencias[3]/64)/3;
      break;
        
    case 6:
      vumetros[k]= (valores_frecuencias[2]/64 + valores_frecuencias[3]/64 + valores_frecuencias[4]/64)/3;
      break;

    case 7:
      vumetros[k]= random(2)+valores_frecuencias[3]/64;
      break;
      

    case 8:
      vumetros[k]= random(2)+valores_frecuencias[3]/64;
      break;

    case 9:
      vumetros[k]= (valores_frecuencias[2]/64 + valores_frecuencias[3]/64 + valores_frecuencias[4]/64)/3;
      break;

    case 10:
      vumetros[k]= (valores_frecuencias[3]/64 + valores_frecuencias[4]/64 + valores_frecuencias[5]/64)/3;
      break;

    case 11:
      vumetros[k]= valores_frecuencias[4]/64;
      break;

    case 12:
      vumetros[k]= (valores_frecuencias[4]/64 + valores_frecuencias[5]/64)/2;
      break;

    case 13:
      vumetros[k]= valores_frecuencias[5]/64;
      break;

    case 14:
      vumetros[k]= (valores_frecuencias[5]/64 + valores_frecuencias[6]/64)/2;
      break;

    case 15:
      vumetros[k]= valores_frecuencias[6]/64;
      break;
  }

  Dibuja_vumetro(k, vumetros[k]);
  delay(2);
  }
  
}


 void Dibuja_vumetro(int posicion, int altura)
{
  if (altura>7)
  {
    if (altura>14)
    {
      if (altura>21)
      {
        lcd.setCursor(posicion, 3);
        lcd.write(7);
        lcd.setCursor(posicion, 2);
        lcd.write(7);
        lcd.setCursor(posicion, 1);
        lcd.write(7);
        lcd.setCursor(posicion, 0);
        lcd.write(altura-8);
      }
      lcd.setCursor(posicion, 3);
      lcd.write(7);
      lcd.setCursor(posicion, 2);
      lcd.write(7);
      lcd.setCursor(posicion, 1);
      lcd.write(altura-8);
      lcd.setCursor(posicion, 0);
      lcd.write(32);
   }
    lcd.setCursor(posicion, 3);
    lcd.write(7);  //tutto acceso
    lcd.setCursor(posicion, 2);
    lcd.write(altura-8);
    lcd.setCursor(posicion, 1);
    lcd.write(32);
    lcd.setCursor(posicion, 0);
    lcd.write(32);   
  }
  else
  {
    lcd.setCursor(posicion, 3);
    lcd.write(altura);
    lcd.setCursor(posicion, 2);
    lcd.write(32);   //tutto spento
    lcd.setCursor(posicion, 1);
    lcd.write(32);
    lcd.setCursor(posicion, 0);
    lcd.write(32);   
  }
}

How to correct the code to see the entire screen?
I can please help? Thanks for your answers.

I've not looked at the code in detail, but it really looks like you need a case 15,19 to cover the last 4 rows (or columns depending on how you hold the screen.

Thank you. But what I try is to put the spectrum in the ranks 0, 1, 2, 3 , columns 15 to 19 is not a problem I do not get put in all rows. Regards

OK, three points.

  • What is your native language? If English, then it might be nice to use the Edit (-> Find) function in the IDE to translate the code into English.
  • You suggest that the first two rows are not working, but the display you illustrate simply does not contain values that approach this area.
  • You have to add the interpolation code for the additional columns. If English is indeed your language, it would be a little easier to translate it first. :grinning:

Sorry my bad English language is Spanish. I'm trying unsuccessfully to do this same ;

https://www.youtube.com/watch?v=VZtVF96jFY8