Pages: [1]   Go Down
Author Topic: Un pulsante in ingresso può comandare 2 o più uscite?  (Read 837 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 14
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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


BZ (I)
Offline Offline
Brattain Member
*****
Karma: 251
Posts: 21243
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 14
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Code:
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
Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 14
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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
Logged

Offline Offline
Sr. Member
****
Karma: 8
Posts: 293
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 14
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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


Logged

Pages: [1]   Go Up
Jump to: