[RISOLTO] Encoder rotativo: pressione + rotazione. Come fare?

Buongiorno a tutti.
Sto studiando molto ultimamente per realizzare uno stack radio di un cockpit per un simulatore di volo.
In aviazione generale, spesso per la selezione delle frequenze vengono utilizzati degli encoder rotativi concentrici, dove, per esempio, la "rotella" più grande modifica i MHz e la più piccola i kHz, ma questi encoder sono difficili da trovare e abbastanza costosi. Li ho già trovati, su alcuni siti, e questo lo dico prima che qualcuno me li faccia notare su un famoso sito cinese o sul sito di Leo Bodnar.
La soluzione più pratica sarebbe quella di usare un comune encoder rotativo a 20 impulsi per rotazione e pushbutton, e utilizzarlo così: ruotando seleziono i kHz, ruotando tenendo premuto seleziono i MHz.
Ora, la mia domanda è: conviene farlo via hardware (cablando l'encoder in maniera tale che facendo passare gli impulsi attraverso il pushbutton vengano riconosciuti come un altro encoder) oppure via software (tramite una stringa di codice)? E nel caso, come?
Ho fatto parecchie ricerche, ma i casi sono due: o nessuno ha avuto questo problema oppure sono io che non so abbastanza l'inglese da esprimere questo concetto in un motore di ricerca.
Se ho omesso qualche dettaglio utile al troubleshoot fatemelo sapere, ringrazio chi mi aiuterà.

Farlo in software è banale, non complicarti la vita.

Vuoi dire che è devo semplicemente dare come input rotazione E pressione insieme in codice? Tutto qui?

Quel che dici non vuol dire niente. Da qualche parte nel tuo sketch avrai un pezzo di codice che gestisce la rotazione dell'encoder e incrementa o decrementa una variabile. Devi semplicemente dirgli che se l'encoder è premuto deve invece incrementarne un'altra.

Mazz si è semplice come dici :slight_smile:
(come ti hanno spiegato prima)
Ad arduino arriva l'impulso di pulsante premuto e controlli prima quel pin e poi l'incremento.

Nell'interrupt con cui controllerai gli impulsi dell'encoder (ne basta uno, se usi encoder standard con gli scatti meccanici), ti basta fare "SE pulsante premuto incrementa (o decremente) MHz, ALTRIMENTI incrementa (o decrementa) KHz ... :wink:

L'unico dubbio e' sulla qualita' del contatto di quegli encoder, che magari generi spikes mentre ruota tenendolo premuto, quindi abbonda di debounce hardware, anche 220n al posto dei soliti 100n, e resistenza in serie da 100 ohm ...

Grazie a chi mi ha saputo consigliare.
Farò tesoro del consiglio di Etemenanki, appena li ho sotto mano li testerò a dovere.
Segno come "Risolto" il thread, magari un altro neofita ha questo stupido dubbio e vuole evitare di umiliarsi di fronte ai senatori del forum con domande da ragazzino.
Grazie a tutti!
:smiley:

Se può servire un esempio di sketch per leggere un encoder che utilizza un solo interupt

Molto più semplice usare il push button per fare il toggle kHz/MHz e poi usare gli impulsi encoder per variare la frequenza, per intercettare l'encoder va bene un interrupt come ti hanno consigliato.

le radio da radioamatori di solito hanno una specie di sensibilità di rotazione più ruoti velocemente più velocemente si sposta di frequenza ovviamente in senso progressivo,
un giro di manopola (encoder) fatta velocemente
incrementa molto di piu di un giro fatto lentamente

triac60:
Molto più semplice usare il push button per fare il toggle kHz/MHz e poi usare gli impulsi encoder per variare la frequenza, per intercettare l'encoder va bene un interrupt come ti hanno consigliato.

Il progetto originale prevedeva questa soluzione, che è perfetta se l'output è un display lcd (1602 per esempio).
Fai lampeggiare l'underscore sotto i kHz o i MHz e sai cosa stai regolando.
Però come output ho previsto un 7 segmenti ad 8 cifre, e non volevo punti decimali lampeggianti come ho visto in altri progetti, non mi piace.

Grazie comunque a tutti, di nuovo.

ho 2 o 3 "progettini" con i 7 segmenti avevo risolto in questo modo per inserire il valore desiderato,

una premuta normale (non troppo lunga) del pulsante integrato nella manopola dell encoder inizia a lampeggiare la prima cifra da destra ruotando l'encoder imposto il numero desiderato, altra premuta normale (non troppo lunga) e mi sposto di una cifra verso sinistra
arrivato alla fine delle cifre oppure una premuta lunga (> 2 secondi) del pulsante integrato nella manopola dell encoder tutto si memorizza a "dovere"