Pulsante premuto 3 secondi

Ciao a tutti!

Vorrei eseguire azioni diverse a seconda di quanto tempo premo un pulsante.

-Se premuto per 3s farà qualcosa...

-Se premuto e rilasciato farà altre cose

cercando in rete ho visto che si usa la funzione millis() , ho trovato qualche esempio e modificato in base alle mie esigenze:

#define SU   47
#define GIU  53
#define DX   51
#define SX   45
#define OK   49


#define led 41
//#define PULSANTE 7
#define SOGLIA 3000
unsigned long contatore;
unsigned long contaimpulsi;
void setup() {
  Serial.begin(9600);
  contatore=millis();
  contaimpulsi=0;
  pinMode(led, OUTPUT);
  
}

void loop() {
  
  //Serial.println( "versione firmware");
  
  if (contatore!=millis()) { //è tempo di un controllo
    contatore=millis();
    if (digitalRead(OK)) {
      contaimpulsi++;
    
    } else {
    contaimpulsi=0;
    digitalWrite (led , LOW);
  }
  if (contaimpulsi>SOGLIA) { 
digitalWrite (led , HIGH);
Serial.println("menu");
    contaimpulsi=0;
  }
}
}

Il problema è che non riesco ad implementarlo nel mio codice.

Semplicemente ho fatto un TAB con all'interno il codice descritto sopra e richiamo la funzione nel loop ma così non funziona.

Ho provato con uno sketch pulito e ho fatto queste prove:

  • sketch come descritto sopra e funziona, dopo i secondi impostati della SOGLIA il led(di prova) si accende

-ho provato lo stesso codice aggiungendo una riga di codice come questa (una a caso) subito dopo void loop(){ e non funziona.

Serial.println( "versione firmware");

Qualcuno sa spiegarmi dove sbaglio?

Vi ringrazio,

Ciao

Usi millis() in modo sbagliato. Lo sketch non funziona piú se il loop() dura piú di 1mS. Prova di vedere l' esempio blink without delay.

Se nel IDE apri un nuovo TAB quando compili i pezzi di programma di tutti i tab vengono uniti e compilati. Non é come in Firefox che sono pagine asestanti una dall'altra.

Ciao Uwe

Grazie,

ok, quindi il problema è la durata del loop.

Per risolvere come posso fare?

Solo come esempi, devi modificarli in base al tuo sketch :wink: