Effettivamente quel pezzo di codice non ha più ragione di esistere.
Inizialmente facevo il mapAxis sul range totale dei valori dell'asse del joy da 0 a 1023 quindi avevo bisogno del case perchè la situazione di riposo era nel centro e le velocità dipendevano dal suo scostamento.
Poi ho deciso di "normalizzare la lettura" quindi a prescindere dal lato faccio in modo che il mapping ritorni sempre un numero da 0 a 7 numero che ho utilizzato per parzializzare la velocità.
Ho dovuto gestire il comportamento del potenziometro che su un lato mi arrivava a 7 e sull'altro si fermava a 6 pertanto trovavi quello che definivi Case "vuoto" che è semplicemente una OR con il successivo.
Comunque il codice l'ho modificato così
Codice:
int Joy(long val, int Axis)
{
long mapAxis;
int speedAxis;
//PER DARE STABILITA' AL JOY QUANDO E' PROSSIMO AL CENTRO
if (val <500 || val >524)
{
if (val <=512)
{
mapAxis = map(val, 0, 512, 7, 0);
Direction[Axis] = CW;
}
else
{
mapAxis = map(val+4, 513, 1023, 0, 7);
Direction[Axis] = CCW;
}
if (mapAxis==7) mapAxis=6;
speedAxis=(maxSpeed/6)*mapAxis*(speedscale/100.00);
}
else
{
speedAxis = minSpeed;
}
return speedAxis;
}
La riduzione della velocità rispetto a quanto indicato dal joy la fa questa funzione che è richiemata dal rispettivo tasto e che prevede delle "scorciatoie" a seconda di come premi il tasto
btnX.attachClick(Multi, 1);
btnX.attachDoubleClick(Multi, 2);
btnX.attachLongPressStop(Multi, 3);
La riduzione della velocità diventa sempre più fine al raggiungimento delle percentuale minima
Codice:
void Multi(int Option)
{
beepON(1);
old_speedscale=speedscale;
switch (Option) {
case 1:
switch (speedscale) {
case 100:
case 80:
case 60:
speedscale=speedscale - 20;
break;
case 40:
case 30:
case 20:
speedscale=speedscale - 10;
break;
case 10:
speedscale=speedscale - 5;
break;
case 5:
case 4:
case 3:
case 2:
speedscale=speedscale - 1;
break;
default:
speedscale=100;
break;
}
delay(100);
break;
case 2:
speedscale=100;
delay(300);
break;
case 3:
speedscale=5;
delay(300);
break;
}
}