LCD plotting an audio signal and scroll

Hello everyone, I’ve been working on this project for the last 2 weeks.

I’m attempting to get a signal from a 3.5mm audio jack and plot it in a 20x4 LCD kind of a VU meter, I’ve done the whole work, the missing part is to extend every column over time, but with the cursor standing in one column only.

So this image shows how I extended it but it was just autoscroll, so, everything was just overwritting over and over again.

What I’m looking is to set te cursor from the beginning and store that value, then when the next value of the analog input enters, that stored value goes to the second column, then waits for the other value and store it again and scroll it, so the first column moves to the second and the second to the third and so on, that repeatedly until the last column is reached, then it will disappear, but it will continuously receive the audio signal.

I don’t know if it was clear but I’ll be very thankful if anyone can help me out with this problem, I’m still working on the documentation and the wiki but, so far, this is my project: GitHub - Jorghe/LCD-VU-meter: An audio signal is delivered to a LiquidCrystal Display and plots over time with Arduino.

// LiquidCristal Display used as VU meter or SVI
// 1 audio analog input

#include  <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

long salida;
int sonido=A0;
int row=0, col=0;


void setup() 
{
  lcd.begin(20,4);
//  lcd.setCursor(0,3);
//  lcd.print("Wot's uh the deal");
}

void loop() 
{
    // Scrolling method
    for(int b=0; b<20; b++)
  {
      // Mapear cada entrada de sonido y escalarlo a 16 segmentos
      salida=map(analogRead(sonido),0,700,0,15);

      
     
  // Place Cursor in order and print the value of column
      lcd.setCursor(b,row);
      col=b;
      delay(400);
      vumetro(salida, col);

  // Relocate column to next value
      col++;
  }
}




void vumetro(int salida, int col)
{
  // Creación de cada una de las celdas
byte clearChar[8]= {0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b00000};
byte  Char0[8] = {0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b11111};
byte  Char1[8] = {0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b11111,0b11111};
byte  Char2[8] = {0b00000,0b00000,0b00000,0b00000,0b00000,0b11111,0b11111,0b11111};
byte  Char3[8] = {0b00000,0b00000,0b00000,0b00000,0b11111,0b11111,0b11111,0b11111};
byte  Char4[8] = {0b00000,0b00000,0b00000,0b11111,0b11111,0b11111,0b11111,0b11111};
byte  Char5[8] = {0b00000,0b00000,0b11111,0b11111,0b11111,0b11111,0b11111,0b11111};
byte  Char6[8] = {0b00000,0b11111,0b11111,0b11111,0b11111,0b11111,0b11111,0b11111};
byte  Char7[8] = {0b11111,0b11111,0b11111,0b11111,0b11111,0b11111,0b11111,0b11111};

  // Load character to the LCD
 lcd.createChar(0, Char0);
 lcd.createChar(1, Char1);
 lcd.createChar(2, Char2);
 lcd.createChar(3, Char3);
 lcd.createChar(4, Char4);
 lcd.createChar(5, Char5);
 lcd.createChar(6, Char6);
 lcd.createChar(7, Char7);
 lcd.createChar(8, clearChar);
  
if(salida==0)
  {
     lcd.setCursor(col,0);
     lcd.write(8);
     lcd.setCursor(col,1);
     lcd.write((byte)0);
  }
else if(salida==1)
   {
     lcd.setCursor(col,0);
     lcd.write(8);
     lcd.setCursor(col,1);
     lcd.write(1);
   }
else if(salida==2)
   {
     lcd.setCursor(col,0);
     lcd.write(8);
     lcd.setCursor(col,1);
     lcd.write(2);
   }
else if(salida==3)
   {
     lcd.setCursor(col,0);
     lcd.write(8);
     lcd.setCursor(col,1);
     lcd.write(3);
   }
else if(salida==4)
   {
     lcd.setCursor(col,0);
     lcd.write(8);
     lcd.setCursor(col,1);
     lcd.write(4);
   }
else if(salida==5)
   {
     lcd.setCursor(col,0);
     lcd.write(8);
     lcd.setCursor(col,1);
     lcd.write(5);
   }
else if(salida==6)
   {
     lcd.setCursor(col,0);
     lcd.write(8);
     lcd.setCursor(col,1);
     lcd.write(6);
   }
else if(salida==7)
   {
    lcd.setCursor(col,0);
     lcd.write(8);
     lcd.setCursor(col,1);
     lcd.write(7);
   }
else if(salida==8)
   {
    lcd.setCursor(col,0);
     lcd.write((byte)0);
     lcd.setCursor(col,1);
     lcd.write(7);
   }
else if(salida==9)
   {
    lcd.setCursor(col,0);
     lcd.write(1);
     lcd.setCursor(col,1);
     lcd.write(7);
   }
else if(salida==10)
   {
    lcd.setCursor(col,0);
     lcd.write(2);
     lcd.setCursor(col,1);
     lcd.write(7);
   }
else if(salida==11)
   {
    lcd.setCursor(col,0);
     lcd.write(3);
     lcd.setCursor(col,1);
     lcd.write(7);
   }
else if(salida==12)
   {
    lcd.setCursor(col,0);
     lcd.write(4);
     lcd.setCursor(col,1);
     lcd.write(7);
   }
else if(salida==13)
   {
    lcd.setCursor(col,0);
     lcd.write(5);
     lcd.setCursor(col,1);
     lcd.write(7);
   }
else if(salida==14)
   {
    lcd.setCursor(col,0);
     lcd.write(6);
     lcd.setCursor(col,1);
     lcd.write(7);
   }
else if(salida==15)
   {
     lcd.setCursor(col,0);
     lcd.write(7);
     lcd.setCursor(col,1);
     lcd.write(7);
   }

   lcd.setCursor(col,3);
   lcd.print(salida, HEX);

}