Riconoscere tempo pressione pulsanti touch

Ragazzi chiedo il vostro aiuto, ho dei pulsanti touch che si iluminano al tocco e inviano il segnale ad arduino, infatti ogni pulsante ha 3 pin VCC, GND, e OUT.
Riesco a collegarli normalmente e tutto funziona, vorrei fare una cosa del genere:

Se il pulsante viene premuto meno di 2 secondi deve compiere un azione
Se il pulsante viene premuto piu di 2 secondi deve inviare alla seriale una stringa
E se il pulsante viene spento deve inviare un'altra stringa al seriale

Secondo voi è possibile con il tipo di pulsante fare questo, mi potreste aiutare?siccome sono stato 5 ore senza far nulla?
Grazie infinite

Facci capire di quali pulsanti parli (un link, una foto, o entrambi...) e come li hai collegati ad Arduino ed il relativo programma che stai usando.

Questi sono i tasti
https://m.it.aliexpress.com/item/32889555988.html?pid=808_0001_0101&spm=a2g0n.search-amp.list.32889555988&aff_trace_key=d92f91ce986e4fc5a8b38bfb66f6c910-1533220823674-04232-JYZbuNJ&aff_short_key=JYZbuNJ&aff_platform=msite

, ovviamente ho collegato OUT ad un entrata digitale dell'arduino e VCC a 5v e GND ad arduino.
Ho usato alcuni programmi che ho trovato sul forum arduino, tipo questo

I

Prima di tutto devi verificare se tendo il dito sul pulsante ad Arduino arriva solo un primo impulso HIGH e poi null'altro (LOW) oppure (come qualsiasi pulsante comune) tenendo il dito il digitalRead() ti continua a leggere HIGH

.

nid69ita:
Prima di tutto devi verificare se tendo il dito sul pulsante ad Arduino arriva solo un primo impulso HIGH e poi null'altro (LOW) oppure (come qualsiasi pulsante comune) tenendo il dito il digitalRead() ti continua a leggere HIGH

Arriva un solo impulso a pressione.

:slight_smile: fine dei giochi

rinaldover87:
.Arriva un solo impulso a pressione.

Quindi, con una loop() che fa solo digitalRead() e stampa a monitor seriale, se tieni premuto a lungo, arriva un solo HIGH e poi rimane LOW ? Se si, allora non puoi sentire quanto a lungo lo premi.

Dalla descrizione “maccheronica” del link, “interruttore di tocco” quindi effettivamente non è un pulsante ma un interruttore.

Giusto, ma potrebbe riconoscere 2 o più tocchi ravvicinati come avviene nel mouse!

enrico24:
Giusto, ma potrebbe riconoscere 2 o più tocchi ravvicinati come avviene nel mouse!

E come potrei farlo? Hai un'esempio?

enrico24:
Giusto, ma potrebbe riconoscere 2 o più tocchi ravvicinati come avviene nel mouse!

Sí, Puó riconoscere se "premi" 2 volte il pulsante in sequenza.
Misura il tempo tra 2 cambi LOW - HIGH. Usa per questo millis()

Ciao Uwe

Bisogna però provare. L'interruttore potrebbe avere un tempo di latenza alto. Ovvero potrebbe "rispondere" lentamente al tocco. Da provare.

x Uwe: non so, io userei un delay con uno schema simile:

leggo lo stato
delay (x)
leggo lo stato
se cambiato incremento un contatore e ritorno all'inizio altrimenti faccio un'azione in funzione del numero sul contatore.

Sono un neofita ed ancora ignorante nel settore, a mio parere potrebbe comunque funzionare (non ho modo di provarlo in pratica!).

Gradirei molto avere un commento su eventuali errori nel mio ragionamento da chi è più esperto. Non si ha mai finito d'imparare!!

Saluti + grazie

Enrico

No. delay Ti blocca

rilievi una cambio di stato da L a h
memorizzi il tempo millis()
rilievi un altro cambio di stato l a H
calcoli la differenza dei millis di prima con quelli attuali.
se la differenza é minore a tot esegui qualcosa.

Ciao Uwe