Hola a tod@s
Hace tiempo que quería empezar con esto de Arduino y acabo de llegar a este mundillo y cada día se me ocurre algo nuevo que hacer.
Quería saber si es posible cambiar una variable dependiendo de otra variable.
Me explico, hay una variable que indica una selección, unos pulsadores, unos led que indican la selección y luego varias variables que son arrays para una melodía y su tempo:
int led1 = 3;
int button1 = 9;
int selection[] = {
1, 2, 3
};
int melody1[] = {
NOTE_A4, NOTE_C5, NOTE_E5, NOTE_F5, NOTE_A4, NOTE_A4, NOTE_E5, NOTE_D5
};
int melody_tempo1[] = {
42, 42, 42, 42, 83, 83, 83, 42
};
*lo pongo así por simplificar, hay más variables, y led, button, melody, y melody_tempo existen varias veces con "1" "2" y "3"
Ya he creado un código que funciona correctamente, al hacer una pulsación lee el estado, activa el led, y reproduce la melodía leyendo las posiciones del Array de melodía y tempo mediante un "for".
El problema es que es el mismo código repetido tres veces, una por cada posible selección y ocupa bastante, el propio tamaño del código me limita el tamaño de la melodía y el poder meter más opciones, y realmente el único cambio en el groso del código es que las variables sean la 1, la 2 o la 3.
Así que intentando optimizarlo quiero poner el código de reproducción una sola vez y que cambien sus variables dependiendo de la selección, y al final escribo por aquí, porque a lo mejor estoy intentando de diferentes maneras, algo que realmente no es posible.
Ahora mismo estoy intentando crear arrays con las variables, para luego seleccionarlas, es decir:
int ledArray[] = {led1, led2, led3};
int melodyArray[] = {melody1, melody2, melody3};
int melody_tempoArray[] = {melody_tempo1, melody_tempo2, melody_tempo3};
pero en el código de reproducción queda un int array dentro de otro y Arduino IDE me da error al compilar, el código, que de nuevo simplifico para no repetir, es:
if (selection > 0){
led = ledArray[selection];
melody = melodyArray[selection];
melody_tempo = melody_tempoArray[selection]
melody_size = melody_sizeArray[selection]
melody_BPM = melody_BPMArray[selection]
for (int thisNote = 0; thisNote < melody_size + 1 ; thisNote++){
digitalWrite(led, HIGH);
noteDuration = (float) melody_tempo[thisNote] / melody_BPM;
tone(buzzer, melody[thisNote], noteDuration);
}
}
A ver si alguien amablemente me puede iluminar el camino.