E' possibile aggiungere un nuovo case????

Ciao ragazzi, secondo voi è possibile tramite la pressione di un pulsante, aggiungere un nuovo case: dentro ad uno switch case già esistente?

if (CRPR == HIGH) // se il pulsante è stato premuto incrementa il valore della variabile Crea Programma
  {
    CRPR = CRPR + 1;    
      lcd.setCursor(0,0);      
      lcd.print(CRPR);
      
    if (CRPR > 2)
    {
      CRPR = 0;
      lcd.setCursor(0,0);      
      lcd.print("-");      
    }
    
    Serial.println(CRPR);    //visibile solo se collegato al pc con IDE in esecuzione.
  }
  delay(150);  // ritardo per assicurarsi della acquisizione della stato
 switch (CRPR)
       {

        case 1:      

            if (but_sx != but_dx) && (CRPR ==HIGH); //verifica che non siano premuti contemporaneamente i 2 pulsanti di movimento 
                                                    // e che il pulsante di creaprogramma sia alto
                 {
                    lcd.clear();
                    lcd.setCursor(0,0);
                    lcd.print("Create program?");
                    lcd.setCursor(3,1);
                    lcd.print("SI=sx     NO=dx");
                    if(but_sx == HIGH);
                    {
                      add.case on stato_sistema;
                      
                      
                    }
                    else
                    {
                      stato_sistema=0;
                    }
                  
                 }

       break;

dopo la verifica del pulsante sx io vorrei aggiungere un nuovo case allo switch di stato_sitema

Fai la modifica che hai in mente e poi facci vedere. Di per sé non c'è alcun limite al numero di case in uno switch.

PS: Questo, scritto così, non ha alcun senso:

 if (but_sx != but_dx) && (CRPR ==HIGH);

L'uso delle parentesi è errato, e il puntoevirgola finale fa sì che l'intera riga sia come se non ci fosse!

Credo che non si possa "aggiungere un case alla pressione di un pulsante", ma il case debba essere già presente (ovviamente, essendo il C un linguaggio compilato). Se il tuo problema fosse che esso deve rispettare due condizioni nulla vieta di inserire nel case un if. Se invece il tuo problema fosse che devi aggiungere quella funzione a tutti i case esistenti allora o inserisci un if in ogni case o controlli dopo o prima dell'esecuzione della switch

Ho appena sbirciato il suo programma e ho visto un paio di cose che non mi convincono
1)l'incremento di una variabile probabilmente booleana. Esse possono avere come valore solo 0 o 1, HIGH o LOW, true o false, e non mi stupirebbe che portata a 2 essa torni a 0.
2) l'uso di una switch case con un case solo. Anche se é fattibile non é utile, in quanto perdi la comodità della switch stessa, che funziona come un insieme di if che controllano la stessa variabile

Se quello che vuoi fare è letteralmente quello che hai scritto

dopo la verifica del pulsante sx io vorrei aggiungere un nuovo case allo switch di stato_sitema

Non si può fare, sicuramente non è necessario perché ci sono sicuramente altre soluzioni al problema.
Stai sicuramente sbagliando l'approccio alla soluzione del problema.

Ciao andreaTECHE,

purtroppo a runtime (programma in esecuzione) non si possono apportare modifiche alla struttura del programma stesso; devi prevedere tutti i tuoi possibili scenari in fase di scrittura/progettazione del programma.

Se a te interessa che a pulsante non premuto uno switch faccia:

switch(x):
1: a;
2: b;
3: c;
etc

e a pulsante premuto la variabile verificata nello switch porti ad altri case:

switch(x):
1: z;
2: b;
3: c+a;
etc

devi inserire il primo in un if() che verifica lo stato pulsante NON premuto....il secondo nel relativo else.

Io_me:
Ho appena sbirciato il suo programma e ho visto un paio di cose che non mi convincono
1)l'incremento di una variabile probabilmente booleana. Esse possono avere come valore solo 0 o 1, HIGH o LOW, true o false, e non mi stupirebbe che portata a 2 essa torni a 0.
2) l'uso di una switch case con un case solo. Anche se é fattibile non é utile, in quanto perdi la comodità della switch stessa, che funziona come un insieme di if che controllano la stessa variabile

L' incremento della variabile alla pressione del pulsante mi fa muovere all'interno dello switch case;
stato 1= case 1= muovo motore1
stato 2= case 2= muovo motore2

nel mio progetto lo stato 8 doveva essere crea nuovo programma con vari passaggi guidati, ma ho capito dopo che è 'na cavolata.

ORSO2001:
Ciao andreaTECHE,

purtroppo a runtime (programma in esecuzione) non si possono apportare modifiche alla struttura del programma stesso; devi prevedere tutti i tuoi possibili scenari in fase di scrittura/progettazione del programma.

Se a te interessa che a pulsante non premuto uno switch faccia:

switch(x):

1: a;
2: b;
3: c;
etc



e a pulsante premuto la variabile verificata nello switch porti ad altri case:


switch(x):
1: z;
2: b;
3: c+a;
etc



devi inserire il primo in un if() che verifica lo stato pulsante NON premuto....il secondo nel relativo else.

Grazie Orso per il chiarimento sul funzionamento del programma, credevo che potessi apportare delle modifiche al codice, mentre era in esecuzione, sono proprio nabbo; vorrà dire che ogni volta che dovrò far fare dei nuovi movimenti al braccio dovrò scrivere un pezzetto di codice.

andreaTECHE:
L' incremento della variabile alla pressione del pulsante mi fa muovere all'interno dello switch case;
stato 1= case 1= muovo motore1
stato 2= case 2= muovo motore2
...

Era solo che non mi tornava il conto con il tuo if (variabile==HIGH). HIGH e LOW, che io sappia, si usano solo sulle booleane, i cui valori non vanno oltre l'1

Io_me:
Era solo che non mi tornava il conto con il tuo if (variabile==HIGH). HIGH e LOW, che io sappia, si usano solo sulle booleane, i cui valori non vanno oltre l'1

Nell'ambiente Arduno in realtà sono solo degli interi numerici ...

#define HIGH 0x1
#define LOW  0x0

#define INPUT 0x0
#define OUTPUT 0x1

#define true 0x1
#define false 0x0

... come tali li assegni a variabili numeriche.

Guglielmo