Varia la sequenza in base all'ultima scelta

Ciao a tutti.
ho 3 pulsanti che mi fanno partire 3 sequenze diverse tra di loro. Ogni sequenza consiste una serie di lampeggi di 2 lampadine ovviamente in modi differenti. Vorrei implementare il codice nel seguente modo.
All'avvio se premo 1,2,3n ottengo sequenza 1,2,3.
successivamente,
se premo 1,3 ottengo sequenza 31
se premo 3,2 ottengo 2
3
se premo 3,1 ottengo 1*3

ovviamente le sequenze con asterisco li devo ancora creare.
Mi viene difficile da spiegare ma vorrei in pratica far si che premendo il pulsante 1 (esempio) parta la sequenza 12 oppure 13 in funzione dell'ultimo pulsante premuto.
ovviamente all'avvio deve anche riconoscere che non è stato premuto alcun pulsante.

// Dichiarazione dei pin per i pulsanti
const int pulsante1Pin = 2;
const int pulsante2Pin = 3;
const int pulsante3Pin = 4;

// Dichiarazione dei pin per le lampadine
const int lampadina1Pin = 5;
const int lampadina2Pin = 6;

void setup() {
  // Inizializzazione dei pin per i pulsanti
  pinMode(pulsante1Pin, INPUT_PULLUP);
  pinMode(pulsante2Pin, INPUT_PULLUP);
  pinMode(pulsante3Pin, INPUT_PULLUP);
  
  // Inizializzazione dei pin per le lampadine
  pinMode(lampadina1Pin, OUTPUT);
  pinMode(lampadina2Pin, OUTPUT);
  
  // Assicurarsi che le lampadine siano spente all'avvio
  digitalWrite(lampadina1Pin, LOW);
  digitalWrite(lampadina2Pin, LOW);
}

void loop() {
  // Controlla se il pulsante 1 è stato premuto
  if (digitalRead(pulsante1Pin) == HIGH) {
    sequenza1();
  }
  
  // Controlla se il pulsante 2 è stato premuto
  if (digitalRead(pulsante2Pin) == HIGH) {
    sequenza2();
  }
  
  // Controlla se il pulsante 3 è stato premuto
  if (digitalRead(pulsante3Pin) == HIGH) {
    sequenza3();
  }
}

// Funzione per eseguire la sequenza 1
void sequenza1() {
  digitalWrite(lampadina1Pin, HIGH);
  delay(500);
  digitalWrite(lampadina2Pin, HIGH);
  delay(500);
  digitalWrite(lampadina1Pin, LOW);
  digitalWrite(lampadina2Pin, LOW);
}

// Funzione per eseguire la sequenza 2
void sequenza2() {
  digitalWrite(lampadina2Pin, HIGH);
  delay(500);
  digitalWrite(lampadina2Pin, LOW);
  delay(500);
  digitalWrite(lampadina1Pin, HIGH);
  digitalWrite(lampadina2Pin, HIGH);
  delay(500);
  digitalWrite(lampadina1Pin, LOW);
  digitalWrite(lampadina2Pin, LOW);
}

// Funzione per eseguire la sequenza 3
void sequenza3() {
  digitalWrite(lampadina1Pin, HIGH);
  delay(300);
  digitalWrite(lampadina2Pin, HIGH);
  delay(300);
  digitalWrite(lampadina1Pin, LOW);
  digitalWrite(lampadina2Pin, LOW);
  delay(300);
  digitalWrite(lampadina1Pin, HIGH);
  digitalWrite(lampadina2Pin, HIGH);
  delay(300);
  digitalWrite(lampadina1Pin, LOW);
  digitalWrite(lampadina2Pin, LOW);
}

ciao
con il pulsanti devi gestire anche il debounce
per gestire al meglio le sequenze io sceglierei di usare lo switch case con degli if o case annidati

Primo puoi memorizzare l'ultima sequenza o pulsante premuto fatta.
Secondo crea una tabella delle varie possibilità su un foglio excel, sinceramente non ho capito tutte le tue casistiche.
tipo:

pul1 | pul2 | pul3 | precpuls | sequenza
 X   |      |      |          |  seq1
     |   X  |      |          |  seq2  
...etc.
 X   |      |      |     3    |  seq?? 

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.