Tira LED neopixel no funciona al ritmo de la música



Buenas tardes a todos,

En primer lugar, escribo en "General" la consulta porque aunque estoy bastante seguro de que mi problema es de código, no puedo obviar que hay algunas indicaciones que sugieren en la biblioteca neopixel de adafruit que no puedo seguir, aunque dudo que ese sea el problema. Concretamente hablo de que no he podido poner un condensador de 1000 uF como sugieren entre la línea + y tierra ya que no dispongo de el.

Estoy usando una tira LED neopixel de 0,5 m y 30 LED´s. Para alimentarlo he hecho un apaño con un cable USB el cual he pelado por uno de los extremos, y un cargador de tablet que funciona a 5V y da hasta 2.1 A.

Mi idea es que la tira LED se vaya encendiendo al ritmo de la música. Para ello he utilizado un cable Jack-Jack y un socket de conexión Jack, concretamente el AV15087. He conectado la salida del socket correspondiente al auricular izquierdo al puerto A0 de arduino. En el puerto A1 he conectado un potenciómetro con el cual pretendo calibrar la amplitud de la salida para evitar que se sature la tira LED si el volumen es muy alto.

He probado algunos de los ejemplos de la biblioteca (GitHub - adafruit/Adafruit_NeoPixel: Arduino library for controlling single-wire LED pixels (NeoPixel, WS2812, etc.)) y funcionan correctamente.

Sin embargo, cuando pruebo mi código, lo único que he conseguido es que se enciendan 2 LED y que se mantengan siempre encendidos, a pesar de que cada 25 ms estoy limpiando la tira LED.

El código es el siguiente:

#include <Adafruit_NeoPixel.h>///https://github.com/adafruit/Adafruit_NeoPixel

//Debido a que la señal de audio varía mucho en poco tiempo, es mejor tomar un valor promedio en
//un intervalo de tiempo. Para ello tomaremos el valor máximo y lo restaremos al mínimo en
//un intervalo de timepo determinado

#define tiempo_muestreo 50 //Definimos una ventana de 40 ms, la cual corresponde a una frecuencia de muestreo de 25 Hz
#define pin_led 6//Defininmos el pin de conexión de la tira LED
#define numero_led 30
#define pin_jack 14 //Definimos el pin analógico de toma de datos (A0)
#define pin_pot 15//Definimos el pin analógico al que conectaremos el potenciómetro que controlará el nivel de amplitud (A1)

unsigned int valor_promedio = 0;//En esta variable guardaremos la diferencia entre el valor máximo y minimo obtenido en el tiempo de muestreo
unsigned int control_amplitud = 0;//En esta variable guardaremos el valor leido del potenciómetro por puerto analógico
unsigned int valor_final = 0;//En esta variable guardaremos el valor final de amplitud de la señal

//Creamos un objeto de la tira
//Primer parámetro = cantidad de pixeles en la tira
//Segundo parámetro = pin de conexión a Arduino
//Tercer parámetro:
  //NEO_KHZ800  800 KHz velocidad de datos (WS2812 y nuevos)
  //NEO_KHZ400  400 KHz velocidad de datos (WS2811 y anteriores)
  //NEO_GRB     flujo de datos en el orden GRB (WS2812 y nuevos)
  //NEO_RGB     fluo de datos en el orden RGB (versiones más antiguas)
Adafruit_NeoPixel tira_LED = Adafruit_NeoPixel(numero_led, pin_led, NEO_GRB + NEO_KHZ800);

void setup() {
  // put your setup code here, to run once:
  pinMode(pin_led, OUTPUT);
  tira_LED.begin();//Iniciamos la tira LED
  tira_LED.show();//Iniciamos con valor 0 la tira de LED, es decir, iniciamos con la tira LED apagada
  
}

void loop() {
  tira_LED.clear();
  // put your main code here, to run repeatedly:
  unsigned long tiempo_inicial = millis();//Registramos el momento en el que entramos en el loop principal

  unsigned int maximo = 0;//Aquí guardaremos el máximo valor registrado durante el muestreo. Lo iniciamos con el valor más bajo
                          //posible para guardar el primer valor como el máximo
  unsigned int minimo = 1024;//Aquí guardaremos el mínimo valor registrado durante el muestreo. Lo iniciamos con el valor más alto
                          //posible para guardar el primer valor como el máximo

  unsigned int valor_senal = 0;//Esta variable guardará el valor analógico leido

  while(millis() - tiempo_inicial < tiempo_muestreo){
    valor_senal = analogRead(pin_jack);//guardamos el valor leido por el puerto analógico del jack
    control_amplitud = analogRead(pin_pot);//guardamos el valor leido por el puerto analógico del potenciometro
    if(valor_senal<1024){
      if(valor_senal < minimo){//si el valor actual leido es menor que el anterior
        minimo = valor_senal;//Actualizamos el valor minimo
      }
      if(valor_senal > maximo){//si el valor actual leido es mayor que el anterior
        maximo = valor_senal;//Actualizamos el valor maximo
      }
    }
  }
  //Una vez haya pasado el tiempo de muestreo, registramos el valor promedio restando el valor máximo al mínimo
  valor_promedio = maximo - minimo;
  valor_final = valor_promedio/control_amplitud;//Dividimos el valor promedio por el valor obtenido del potenciómetro. Esto es una manera de calibrar 
                                                //el vúmetro, ya que la amplitud de la señal depende del volumen. De esta manera evitamos la saturación de los LED´s debido al volumen
  vumetro();//Llamamos a la función que se encargará de enceder los LED´s correspondientes
  
  
}

void vumetro(){
  tira_LED.clear();//Cada 25 ms limpimaos la tira led antes de encender de nuevo los correspondientes LED´s encendidos
                   //En caso de que se percibiese visualmente el cambio tendría que aumentar la frecuencia de meustreo para evitarlo
  int i=0;
  
  if(0<valor_final<34){
    tira_LED.setPixelColor(0, tira_LED.Color(0, 255, 0));//Establecemos el color rojo en los LED´s correspondientes
    tira_LED.show(); 
  }
  if(34<valor_final<65){
    for(i=0;i=2; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(0, 255, 0));//Establecemos el color rojo en los LED´s correspondientes
    }
    tira_LED.show();
  }
  if(65<valor_final<102){
    for(i=0;i=3; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(0, 255, 0));//Establecemos el color rojo en los LED´s correspondientes
    }
    tira_LED.show();
  }

    
  if(102<valor_final<136){
    for(i=0;i=3; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(0, 255, 0));//Establecemos el color rojo en los LED´s correspondientes
    }
    tira_LED.setPixelColor(4, tira_LED.Color(171, 255, 0));//Establecemos el color naranja en los LED´s correspondientes
    
  }
  
  if(136<valor_final<173){
    for(i=0;i=3; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(0, 255, 0));//Establecemos el color rojo en los LED´s correspondientes
    }
    for(i=4;i=5; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(171, 255, 0));//Establecemos el color naranja en los LED´s correspondientes
    }
  }    
  if(173<valor_final<204){
    for(i=0;i=3; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(0, 255, 0));//Establecemos el color rojo en los LED´s correspondientes
    }
    for(i=4;i=6; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(171, 255, 0));//Establecemos el color naranja en los LED´s correspondientes
    }
  }

  
  if(204<valor_final<240){
    for(i=0;i=3; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(0, 255, 0));//Establecemos el color rojo en los LED´s correspondientes
    }
    for(i=4;i=6; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(171, 255, 0));//Establecemos el color naranja en los LED´s correspondientes
    }

    tira_LED.setPixelColor(7, tira_LED.Color(255, 247, 0));//Establecemos el color amarillo en los LED´s correspondientes
  }
  if(240<valor_final<280){
    for(i=0;i=3; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(0, 255, 0));//Establecemos el color rojo en los LED´s correspondientes
    }
    for(i=4;i=6; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(171, 255, 0));//Establecemos el color naranja en los LED´s correspondientes
    }
    for(i=7; i=8; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 247, 0));//Establecemos el color amarillo en los LED´s correspondientes
    }
  }
  if(280<valor_final<320){
    for(i=0;i=3; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(0, 255, 0));//Establecemos el color rojo en los LED´s correspondientes
    }
    for(i=4;i=6; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(171, 255, 0));//Establecemos el color naranja en los LED´s correspondientes
    }
    for(i=7; i=9; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 247, 0));//Establecemos el color amarillo en los LED´s correspondientes
    }
  }

  if(320<valor_final<360){
    for(i=0;i=3; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(0, 255, 0));//Establecemos el color rojo en los LED´s correspondientes
    }
    for(i=4;i=6; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(171, 255, 0));//Establecemos el color naranja en los LED´s correspondientes
    }
    for(i=7; i=9; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 247, 0));//Establecemos el color amarillo en los LED´s correspondientes
    }
    tira_LED.setPixelColor(10, tira_LED.Color(255, 171, 0));//Establecemos el color verde pistacho en los LED´s correspondientes
  }

  if(360<valor_final<400){
    for(i=0;i=3; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(0, 255, 0));//Establecemos el color rojo en los LED´s correspondientes
    }
    for(i=4;i=6; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(171, 255, 0));//Establecemos el color naranja en los LED´s correspondientes
    }
    for(i=7; i=9; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 247, 0));//Establecemos el color amarillo en los LED´s correspondientes
    }
    for(i=10; i=11; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 171, 0));//Establecemos el color verde pistacho en los LED´s correspondientes 
    }
  }
  if(400<valor_final<440){
    for(i=0;i=3; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(0, 255, 0));//Establecemos el color rojo en los LED´s correspondientes
    }
    for(i=4;i=6; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(171, 255, 0));//Establecemos el color naranja en los LED´s correspondientes
    }
    for(i=7; i=9; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 247, 0));//Establecemos el color amarillo en los LED´s correspondientes
    }
    for(i=10; i=12; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 171, 0));//Establecemos el color verde pistacho en los LED´s correspondientes 
    }
  }

  if(440<valor_final<480){
    for(i=0;i=3; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(0, 255, 0));//Establecemos el color rojo en los LED´s correspondientes
    }
    for(i=4;i=6; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(171, 255, 0));//Establecemos el color naranja en los LED´s correspondientes
    }
    for(i=7; i=9; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 247, 0));//Establecemos el color amarillo en los LED´s correspondientes
    }
    for(i=10; i=12; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 171, 0));//Establecemos el color verde pistacho en los LED´s correspondientes 
    }
    tira_LED.setPixelColor(13, tira_LED.Color(255, 0, 0));//Establecemos el color verde en los LED´s correspondientes
  }
  if(440<valor_final<480){
    for(i=0;i=3; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(0, 255, 0));//Establecemos el color rojo en los LED´s correspondientes
    }
    for(i=4;i=6; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(171, 255, 0));//Establecemos el color naranja en los LED´s correspondientes
    }
    for(i=7; i=9; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 247, 0));//Establecemos el color amarillo en los LED´s correspondientes
    }
    for(i=10; i=12; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 171, 0));//Establecemos el color verde pistacho en los LED´s correspondientes 
    }
    for(i=13; i=14; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 0, 0));//Establecemos el color verde en los LED´s correspondientes
    }
  }
  if(480<valor_final<520){
    for(i=0;i=3; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(0, 255, 0));//Establecemos el color rojo en los LED´s correspondientes
    }
    for(i=4;i=6; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(171, 255, 0));//Establecemos el color naranja en los LED´s correspondientes
    }
    for(i=7; i=9; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 247, 0));//Establecemos el color amarillo en los LED´s correspondientes
    }
    for(i=10; i=12; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 171, 0));//Establecemos el color verde pistacho en los LED´s correspondientes 
    }
    for(i=13; i=15; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 0, 0));//Establecemos el color verde en los LED´s correspondientes
    }
  }


  if(520<valor_final<560){
    for(i=0;i=3; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(0, 255, 0));//Establecemos el color rojo en los LED´s correspondientes
    }
    for(i=4;i=6; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(171, 255, 0));//Establecemos el color naranja en los LED´s correspondientes
    }
    for(i=7; i=9; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 247, 0));//Establecemos el color amarillo en los LED´s correspondientes
    }
    for(i=10; i=12; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 171, 0));//Establecemos el color verde pistacho en los LED´s correspondientes 
    }
    for(i=13; i=14; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 0, 0));//Establecemos el color verde en los LED´s correspondientes
    }
    tira_LED.setPixelColor(15, tira_LED.Color(255, 0, 154));//Establecemos el color verde agua en los LED´s correspondiente
  }

  if(560<valor_final<600){
    for(i=0;i=3; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(0, 255, 0));//Establecemos el color rojo en los LED´s correspondientes
    }
    for(i=4;i=6; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(171, 255, 0));//Establecemos el color naranja en los LED´s correspondientes
    }
    for(i=7; i=9; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 247, 0));//Establecemos el color amarillo en los LED´s correspondientes
    }
    for(i=10; i=12; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 171, 0));//Establecemos el color verde pistacho en los LED´s correspondientes 
    }
    for(i=13; i=14; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 0, 0));//Establecemos el color verde en los LED´s correspondientes
    }
    for(i=15; i=16; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 0, 154));//Establecemos el color verde agua en los LED´s correspondiente
    }
  }
  if(600<valor_final<640){
    for(i=0;i=3; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(0, 255, 0));//Establecemos el color rojo en los LED´s correspondientes
    }
    for(i=4;i=6; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(171, 255, 0));//Establecemos el color naranja en los LED´s correspondientes
    }
    for(i=7; i=9; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 247, 0));//Establecemos el color amarillo en los LED´s correspondientes
    }
    for(i=10; i=12; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 171, 0));//Establecemos el color verde pistacho en los LED´s correspondientes 
    }
    for(i=13; i=14; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 0, 0));//Establecemos el color verde en los LED´s correspondientes
    }
    for(i=15; i=17; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 0, 154));//Establecemos el color verde agua en los LED´s correspondiente
    }
  }

  if(640<valor_final<680){
    for(i=0;i=3; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(0, 255, 0));//Establecemos el color rojo en los LED´s correspondientes
    }
    for(i=4;i=6; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(171, 255, 0));//Establecemos el color naranja en los LED´s correspondientes
    }
    for(i=7; i=9; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 247, 0));//Establecemos el color amarillo en los LED´s correspondientes
    }
    for(i=10; i=12; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 171, 0));//Establecemos el color verde pistacho en los LED´s correspondientes 
    }
    for(i=13; i=14; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 0, 0));//Establecemos el color verde en los LED´s correspondientes
    }
    for(i=15; i=17; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 0, 154));//Establecemos el color verde agua en los LED´s correspondiente
    }
    tira_LED.setPixelColor(18, tira_LED.Color(255, 0, 255));//Establecemos el color celeste en los LED´s correspondientes
  }
  if(680<valor_final<720){
    for(i=0;i=3; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(0, 255, 0));//Establecemos el color rojo en los LED´s correspondientes
    }
    for(i=4;i=6; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(171, 255, 0));//Establecemos el color naranja en los LED´s correspondientes
    }
    for(i=7; i=9; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 247, 0));//Establecemos el color amarillo en los LED´s correspondientes
    }
    for(i=10; i=12; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 171, 0));//Establecemos el color verde pistacho en los LED´s correspondientes 
    }
    for(i=13; i=14; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 0, 0));//Establecemos el color verde en los LED´s correspondientes
    }
    for(i=15; i=17; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 0, 154));//Establecemos el color verde agua en los LED´s correspondiente
    }
    for(i=18; i=19; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 0, 255));//Establecemos el color celeste en los LED´s correspondientes
    }
  }
  if(720<valor_final<760){
    for(i=0;i=3; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(0, 255, 0));//Establecemos el color rojo en los LED´s correspondientes
    }
    for(i=4;i=6; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(171, 255, 0));//Establecemos el color naranja en los LED´s correspondientes
    }
    for(i=7; i=9; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 247, 0));//Establecemos el color amarillo en los LED´s correspondientes
    }
    for(i=10; i=12; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 171, 0));//Establecemos el color verde pistacho en los LED´s correspondientes 
    }
    for(i=13; i=14; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 0, 0));//Establecemos el color verde en los LED´s correspondientes
    }
    for(i=15; i=17; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 0, 154));//Establecemos el color verde agua en los LED´s correspondiente
    }
    for(i=18; i=20; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 0, 255));//Establecemos el color celeste en los LED´s correspondientes
    }
  }

  if(760<valor_final<800){
    for(i=0;i=3; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(0, 255, 0));//Establecemos el color rojo en los LED´s correspondientes
    }
    for(i=4;i=6; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(171, 255, 0));//Establecemos el color naranja en los LED´s correspondientes
    }
    for(i=7; i=9; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 247, 0));//Establecemos el color amarillo en los LED´s correspondientes
    }
    for(i=10; i=12; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 171, 0));//Establecemos el color verde pistacho en los LED´s correspondientes 
    }
    for(i=13; i=14; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 0, 0));//Establecemos el color verde en los LED´s correspondientes
    }
    for(i=15; i=17; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 0, 154));//Establecemos el color verde agua en los LED´s correspondiente
    }
    for(i=18; i=20; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 0, 255));//Establecemos el color celeste en los LED´s correspondientes
    }
    tira_LED.setPixelColor(21, tira_LED.Color(0, 0, 255));//Establecemos el color azul oscuro en los LED´s correspondientes
  }
  if(800<valor_final<840){
    for(i=0;i=3; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(0, 255, 0));//Establecemos el color rojo en los LED´s correspondientes
    }
    for(i=4;i=6; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(171, 255, 0));//Establecemos el color naranja en los LED´s correspondientes
    }
    for(i=7; i=9; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 247, 0));//Establecemos el color amarillo en los LED´s correspondientes
    }
    for(i=10; i=12; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 171, 0));//Establecemos el color verde pistacho en los LED´s correspondientes 
    }
    for(i=13; i=14; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 0, 0));//Establecemos el color verde en los LED´s correspondientes
    }
    for(i=15; i=17; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 0, 154));//Establecemos el color verde agua en los LED´s correspondiente
    }
    for(i=18; i=20; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 0, 255));//Establecemos el color celeste en los LED´s correspondientes
    }
    for(i=21; i=22; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(0, 0, 255));//Establecemos el color azul oscuro en los LED´s correspondientes
    }
  }
  if(840<valor_final<880){
    for(i=0;i=3; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(0, 255, 0));//Establecemos el color rojo en los LED´s correspondientes
    }
    for(i=4;i=6; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(171, 255, 0));//Establecemos el color naranja en los LED´s correspondientes
    }
    for(i=7; i=9; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 247, 0));//Establecemos el color amarillo en los LED´s correspondientes
    }
    for(i=10; i=12; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 171, 0));//Establecemos el color verde pistacho en los LED´s correspondientes 
    }
    for(i=13; i=14; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 0, 0));//Establecemos el color verde en los LED´s correspondientes
    }
    for(i=15; i=17; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 0, 154));//Establecemos el color verde agua en los LED´s correspondiente
    }
    for(i=18; i=20; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 0, 255));//Establecemos el color celeste en los LED´s correspondientes
    }
    for(i=21; i=23; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(0, 0, 255));//Establecemos el color azul oscuro en los LED´s correspondientes
    }
  }

  if(880<valor_final<920){
    for(i=0;i=3; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(0, 255, 0));//Establecemos el color rojo en los LED´s correspondientes
    }
    for(i=4;i=6; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(171, 255, 0));//Establecemos el color naranja en los LED´s correspondientes
    }
    for(i=7; i=9; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 247, 0));//Establecemos el color amarillo en los LED´s correspondientes
    }
    for(i=10; i=12; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 171, 0));//Establecemos el color verde pistacho en los LED´s correspondientes 
    }
    for(i=13; i=14; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 0, 0));//Establecemos el color verde en los LED´s correspondientes
    }
    for(i=15; i=17; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 0, 154));//Establecemos el color verde agua en los LED´s correspondiente
    }
    for(i=18; i=20; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 0, 255));//Establecemos el color celeste en los LED´s correspondientes
    }
    for(i=21; i=22; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(0, 0, 255));//Establecemos el color azul oscuro en los LED´s correspondientes
    }
    tira_LED.setPixelColor(23, tira_LED.Color(0, 188, 255));//Establecemos el color morado en los LED´s correspondientes
  }
  if(920<valor_final<950){
    for(i=0;i=3; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(0, 255, 0));//Establecemos el color rojo en los LED´s correspondientes
    }
    for(i=4;i=6; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(171, 255, 0));//Establecemos el color naranja en los LED´s correspondientes
    }
    for(i=7; i=9; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 247, 0));//Establecemos el color amarillo en los LED´s correspondientes
    }
    for(i=10; i=12; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 171, 0));//Establecemos el color verde pistacho en los LED´s correspondientes 
    }
    for(i=13; i=14; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 0, 0));//Establecemos el color verde en los LED´s correspondientes
    }
    for(i=15; i=17; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 0, 154));//Establecemos el color verde agua en los LED´s correspondiente
    }
    for(i=18; i=20; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 0, 255));//Establecemos el color celeste en los LED´s correspondientes
    }
    for(i=21; i=22; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(0, 0, 255));//Establecemos el color azul oscuro en los LED´s correspondientes
    }
    for(i=23; i=25; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(0, 188, 255));//Establecemos el color morado en los LED´s correspondientes
    }
  }

  if(950<valor_final<965){
    for(i=0;i=3; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(0, 255, 0));//Establecemos el color rojo en los LED´s correspondientes
    }
    for(i=4;i=6; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(171, 255, 0));//Establecemos el color naranja en los LED´s correspondientes
    }
    for(i=7; i=9; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 247, 0));//Establecemos el color amarillo en los LED´s correspondientes
    }
    for(i=10; i=12; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 171, 0));//Establecemos el color verde pistacho en los LED´s correspondientes 
    }
    for(i=13; i=14; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 0, 0));//Establecemos el color verde en los LED´s correspondientes
    }
    for(i=15; i=17; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 0, 154));//Establecemos el color verde agua en los LED´s correspondiente
    }
    for(i=18; i=20; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 0, 255));//Establecemos el color celeste en los LED´s correspondientes
    }
    for(i=21; i=22; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(0, 0, 255));//Establecemos el color azul oscuro en los LED´s correspondientes
    }
    for(i=23; i=25; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(0, 188, 255));//Establecemos el color morado en los LED´s correspondientes
    }
    tira_LED.setPixelColor(26, tira_LED.Color(0, 255, 0));//Establecemos el color rosa en los LED´s correspondientes
  }
  if(965<valor_final<980){
    for(i=0;i=3; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(0, 255, 0));//Establecemos el color rojo en los LED´s correspondientes
    }
    for(i=4;i=6; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(171, 255, 0));//Establecemos el color naranja en los LED´s correspondientes
    }
    for(i=7; i=9; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 247, 0));//Establecemos el color amarillo en los LED´s correspondientes
    }
    for(i=10; i=12; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 171, 0));//Establecemos el color verde pistacho en los LED´s correspondientes 
    }
    for(i=13; i=14; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 0, 0));//Establecemos el color verde en los LED´s correspondientes
    }
    for(i=15; i=17; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 0, 154));//Establecemos el color verde agua en los LED´s correspondiente
    }
    for(i=18; i=20; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 0, 255));//Establecemos el color celeste en los LED´s correspondientes
    }
    for(i=21; i=22; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(0, 0, 255));//Establecemos el color azul oscuro en los LED´s correspondientes
    }
    for(i=23; i=25; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(0, 188, 255));//Establecemos el color morado en los LED´s correspondientes
    }
    for(i=26; i=27; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(0, 255, 0));//Establecemos el color rosa en los LED´s correspondientes
    }
  }
  if(980<valor_final<995){
    for(i=0;i=3; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(0, 255, 0));//Establecemos el color rojo en los LED´s correspondientes
    }
    for(i=4;i=6; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(171, 255, 0));//Establecemos el color naranja en los LED´s correspondientes
    }
    for(i=7; i=9; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 247, 0));//Establecemos el color amarillo en los LED´s correspondientes
    }
    for(i=10; i=12; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 171, 0));//Establecemos el color verde pistacho en los LED´s correspondientes 
    }
    for(i=13; i=14; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 0, 0));//Establecemos el color verde en los LED´s correspondientes
    }
    for(i=15; i=17; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 0, 154));//Establecemos el color verde agua en los LED´s correspondiente
    }
    for(i=18; i=20; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 0, 255));//Establecemos el color celeste en los LED´s correspondientes
    }
    for(i=21; i=22; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(0, 0, 255));//Establecemos el color azul oscuro en los LED´s correspondientes
    }
    for(i=23; i=25; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(0, 188, 255));//Establecemos el color morado en los LED´s correspondientes
    }
    for(i=26; i=28; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(0, 255, 0));//Establecemos el color rosa en los LED´s correspondientes
    }
  }
  if(995<valor_final<1024){
    for(i=0;i=3; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(0, 255, 0));//Establecemos el color rojo en los LED´s correspondientes
    }
    for(i=4;i=6; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(171, 255, 0));//Establecemos el color naranja en los LED´s correspondientes
    }
    for(i=7; i=9; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 247, 0));//Establecemos el color amarillo en los LED´s correspondientes
    }
    for(i=10; i=12; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 171, 0));//Establecemos el color verde pistacho en los LED´s correspondientes 
    }
    for(i=13; i=14; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 0, 0));//Establecemos el color verde en los LED´s correspondientes
    }
    for(i=15; i=17; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 0, 154));//Establecemos el color verde agua en los LED´s correspondiente
    }
    for(i=18; i=20; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 0, 255));//Establecemos el color celeste en los LED´s correspondientes
    }
    for(i=21; i=22; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(0, 0, 255));//Establecemos el color azul oscuro en los LED´s correspondientes
    }
    for(i=23; i=25; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(0, 188, 255));//Establecemos el color morado en los LED´s correspondientes
    }
    for(i=26; i=29; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(0, 255, 0));//Establecemos el color rosa en los LED´s correspondientes
    }
  }
  tira_LED.show();
}

Ahora mismo solo está escrito la instancia tira_LED.show(); en:

  if(0<valor_final<34){
    tira_LED.setPixelColor(0, tira_LED.Color(0, 255, 0));//Establecemos el color rojo en los LED´s correspondientes
    tira_LED.show(); 
  }
  if(34<valor_final<65){
    for(i=0;i=2; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(0, 255, 0));//Establecemos el color rojo en los LED´s correspondientes
    }
    tira_LED.show();
  }
  if(65<valor_final<102){
    for(i=0;i=3; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(0, 255, 0));//Establecemos el color rojo en los LED´s correspondientes
    }
    tira_LED.show();
  }

para que se pueda ver directamente que al compilar, no solo no funcionan al ritmo de la música, si no que si deberían encenderse los 4 primeros LED´s (la condición para que se enciendan es que el valor de la señal de audio esté entre 0 y 102, lo cual debería encenderse si o si si hay musica puesta), solo se encienden los LED´s 0 y 2, pero el 1 y el 3 siempre están apagadaos.

Al final de la función vumetro() es dónde según mi criterio debería estar la sentencia tira_LED.show(); ya que es cuando se habría procesado la señal analógica completamente.

  if(995<valor_final<1024){
    for(i=0;i=3; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(0, 255, 0));//Establecemos el color rojo en los LED´s correspondientes
    }
    for(i=4;i=6; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(171, 255, 0));//Establecemos el color naranja en los LED´s correspondientes
    }
    for(i=7; i=9; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 247, 0));//Establecemos el color amarillo en los LED´s correspondientes
    }
    for(i=10; i=12; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 171, 0));//Establecemos el color verde pistacho en los LED´s correspondientes 
    }
    for(i=13; i=14; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 0, 0));//Establecemos el color verde en los LED´s correspondientes
    }
    for(i=15; i=17; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 0, 154));//Establecemos el color verde agua en los LED´s correspondiente
    }
    for(i=18; i=20; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 0, 255));//Establecemos el color celeste en los LED´s correspondientes
    }
    for(i=21; i=22; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(0, 0, 255));//Establecemos el color azul oscuro en los LED´s correspondientes
    }
    for(i=23; i=25; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(0, 188, 255));//Establecemos el color morado en los LED´s correspondientes
    }
    for(i=26; i=29; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(0, 255, 0));//Establecemos el color rosa en los LED´s correspondientes
    }
  }
  tira_LED.show();
}

Adjunto unas imágenes de el conexionado. Siento la longitud de la consulta, pero prefiero dejar todo bien documentado desde el principio.

Actualizo con nueva información. A la par que estoy realizando este proyecto, estoy realizando un analizador de espectros de frecuencia el cual aplicaré para señales de audio también. Para ello he tenido que modificar el ADC para que cumpla el teorema de Nyquist y pueda hacer una barrido de frecuencias desde los 20 Hz hasta 20 kHz (frecuencias absolutas audibles por el humano). También he tenido que elevar la señal para no perder la información de los picos negativos de la misma.
Ninguna de estas cosas las he realizado en este código, así como tampoco he comprobado mediante puerto serial si está leyendo algún valor del jack.
Sinceramente creo que me he precipitado escribiendo la consulta. No la voy a borrar, pero una vez haya probado estas posibilidades, volveré a escribir tanto si ha servido de algo como si no.
PD: aún tampoco he comprobado que funcione el analizador de espectros de frecuencias, ya que empecé el código mientras me llegaban las tiras LED Neopixel.

Hola,
1º- La forma en que calculas valor_promedio es para mi bastante "pintoresca" pero podria funcionar si cabiaras a:

valor_promedio = (maximo + minimo) / 2;

piensalo.
No obstante tendrias mejores resultados si utilizaras un filtro de media movil lee si quieres el siguiente enlace LINK.

2º- En todas las comparaciones que haces por ejemplo:

if(34<valor_final<65){

Eso asi esta mal escrito y siempre se cumple la condicion y no se por que el compilador no da error, La forma correcta es:

if (valor_final > 34 && valor_final < 65){

Una cosa ¿esto es un reto personal?. te lo digo porque tengo un enlace a un vumetro que va de lujo para esos led y en estereo/mono varias formas de visualización etc. .Si quieres te lo paso .
Saludos.

Se han solapado los mensajes.
Para un analizador de espectro creo que se usa la transformada de fourier, de la cual tienes librerias faciles de utilizar y tambien con varios eyemplos en la red.
Saludos.

Buenas noches @gonpezzi ,

En primer lugar, gracias por tu pronta respuesta. Probaré el cambio valor_promedio = (maximo + minimo) / 2; sin embargo no entiendo bien por qué piensas que es algo rara la manera en la que lo he enfocado. Me gustaría saberlo si no te importa.

Por otro lado, tienes razón. Las comparaciones las he hecho de una forma nefasta. Gracias por la observación.

Este proyecto, al igual que el del analizador de espectros, son proyectos personales que estoy realizando debido a que estoy realizando con trabajo de fin de grado (TFG) un sintetizador analógico monofónico. Al estar adentrandrome en el mundo de la música, quiero hacer todo lo que pueda que esté relacionado de una manera u otra.

Por último, por supuesto que me gustaría que compartieses ese enlace. Toda ayuda es bien recibida, y nunca está de más tener referencias.

Muchísimas gracias por tu ayuda. Iré comentando por aquí los avances que realice.

Si, de hecho estoy realizandolo haciendo uso de la biblioteca FHT.h, ya que esta es más rápida y consume menos recursos que la FFT.h.

Me parece rara por que de no se cuantos valores que puedes leer en los 50 ms solo te quedas con dos desperdiciando los demas. Yo no pondria limite de iempo, con un buque for llenaria una matriz de n valores con otro for los sumaria y lo dividiria por n, asi se aprovechan todos, no obstante la mejor forma es el filtro de media movil que te indique antes.
El link a ese vumetro:
LED NEO PIXEL, VUMETRO DIGITAL, ARDUINO, MILES DE COLORES, COMO HACER Y DESCARGAR. - YouTube
El video no es muy bueno, pero si lo montas los resultados son expectaculares. Uno de sus modos de funcionamiento da un resultado identico al analizador de espectro que te indico a continuacion solo que con dos columnas , canales isquierdo y derecho.
En cuanto al analizador de espectro este es espectacular, no lo he probado aun y no se si el proyecto esta completo:
14 Band Spectrum Analyzer Part.3 | Acrylic Tower - YouTube
Este untimo si lo he probado y funciona. va con una matriz de 32X8 led, es un buen punto de partida , no seria dificil en la secuencia de if canbiar los comandos para tiras de led neopixel.
Analizador de espectro de Audio matriz 8x8x4 Max7219 libreria FFT - YouTube
Bueno hasta otro rato supongo seguiremos hablando.

Tienes razón, desprecio mucho valores. He leído que en un segundo una señal de audio puede tener aproximadamente unos 48000 cambios, lo cual me pareció una barbaridad y preferí quedarme con solo 2 valores, lo cual es cortar demasiado por lo sano. Me ha gustado tu idea de la matriz. He realizado un filtro de media móvil en Matlab, pero nunca en Arduino. Independientemente no creo que deba ser más complicado del o que fue con Matlab. Probaré la opción del filtro y si no usaré directamente la matriz.

Con respecto al link del vúmetro, siendo decirte que me dirige directamente a la página principal de Youtube y no al vídeo en cuestión.

Le echaré un vistazo a ambos analizadores de espectros, y con cualquier cosa, volveré a comentar por aquí.

Muchas gracias por tu ayuda. Estamos en contacto. Un saludo.

Cierto lo del enlace, ya lo he corregido.

Fijate bien el tema del vúmetro porque lo que necesitas es el valor máximo de las muestras para X período de tiempo, no el promedio ni la mediana.
Con promedio o mediana estarías "matando" los picos.

Saludos

Cierto, pero en la practica mostrar todos los picos hace al vúmetro demasiado rápido , no queda bien, parece inestable, hay que frenarlo un poco y como no vamos a poner delays mejor hacerlo con unos valores promedio. Por ejemplo en el link que he dado antes lleva una variable para el numero de lecturas del promedio que controla un For , para mi gusto un valor de 8 lo hace perfecto. Pero claro con otro código ese valor de números de lecturas cambiara. Una vez echo el código final habria que sacarlo experimentalmente.

Lo hace demasiado rápido según la cantidad de muestras que uses.
Insisto, si usas el promedio pierdes la capacidad de mostrar los picos.
Claro que si es algo meramente decorativo poco importa este detalle.

Saludos

Buenas tardes gatul,

Entiendo entonces que hacer una combinación entre la respuesta de gonpezzi y la tuya sería una buena opción. Es decir, puedo llenar durante un periodo de 20 ms, por ejemplo y mediante un bucle for y una sentencia if ir guardando el resultado mayor. Voy a probarlo de esta manera, y si veo que los cambios son muy rápidos, aumentaré el tiempo de muestreo.

Gracias a ambos por las respuestas. En cuanto tenga el código lo subo, tanto si funciona como si no.

Un saludo.

Buenos días,

Voy a realizar un seguimiento de lo que he ido realizando o dándome cuenta durante estos días. En primer lugar, decir que desde el primer momento el error no está (solo) en el código. Cuando trato de leer la entrada del pin analógico al que he conectado el socket para el jack 3.5, solo recibo un valor: 1023. Siempre el mismo valor, lo cual me da que pensar que estoy saturando el ADC dándole una señal que siempre marca 5V. El del potenciómetro funcióna perfectamente, si bien es verdad que cuando vario rápidamente el potenciómetro, arduino se cuelga y deja de imprimirme los valores leido por el puerto analógico.
El código que he usado para analizar esto es el siguiente:

#include <Adafruit_NeoPixel.h>///https://github.com/adafruit/Adafruit_NeoPixel

//Debido a que la señal de audio varía mucho en poco tiempo, es mejor tomar un solo valor (el máximo) en
//un intervalo de tiempo
#define tiempo_muestreo 40 //Definimos una ventana de 40 ms, la cual corresponde a una frecuencia de muestreo de 25 Hz
#define pin_led 6//Defininmos el pin de conexión de la tira LED
#define numero_led 30//Definimos el número de LED´s de nuestra tira. En nuestro caso es 30 LED´s en 0,5m 
#define pin_jack 14 //Definimos el pin analógico de toma de datos (A0)
#define pin_pot 15//Definimos el pin analógico al que conectaremos el potenciómetro que controlará el nivel de amplitud (A1)

//Creamos un objeto de la tira
//Primer parámetro = cantidad de pixeles en la tira
//Segundo parámetro = pin de conexión a Arduino
//Tercer parámetro:
  //NEO_KHZ800  800 KHz velocidad de datos (WS2812 y nuevos)
  //NEO_KHZ400  400 KHz velocidad de datos (WS2811 y anteriores)
  //NEO_GRB     flujo de datos en el orden GRB (WS2812 y nuevos)
  //NEO_RGB     fluo de datos en el orden RGB (versiones más antiguas)
Adafruit_NeoPixel tira_LED = Adafruit_NeoPixel(numero_led, pin_led, NEO_GRB + NEO_KHZ800);

//Definimos dos variables_ una que guardará el valor máximo y otra el valor máximo anterior para compararlos
unsigned int maximo=0;
unsigned int maximo_anterior=0;
//Definimos una variable que guardará el valor leido por le pin del potenciometro
unsigned int poten = 0;
//Definimos una variable que usaremos para ajustar la sensibilidad de la tira LED
unsigned int valor_final = 0;

void setup() {
  // put your setup code here, to run once:
  pinMode(pin_led, OUTPUT);
  tira_LED.begin();//Iniciamos la tira LED
  tira_LED.show();//mandamos un valor 0 a la  tira LED, es decir, iniciamos con la tira LED apagada

}

void loop() {
  // put your main code here, to run repeatedly:
  Serial.begin(9600);
  unsigned long tiempo_inicial = millis();//Registramos el momento en el que entramos en el loop principal
  while(millis()-tiempo_inicial < tiempo_muestreo){//Mientras que dure la ventana de 40 ms..
    maximo=analogRead(pin_jack);//Registraremos el valor leido por el ADC en el pin del jack
    if(maximo>maximo_anterior){//Si el valor leido por el ADC en el pin del jack es mayor que el guardado anteriormente (maximo_anterior lo iniciamos en 0)...
      maximo_anterior=maximo;//...guardamos el nuevo máximo
      maximo=0;//e iniciamos en cero de nuevo la variable de registro de datos
    }
  }
  poten = analogRead(pin_pot);//Leemos y guardamos el valor leido por le pin del potenciometro
  valor_final = maximo_anterior/poten;
  //Imprimimos por pantalla a modo de depuración
  Serial.print("Jack: ");
  Serial.print(maximo_anterior);
  Serial.print("  Potenciometro: ");
  Serial.println(poten);
  

  vumetro();//Llamamos a la funcion que se encargará de encender las luces
  

}

void vumetro(){
  int i = 0;
  if(valor_final>0 && valor_final<250){
    for(i=0; i<10; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(0,255,0));
    }
  }
  if(valor_final>=250 && valor_final<500){
    for(i=4; i<15; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(255, 0, 0));
    }
  }
  if(valor_final>=500 && valor_final<=1023){
    for(i=15; i=30; i++){
      tira_LED.setPixelColor(i, tira_LED.Color(0, 0, 255));
    }
  }
  tira_LED.show();
}

Es un código sencillo que me sirve como depurador para saber hasta dónde está bien lo que pienso. Al no tener osciloscopio en casa, no puedo ver que magnitud de voltaje tiene mi salida Jack. Estoy tratando de realizar un amplificador analógico en el que pueda modificar los valores de ganancia de tensión y de offset, a ver si jugando con esto consigo que se pueda leer correctamente la señal de audio que viene del Jack.

Previamente a esto, he tratado de realizar un divisor de tensión usando la fuente de 5V propia de arduino como tensión de referencia, y usando dos resistencias de 10k. De esta manera pretendía elevar la señal para evitar el cruce por cero. También añadí un condensador de 1 uF de acoplo para filtrar el ruido antes de conectarlo a la entrada analógica.

Un saludo.

Si conectaste directamente la señal de audio al pin analógico del arduino es muy probable que esa entrada haya pasado a mejor vida,

Te sugiero que pruebes conectando un potenciómetro a 5V y hagas unas lecturas a ver si sobrevivió.

Nunca, jamás, conectes algo que pueda entregar voltajes negativos, como es el caso de una señal de audio, sin rectificarla, agregar un offset o "matar" la señal negativa con un diodo, por ej.

Saludos

Buenas tarde gatul,

Lo primero que hice fue comprobar eso mismo. He tenido suerte y no he roto ningun puerto analógico.

Un saludo.

Para darle un offset a la señal puedes probar con algo como esto

Si la señal es muy alta, la ajustas con el potenciómetro. Obviamente no amplifica.

Agrego: por seguridad puedes agregar un diodo (preferiblemente de tipo Schottky) para anular cualquier posible nivel negativo.

Saludos

Buenas tardes Gatul,

Realicé el circuito propuesto y parece ser que el problema viene de la toma de audio, ya que por mucho que mueva el potenciómetro, siempre recibo 510 (2,5V según el divisor de tensión). Esto me indica que el socket que tengo conectado al jack-jack, y este a la computadora, no está realizando su función.

Adjunto un par de imágenes de las conexiones. Estoy usando el siguiente código modiificado de ejemplo del IDE:

/*
  Analog Input

  Demonstrates analog input by reading an analog sensor on analog pin 0 and
  turning on and off a light emitting diode(LED) connected to digital pin 13.
  The amount of time the LED will be on and off depends on the value obtained
  by analogRead().

  The circuit:
  - potentiometer
    center pin of the potentiometer to the analog input 0
    one side pin (either one) to ground
    the other side pin to +5V
  - LED
    anode (long leg) attached to digital output 13
    cathode (short leg) attached to ground

  - Note: because most Arduinos have a built-in LED attached to pin 13 on the
    board, the LED is optional.

  created by David Cuartielles
  modified 30 Aug 2011
  By Tom Igoe

  This example code is in the public domain.

  http://www.arduino.cc/en/Tutorial/AnalogInput
*/

int sensorPin = A0;    // select the input pin for the potentiometer
int ledPin = 13;      // select the pin for the LED
int sensorValue = 0;  // variable to store the value coming from the sensor

void setup() {
  // declare the ledPin as an OUTPUT:
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  // read the value from the sensor:
  sensorValue = analogRead(sensorPin);
  // turn the ledPin on
  //digitalWrite(ledPin, HIGH);
  // stop the program for <sensorValue> milliseconds:
  Serial.println(sensorValue);
  delay(sensorValue);
  // turn the ledPin off:
  //digitalWrite(ledPin, LOW);
  // stop the program for for <sensorValue> milliseconds:
  //delay(sensorValue);
}
![WhatsApp Image 2022-01-09 at 20.05.21|666x499](upload://kTE42lX5R1s4jc1cf1k65HYVafa.jpeg)


Veo el cable amarillo a un extremo del potenciometro pero no veo que el otro extremo este a GND, tampoco veo que el GND de la entrada de audio este a GND, no se si esto influira.

Buenas @tresvdoble,

Gracias por tu respuesta. El cable de la entrada tierra al potenciómetro está oculto por el propio potenciómetro, pero se encuentra ahí. El del socket jack no lo tenía conectado; ¡gracias por el aviso!

Sin embargo, no ha influido en el problema que tengo.

Un saludo.