uso di IF o Case?

Buongiorno a tutti.

Ho una serie di variabili contenenti valori diversi, per l’esattezza:

a → con due valori
b → con tre valori
c → con sei valori
d → con quattro valori
(tutti i valori ottenuti sono numerici - dallo 1 al (max) 6).

La combinazione dei singoli valori delle variabili danno inizio a diversi “void”.

La lunghezza totale del programma non dovrebbe variare eccessivamente utilizzando una delle seguenti due possibilità:

  • utilizzo di una serie di IF / ELSE IF nidificate o
  • una CASE testando le singole variabili con &&.

La mia esperienza con Arduino è recente, per cui non saprei quale delle due possibilità scegliere.

Potreste, p.f., darmi un consiglio?

Grazie + saluti

ciao

Se ho capito bene e ho fatto bene i conti sono 144 possibili combinazioni.
Per comodità potreste "trasformarle"( le combinazioni) in un int da valutare con un switch case dove la prima cifra corrisponde al valore di a, la seconda al valore di b ecc...

esempio: a=2; b=3; c=6; d=4 diventa 2364.
a=1; b=2; c=1; d=3 diventa 1213.

e per cortesia, non danno inizio a diversi "void", danno inizio a diverse funzioni :wink:

ciao
pippo72

144 sono troppi branch

Anche solo scriverli è operazione lunga e con forti rischi di errore

Spiega bene...

Magari alcune sono indipendenti, mutuamente escluse o mutuamente obbligate

Cosa vuoi fare?

Esatto.

Infatti questo è stato il primo tentativo.

Ma come faccio a mettere in sequenza i numeri?

Tieni presente che le variabili sono numeriche e per comodità le ho per ora messe in un array.

Ho provato concatenarle con "&", con "+" (ma mi dà la somma!) e con la virgola, cercando di verificare il risultato con un "Serial.println", senza ottenere il risultato voluto.

Anche in internet non ho trovato un aiuto!

Domanda: come faccio a concatenare i diversi valori ed ottenere un numero complesso?

Grazie + ciao

A più b per 10 più c per 100 e via così

Non è difficile...

Basta che fai una somma pesata dei singoli valori, ovvero ipotizzando come ordine a,b,c,d, il valore totale diventa: a1000 + b100 + c*10 + d, se hai 2-3-6-4 come valori la sommatoria delle moltiplicazioni ti fornisce 2364.
Poi tocca vedere se riesci a mettere 144 diverse funzioni su un Arduino UNO, quasi sicuramente ti tocca andare sulla Mega per avere più memoria, ma sopratutto tocca valutare bene se ti servono realmente 144 funzioni distinte oppure te ne bastano molto meno usando dei parametri per modificarne il comportamento.

x Docsavage.

Con tre PIN analogici "leggo" 3 valori che rimarranno costanti (a --> valore 1 ..4, b--> valore 1..3, c--> valore--> 1 /2) con un altro PIN analogico leggo 6 pulsanti (valore 1..6).

La combinazione dei valori letti mi permette di inizializzare delle funzioni (void - 4/5) con diversi valori (es. funzione a con variabile = 5 o 6 o altro) per cui le possibilità di errore sono relativamente limitate.

Spero di essermi espresso chiaramente, resto a disposizione per eventuali ulteriori chiarimenti.

Grazie + ciao

enrico24:
...
La combinazione dei valori letti mi permette di inizializzare delle funzioni ...

Quindi, indipendentemente da quali siano i vari valori, ti servono solo tante condizioni (if o case) quante saranno le funzioni da attivare ... giusto ? ... se si, la cosa diventa piu gestibile (a meno che tu non abbia un centinaio di funzioni ;))

Grazie a tutti, la soluzione propostami è così semplice (a x 10 + b x 100 ecc.) che non ci avevo pensato!

Per vs informazione, grazie anche all'aiuto del forum, ho sviluppato un programma per la gestione delle gare di arco attualmente basato su un arduino uno che riceve le informazioni da VB via seriale e le trasmette via radio a due mega che gestiscono le luci di due tabelloni remoti.

FUNZIONA!

Con quest'ultima evoluzione vorrei evitare l'uso del PC, per cui con un mega comando i vari LED e 5 display a 7 segmenti che indicano a che punto della gara siamo su un piccolo tabellone e che invia i comandi di accensione LED ai due tabelloni remoti.

Quest'ultima evoluzione è ancora da terminare.

Grazie ancora a tutti + saluti