In particolare a chiedevo se è possibile trasferire in blocco una serie di bit,rilevati sulla stessa porta, dove ho opportunamente collegato le uscite del decoder, ...
cioè in modo da avere qualcosa tipo:
digit_letti = b0110 e convertirlo velocemente nell'equivalente valore decimale
senza dover fare questo
if (digitalRead(dtmf1)) { dtmf_codice = 1; } else { dtmf_codice = 0; }
if (digitalRead(dtmf2)) { dtmf_codice = dtmf_codice + 2; }
if (digitalRead(dtmf3)) { dtmf_codice = dtmf_codice + 4; }
if (digitalRead(dtmf4)) { dtmf_codice = dtmf_codice + 8; }
Ciao, mi intrometto per chiarire una cosa che mi sembra non si sia colta.
La risposta in ciò che chiedi è già presente nella risposta di Leo:
leo72:
...
Ovviamente questo modo di gestione delle porte ha senso se, come nel tuo caso del decoder, colleghi le linee in modo logico, ossia se hai ad esempio 4 bit li colleghi alle linee 0..3 di una porta. Se usi la porta C (che è quella che gestisce i pin Axx), li collegherai a PC0..PC3.
Significa che se colleghi il decoder alle 4 linee della STESSA porta, non hai più bisogno di fare blocchi di "if" nè tantomeno convertire nulla in decimale, ti basta solo leggere il contenuto della porta, magari isolando ("mascherando") solo i bit che ti interessano.
Seguendo l'esempio di Leo, per leggere il contenuto del decoder collegato alle linee 0...3 della porta C puoi usare direttamente:
byte valore = PORTC & B00001111;
e la variabile valore contiene già il numero decimale che cerchi.