Non credo che @fedekr intendesse una cosa di questo genere...
Sospetto che vorrebbe tipo identificare quale variabile da usare a runtime in funzione del valore di qualeStepper, cosa che in questo modo è impossibile da fare!
Forse facciamo prima se descrivi l'esigenza e non il modo in cui hai pensato di implementarne lo sviluppo software.
Grazie delle vostre risposte
mi ritrovo con la risposta di cotestatnt che dice che è impossibile, credo che intendevo fare quello.
Comunque il mio progetto sarebbe quello di utilizzare uno schermo oled e almeno 2 motori stepper. Ci sono 2 pulsanti avanti e indietro per muovere il motore selezionato e vorrei che venisse riportato il valore in gradi del motore in questione.
Ma essendoci più di un motore, con altri 2 pulsanti avanti e indietro seleziono un altro motore e lo schermo oled visualizza la variabile riferita a quel motore, quindi ci saranno 2-3 o più variabili ognuna che segna la posizione di quel motore, e una che definisce il motore in questione.
Così è come ho pensato di fare per ora...
Perchè so già più o meno cosa voglio fare aldilà di Arduino cioè con gli stepper, ma non ancora con certezza, ho solo pensato di organizzarmi momentaneamente e poi vedere come continuare, se volete posso spiegarvi a cosa servirebbero ma forse va aldilà della programmazione.
Ciò che intendevo fare era selezionare la variabile del motore in questione (tutto ciò che deve mostrare l'oled) automaticamente in base alla variabile "qualeStepper". c'è una funzione che cancella tutto ogni sec e riscrive la variabile e il numero del motore. Cioè se qualeStepper è 1, lo schermo ogni sec mostra la variabile riferita al primo motore, se 2 il sec ecc...
Non so come si fa in questi casi...
Alla fine avevo capito bene, ti serve stampare sullo schermo un valore in base a quale motore stai gestendo. E da quel che dici il resto del codice è già presente e quindi la variabile qualeStepper è già valorizzata in modo corretto quindi se vuoi evitare una serie di if per stampare il valore credo che un array con i gradi di ogni motore possa fare al caso tuo, ad esempio:
int qualeStepper = 2;
int arrStepper[4] = {14, 18, 5, 9};
oled.print(arrStepper[(qualeStepper-1)]));
Era più un discorso in generale il mio.
Magari le variabili da visualizzare potrebbero diventare più di una in futuro e dover duplicare/triplicare tutto secondo me è "poco elegante".
E' vero che con una struct ed eventuali funzioni che lavorano su questa struct aggiungi un livello di astrazione in più, ma se devi introdurre una modifica oppure incrementare gli elementi dell'array la modifica la fai una volta soltanto e si propaga in automatico a tutto l'insieme.
Qualcosa del genere... (lasciando perdere i collegamenti dei motori che non hanno senso... ma nel simulatore funziona quindi va bene cosi)
In questo caso l'applicazione è talmente semplice che non ha senso come giustamente facevi notare, però io ormai l'ho adottato come approccio "standard".
Se devo scrivere del codice che viene eseguito da due o più oggetti diversi, allora lo implemento come un array di struct o meglio ancora come una classe.
Scusatemi, cotestatnt ti ringrazio per il tuo esempio, ma è troppo complicato per me adesso, ho cercato di scrivere un codice prendendo l'esempio di fabpolli, ci sto provando da quasi un ora e non ci riesco.
Potreste correggere il mio codice?
Mi succede che quando cambio e passo allo stepper2 con il pulsante va in tilt il valore nello schermo oled continua a dare dei numeri a caso prima positivi poi negativi, dove sto sbagliando?
Forse c'è solo qualcosa che non fa contatto nella breadboard, ma per il primo elemento dell'array funziona... aiuto...
Hai messo le resistenze di pull-down sui pulsanti?
Considera anche che nulla definisce espressamente la velocità degli incrementi e dei decrementi: vanno alla velocità del loop... arrStepper è int, perciò che succede quando va in overflow?...
if (digitalRead(7) == HIGH&&qualeStepper==1){ // prox stepper
++qualeStepper;
}
if (digitalRead(6) == HIGH&&qualeStepper==2){ // prev stepper
--qualeStepper;
lo scriverei più semplicemente:
if (digitalRead(7)==HIGH && qualeStepper==1) qualeStepper=2;
if (digitalRead(6)==HIGH && qualeStepper==2) qualeStepper=1;