Assegnare ad una variabile Arduino un valore temporale

Buenos dìas a todos compañeros.
Ok scherzi a parte mi stavo chiedendo se si potesse assegnare ad una variabile un valore temporale per poi applicarlo in modo pratico ad un pulsante che se premuto per tot tempo accende un led, ovviamente so che esiste già la funzione millis ma mi era venuto questo dubbio e quindi ho voluto condividerlo con voi.
if(pulsante == HIGH){
int tmp = 0
while(tmp>0){
tmp ++
}
if(tmp == 3){
digitalwrite(led, HIGH)
}
}

P.S: ovviamente vi chiedo di lasciar perdere la parte sintattica e di calcolare solo quella logica(forse c'è un funzione fatta a posta?)(forse tmp non divrebbe trovarsi in if)

No, l'unico contatore è quello ritornato dalla funzione millis()
Esistono delle librerie già fatte per sentire ed azionare qualcosa in base al tempo premuto di un pulsante. E che si basano su millis (oppure alcune sui timer/interrupt, meglio però il semplice millis)

grazie potresti elencarmene qualcuna?

Ad esempio:

  1. OneButton
  2. EasyButton
  3. PushButton

grazie mille

ciao...ad ogni modo in quel modo nel while non ci entri mai...e quindi non fai nulla di tutto il resto.

Evita di usare le librerie per cose così semplici e impara a ottenere da solo ciò che ti serve. È un ottimo modo per imparare

A meno di... rallentare il loop ad una velocità nota e contarne i cicli.

int tmp = 0;


void loop()
{
    if (tmp == 100)  // se trascorso circa un secondo
    {
        tmp = 0;
        ....fai qualcosa...
    }
    
    tmp++;

    delay(10);
}

Ma naturalmente millis è molto più preciso.

...che è una cosa bruttissima, perché già se aggiungi una scrittura su seriale o su LCD cambia tutto! :frowning:

Certamente, dipende da tutto il contesto. Però se non interpreto male il codice abbozzato al primo post, quello che voleva fare era questo:

int letturaPulsante = digitalRead(PIN_PULSANTE);
if (letturaPulsante == HIGH)
{
    int tmp = 0

    do
    {
        delay(10);
        tmp++;
        letturaPulsante = digitalRead(PIN_PULSANTE);
    }
    while ((pulsante == HIGH) && (tmp < TEMPO));

    if (tmp == TEMPO)
    {
        digitalwrite(PIN_LED, HIGH)
    }
}

quindi un codice bloccante con problemi ancora maggiori

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.