una posible solucion ,matriz de matrices ,falta acabar el formato para mostrar en la lcd y probar ,es para que veas la idea:
float matrices[3][6] = {{0, 1.5, 2.8, 3.36, 40, 50},{0, 7.05, 4.87, 258.36, 78.34, 5.00},{0, 2.47, 7.85, 14, 34, 555.00}};
byte num_matriz;
void setup() {
// put your setup code here, to run once:
}
void loop() {
//Codigo donde obtienes num_matriz de matriz a visualizar que va del 0 al 2 en vez del 1 al 3
for (byte i = 0; i < 6; i ++) {
//codigo
lcd.print(matrices[num_matriz][i];
//codigo
delay(2000);
}
// put your main code here, to run repeatedly:
}
Gracias, esta opción de una matriz con 2 dimensiones la había barajado, pero es algo engorrosa ya que realmente puedo llegar a mas de 1000 opciones diferentes y algunas hasta con mas de 100 números por opcion y constantemente va a haber ampliaciones de secuencias.
La idea es poder asociar el case o una entrada numérica desde teclado (que es lo que realmente voy a usar) para poder dirigirme directamente a la matriz float de 1 dimensión a buscar los datos.
Si la idea es hacer un switch con mas de 1000 opciones quizas deberias replantearte hacerlo de otra manera....por otro lado tendrias que calcular la cantidad de memoria necesaria para almacenar algo asi ,un float son 4 bytes ,100 cifras en una opcion->400 bytes y si tienes 1000 opciones.......olvidate de la ram aun con un mega.podrias guardar en memoria flash si te sobra del sketch ,pero los arrays deberian ser constantes ,si tuvieras que añadir valores de forma dinamica tendrias que modificar y cargar el sketch de nuevo.
TESLATRONICA:
Gracias, esta opción de una matriz con 2 dimensiones la había barajado, pero es algo engorrosa ya que realmente puedo llegar a mas de 1000 opciones diferentes y algunas hasta con mas de 100 números por opcion y constantemente va a haber ampliaciones de secuencias.
La idea es poder asociar el case o una entrada numérica desde teclado (que es lo que realmente voy a usar) para poder dirigirme directamente a la matriz float de 1 dimensión a buscar los datos.
Pues yo no estoy entendiendo lo que quieres hacer, pero precisamente si va a haber muchas más opciones y números, el switch case se me antoja mucho más costoso y difícil. No obstante, te pongo un código a ver si es lo que buscas:
Gracias, esta opción de una matriz con 2 dimensiones la había barajado, pero es algo engorrosa ya que realmente puedo llegar a mas de 1000 opciones diferentes y algunas hasta con mas de 100 números por opcion y constantemente va a haber ampliaciones de secuencias.
Gracias a Todos por Vuestras Opciones.
La opción de la matriz bidimensional queda descartada por razones de búsqueda y variaciones.
la opción que estoy usando es con "cases", lo que quería evitar repetir en cada case algunas líneas de programación (tal como lo tengo funciona bien).
Al quedarme corto de memoria he pasado del Arduino Mega al Arduino Due y de momento voy bastante sobrado.
Por ejemplo el programa en el Arduino Mega ocupaba mas del 90%, al pasarlo al Arduino Due se ha quedado en el 12%.
BUeno ayer me puse a jugar con los punteros y aunque logré algo que se acerca digamos que necesita del toque de un buen programador.
El programa funciona con la idea de TESLATRONICA pero no permite mostrar bien los datos de todos los elementos de los vectores. Solo un detalle para seguir trabajando.
Te muestro la idea TESLATRONICA y tu mira si te sirve o no
int i;
int numero_case = 1;
float *myPointer;
float matriz_1 [] = {0, 1.5, 2.8, 3.36, 40, 50};
float matriz_2 [] = {0, 7.05, 4.87, 258.36, 78.34, 5.00};
float matriz_3 [] = {0, 2.47, 7.85, 14, 34, 555.00};
void setup() {
// Incremented by 2 to get 3rd value of our array.
Serial.begin(9600);
Serial.println("Inicio.");
}
void loop() {
float **temp;
switch (numero_case) { //seleccion de cases
case 1: myPointer = &matriz_1[0];
break;
case 2: myPointer = &matriz_2[0];
break;
case 3: myPointer = &matriz_3[0];
break;
case 4: Serial.println("Terminado");
while(1);
break;
}
char buffer[30];
Serial.println();
Serial.println("numero_case =" + String(numero_case));
Serial.println();
for (i = 0; i < 6; i ++) {
temp = &myPointer;
*temp = *temp + i;
// Esto solo funciona en nodemcu y compilado con ST+DEVIOT
//de lo contrario usar Serial.print(**temp), etc etc
sprintf(buffer,"data =%5.2f", **temp);
Serial.println(buffer);
}
delay(2000);
numero_case++;
}
El resultado es bastante aceptable.
numero_case =1
data = 0.00
data = 1.50
data = 3.36
data = 0.00 <= MAL
data = 0.00 <= MAL
data = 0.00 <= MAL
numero_case =2
data = 0.00
data = 7.05
data =258.36
data = 0.00 <= MAL
data =40.00 <= MAL
data = 0.00 <= MAL
numero_case =3
data = 0.00
data = 2.47
data =14.00 <= MAL
data = 0.00 <= MAL
data =78.34 <= MAL
data = 3.36 <= MAL
Terminado
Como dije le falta trabajo pero probé la idea. No se si será de tu agrado pero respeta tu criterio @TESLATRONICA
Surbyte.
Creo que el código que puse yo hacía lo que buscas con el tuyo y es más sencillo. No veo necesidad de utilizar punteros a punteros, lo que además de complicar puede que te esté dando ese fallo que comentas.
Con un puntero a float puedes apuntar al inicio de uno de los arrays, y trabajar dicho puntero como si fuera el array original (aunque no conoceremos el número de elementos si éste es variable):
float *myPointer;
myPointer=matriz_1; // más sencillo que poner &matriz_1[0]
for (i=0;i<6; i++) {
sprintf(buffer,"data =%5.2f", myPointer);
Serial.println(buffer);
}
Pd. Efectivamente, el fallo viene dado en la línea *temp = *temp + i;
En la primera iteracción, *temp apuntará al primer elemento del array. En la segunda iteracción, como i=1, apuntará al segundo elemento. En la tercera, como i=2, apuntará al CUARTO elemento, y en la cuarta iteración apuntará al "séptimo" elemento.
No obstante, el principal problema para intentar ayudar en la solución es que no sabemos exactamente lo que está intentando hacer TESLATRÓNICA, porque sigo convencido de que la opción swtch/case no es la más óptima.
Bueno, en este punto no tengo tu nivel. Hice lo que mejor me salió y no presté atención a tu solución porque de haberlo sabido no hubiera estado horas luchando con lo que logré.
Mi error.
Dicho sea de paso. Tu sugerencia @noter no funciona al menos como yo lo estoy usando
for (i = 0; i < 6; i ++) {
myPointer = matriz_1;
sprintf(buffer,"data =%5.2f", myPointer);
Serial.println(buffer);
}