Bueno, tras realizar de nuevo la función vumetro() y ajustar un poco más los valores de partida en el mapeo (registré el minimo y el máximo en un largo periodo de tiempo con distintos tipos de música), he conectado de nuevo la tira LED para ver los resultados, y curiosamente me pasa lo mismo que me pasaba antes de rehacer el código: solo se realiza una vez el ciclo. Adjunto un par de imágenes para retratar lo que digo.
Anteriormente, pensaba que el problema venía del while(), por eso rehíce el código poco a poco comprobando que todo funcionaba correctamente por separada y añadiendo poco a poco las distintas funciones. Por lo que veo el problema lo causa añadir la función vúmetro, no sé si por que estoy interactuando mal con ella o a que se puede deber el problema.
Sigo investigando. Dejo por aquí el código con la nueva función:
#include <Adafruit_NeoPixel.h>///https://github.com/adafruit/Adafruit_NeoPixel
#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
int pinJack = A0;
int valorJack = 0;
int maximo_anterior = 0;
int minimo_anterior = 1023;
int maximo_final=0;
int minimo_final=0;
unsigned long tiempoAhora =0;
//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 vumetro(void);
void setup(){
Serial.begin(9600);
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
tiempoAhora = millis();
}
void loop(){
while(millis()-tiempoAhora< 50){
valorJack = analogRead(pinJack);
Serial.print("ValorJack: ");
Serial.println(valorJack);
if(valorJack>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=valorJack;//...guardamos el nuevo máximo
}
if(valorJack<minimo_anterior){
minimo_anterior = valorJack;
}
valorJack=0;//e iniciamos en cero de nuevo la variable de registro de datos
}
maximo_final=map(maximo_anterior, 350, 700, 0, 100);
maximo_final=constrain(maximo_final, 0 ,100);
minimo_final=map(minimo_anterior, 350, 700, 0, 100);
minimo_final=constrain(minimo_final, 0 ,100);
Serial.print("Valor máximo = ");
Serial.println(maximo_anterior);
Serial.print("Valor mínimo = ");
Serial.println(minimo_anterior);
Serial.print("Maximo anterior mapeado = ");
Serial.println(maximo_final);
Serial.print("Minimo anterior mapeado = ");
Serial.println(minimo_final);
delay(2000);
vumetro();
//------------Reiniciamos las variable---------/////
maximo_anterior = 0;
minimo_anterior = 1023;
tiempoAhora=millis();//Guardamos el nuevo tiempo anterior antes de entrar de nuevo en el while
}
void vumetro(){
int i = 0;
if(maximo_final>0){
for(i=0; i = 5; i++){
tira_LED.setPixelColor(i, tira_LED.Color(255, 0 ,0));
tira_LED.show();
}
}
if(maximo_final>15){
for(i=0; i = 10; i++){
tira_LED.setPixelColor(i, tira_LED.Color(0, 255 ,0));
tira_LED.show();
}
}
if(maximo_final>30){
for(i=10; i = 15; i++){
tira_LED.setPixelColor(i, tira_LED.Color(0, 255 ,255));
}
}
if(maximo_final>45){
for(i=15; i = 20; i++){
tira_LED.setPixelColor(i, tira_LED.Color(255, 255 ,0));
}
}
if(maximo_final>60){
for(i=20; i =25 ; i++){
tira_LED.setPixelColor(i, tira_LED.Color(0, 255 ,255));
}
}
if(maximo_final>75){
for(i=25; i = 27; i++){
tira_LED.setPixelColor(i, tira_LED.Color(170, 255 ,100));
}
}
if(maximo_final>85){
for(i=27; i = 29; i++){
tira_LED.setPixelColor(i, tira_LED.Color(100, 255 ,170));
}
}
if(maximo_final>95){
tira_LED.setPixelColor(30, tira_LED.Color(255, 255 ,255));
}
//tira_LED.show();
}