Funzione millis()

Salve a tutti, dovrei fare un programma che legga se un pulsante sia premuto per tre secondi. Come dovrei fare? Ho letto della funziona millis() ma non capisco come implementarla, qualcuno mi può aiutare?
Grazie :slight_smile:

http://forum.arduino.cc/index.php?topic=286164.msg2004894#msg2004894

Prova a vedere se ti possono servire come esempi :wink:

Grazie mille!
Ho modificato un po' il codice in questo modo:

stato = digitalRead(12);	 //leggi ingresso pulsante
  delay(10);
  if ((stato != stato_prec) && (stato_prec == 1)) // pulsante appena premuto
  {
    stato_prec = stato; 	//setta flag per pulsante premuto
    millis_prec = millis();	//setta variabile controllo tempo
  }
  if ((stato != stato_prec) && (stato_prec == 0)) //pulsante appena rilasciato
  {
    stato_prec = stato; 	//resetta flag per pulsante rilasciato
    if (millis() - millis_prec <= 500) //pulsante premuto per meno di mezzo secondo
    {
      Serial.println("MINORE DI 500 mS");
    }
    else
    {
      Serial.println("MAGGIORE DI 500 mS");

    }
  }

Mi puoi solo spiegare perchè quando lancio la seriale entra in uno dei due cicli, o minore o maggiore. Come mai si verifica questo? Ovviamente senza che premo nulla e sempre nel secondo giro del loop.

Stai per caso usando il pin 0 o 1 di Arduino?

No sono sul 12 però sto usando la resistenza interna di pull up può voler dire qualcosa?

Ok ho risolto, ho messo lo stato iniziale a 1 invece che zero! Ma la variabile millis() prima o poi si resetta da sola?

Normalmente la millis va in overflow e riparte da zero, mi sembra una volta ogni 5 o 6 giorni, non ricordo bene, ma con quel sistema il problema non esiste ... e' spiegato anche nel sito di Leo, http://www.leonardomiliani.com/2013/programmiamo-i-compiti-con-millis/

Millis va in overflow dopo 49,5 giorni; basta dividere 2^32-1/1000/60/60/24
Ciao Uwe

Grazie, non mi ricordavo piu il numero esatto.