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
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy