Eccomi qua.
Ti posto una semplificazione esplicativa di come funziona adesso; il programma completo di circa 900 righe, per il momento te lo risparmio, ma quando sarà completo, lo condividerò con piacere, anche perchè mi piacerebbe avere un vostro parere, visto che scrivo in C solo da poco più di un mese!
Stato attuale:
//...
int readedCmd 0;
int min_value = 10;
int current_value = 0;
void setup() {
//...
}
void loop() {
//leggo valore di readedCmd da bluetooth
//...
switch (readedCmd) {
case CMD_NONE: {
setNone();
break;
}
case CMD_STOP: {
setStop();
break;
}
case CMD_SWC1: {
setSwitch1(0);
break;
}
case CMD_SWC2: {
setSwitch2();
break;
}
case CMD_VAL1: {
current_value += 5;
break;
}
case CMD_VAL2: {
current_value -= 5;
break;
}
}
//...
}
void setNone() {
digitalWrite(pin1, 0);
digitalWrite(pin2, 0);
analogWrite(pin3, 0);
}
void setStop() {
digitalWrite(pin1, 0);
digitalWrite(pin2, 0);
analogWrite(pin3, min_value);
}
void setSwitch1() {
digitalWrite(pin1, 1);
digitalWrite(pin2, 0);
analogWrite(pin3, current_value);
}
void setSwitch2() {
digitalWrite(pin1, 0);
digitalWrite(pin2, 1);
analogWrite(pin3, current_value);
}
In pratica se ricevo un comando via bluetooth, a seconda del comando eseguo una determinata funzione (preferisco tenere pulito il loop principale).
Tutte queste funzioni, tendenzialmente settano dei pin (in realtà sono dei motori, ma così semplifico l'esempio).
Per i pin 1 e 2 ho sempre dei valori costanti, ma per il terzo il valore è variabile e puo' essere rilevato da due variabili (min_value, current_value), in funzione del comando ricevuto.
min_value non è costante, perchè ho intenzione di renderlo configurabile a runtime.
Naturalmente così com'è funziona benissimo e volendo potrei usare una sola funzione con uno switch, ma non semplificherebbe di molto, quindi non mi interessa particolarmente.
Ieri, mentre scarpinavo in montagna, l'aria buona mi ha instillato la malsana idea, di semplificare tutte le funzioni introducendo una matrice bidimensionale che contiene (per riga) la configurazione dei settaggi per ogni comando
So che hai capito :), ma per capirci meglio, qualcosa di questo tipo:
idx | pin1 | pin2 | pin3
0 | 0 | 0 | 0 //setNone
1 | 0 | 0 | min_value //setStop
2 | 1 | 0 | current_value //setSwitch1
3 | 0 | 1 | current_value //setSwitch2
e quindi poi, semplificare con una sola funzione, ma qui nasce il problema...
per il pin3 il valore va letto da una o più variabili, come faccio?
Quindi ho pensato di usare i puntatori delle variabili, ma avrei dovuto convertirli in int (o altro) e poi riportarli a puntatori in fase di lettura, visto che gli elementi della matrice devo essere dello stesso tipo.
aspe, ... cacchio, ho risolto! 
mentre scrivevo l'ultimo paragrafo mi sono chiesto, ma come farei in net?
userei una classe, ma qui non posso, quindi... una matrice di strutture 
e pensare che in uno dei primi post dove ci siamo confrontati abbiamo discusso proprio di questo!
struct state_config {
byte pin1;
byte pin2;
int *pin3
};
Stasera provo
Scusate la contorsione mentale e grazie per la pazienza 
Federico