Go Down

Topic: Un pulsante in ingresso può comandare 2 o più uscite? (Read 1 time) previous topic - next topic

79flavio79

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

leo72

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

uwefed

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 http://danthompsonsblog.blogspot.it/2011/12/arduino-push-button-onoff-example.html
Ciao Uwe

79flavio79

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


leo72

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

Code: [Select]
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...




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

Code: [Select]
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


qsecofr


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


79flavio79

proverò, grazie per l'incoraggiamento...





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



Go Up