Un pulsante in ingresso può comandare 2 o più uscite?

vorrei con un pulsante fare in questo modo:
-pigiandolo la prima volta accendere il led sul pin 22
-pigiandolo la seconda volta spegnere il led sul pin 22
-pigiandolo la terza volta accendere il led sul pin 23
-pigiandolo la quarta volta spegnere il led sul pin 23.

Dopodichè ripartire dall'inizio.
Grazie mille

Basta che incrementi una variabile e poi con uno switch..case controlli l'operazione da eseguire. Alla 5a pressione ripartire dall'inizio.

Devi fare il debouce del pulsante (basta un delay di 10mS dopo la sua lettura) e incrementare la variabile di stato solo al cambio di livello del pulsante.
vedi Dan Thompson: Arduino Push Button ON/OFF Example
Ciao Uwe

il mio esempio di programma con un pulsante ed un led:

int puls1A; //variabile per pulsante 1A
int puls1AA; //variabile per pulsante 1A
void setup()
{
Serial.begin(9600);

pinMode(22,INPUT); //pulsante 1A
pinMode(38,OUTPUT); //uscita 1

}

void loop() {

puls1A=digitalRead(22); //pulsante 1A salotto ingresso
if ((puls1A==HIGH) and (puls1AA==0)) //se premuto
{
digitalWrite(38,HIGH); //abilita uscita 1 pin18
puls1AA=1;
Serial.println("ingresso 1 acceso"); //stampa su seriale
delay(1000);
}
else if ((puls1A==HIGH) and (puls1AA==1)) {
digitalWrite(38,LOW);
puls1AA=0;
Serial.println("ingresso 1 spenti");
delay(1000);
}
}

ho provato ad aggiungere uno stato ma non ne sono capace.
Un ulteriore aiutino?
Grazie ancora...

Te lo metto in pseudo codice, sta a te trasformarlo in codice Arduino:

byte contatore = 0

do
   if (pulsante premuto)
      contatore + 1
      if (contatore > MAX)
        contatore = 0
      end_if
      switch (contatore):
        case 0:
           .....
        case 1:
           ....
        case 2:
           ....
        ....
     end_switch
   end_if
loop

Essendo all'inizio e non conoscendo la programmazione in generale non riesco a capirci nulla....
a mente più lucida vedremo...

leo72:
Te lo metto in pseudo codice, sta a te trasformarlo in codice Arduino:

byte contatore = 0

do
   if (pulsante premuto)
      contatore + 1
      if (contatore > MAX)
        contatore = 0
      end_if
      switch (contatore):
        case 0:
           .....
        case 1:
           ....
        case 2:
           ....
        ....
     end_switch
   end_if
loop

79flavio79:
Essendo all'inizio e non conoscendo la programmazione in generale non riesco a capirci nulla....
a mente più lucida vedremo...

dai non abbatterti: hai usato funzioni ben più complesse nel tuo programma: leggi riga per riga il codice di leo e scrivilo giù in C funzionante... funzionerà al primo colpo... in pratica l'algoritmo legge se il tasto è premuto, se il tasto è premuto incrementa uno stato (passa da uno stato al successivo). poi c'è uno switch/case o degli if che in base allo stato accenderanno una luce o l'altra luce...

proverò, grazie per l'incoraggiamento...

qsecofr:

79flavio79:
Essendo all'inizio e non conoscendo la programmazione in generale non riesco a capirci nulla....
a mente più lucida vedremo...

dai non abbatterti: hai usato funzioni ben più complesse nel tuo programma: leggi riga per riga il codice di leo e scrivilo giù in C funzionante... funzionerà al primo colpo... in pratica l'algoritmo legge se il tasto è premuto, se il tasto è premuto incrementa uno stato (passa da uno stato al successivo). poi c'è uno switch/case o degli if che in base allo stato accenderanno una luce o l'altra luce...