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
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.
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.
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 ...