.. note:: Ciao, benvenuto nella community di appassionati di SunFounder Raspberry Pi, Arduino e ESP32 su Facebook! Approfondisci Raspberry Pi, Arduino e ESP32 insieme ad altri appassionati. **Perché unirsi?** - **Supporto esperto**: Risolvi i problemi post-vendita e affronta le sfide tecniche con l'aiuto della nostra community e del nostro team. - **Impara e Condividi**: Scambia consigli e tutorial per migliorare le tue competenze. - **Anteprime Esclusive**: Accedi in anteprima agli annunci di nuovi prodotti e alle anteprime esclusive. - **Sconti Speciali**: Approfitta di sconti esclusivi sui nostri prodotti più recenti. - **Promozioni Festive e Giveaway**: Partecipa a giveaway e promozioni durante le festività. 👉 Pronto a esplorare e creare con noi? Clicca su [|link_sf_facebook|] e unisciti oggi stesso! .. _ar_74hc_4dig: 5.3 - Contatore di Tempo ================================ Il display a 4 cifre e 7 segmenti è costituito da quattro display a 7 segmenti che funzionano insieme. Il display a 4 cifre e 7 segmenti funziona indipendentemente. Utilizza il principio della persistenza visiva umana per visualizzare rapidamente i caratteri di ciascun segmento in un ciclo, formando stringhe continue. Ad esempio, quando sul display appare "1234", viene visualizzato "1" sul primo segmento, mentre "234" non è visibile. Dopo un breve intervallo, il secondo segmento mostra "2", mentre il 1°, 3° e 4° segmento non mostrano nulla, e così via, il display a quattro cifre mostra le cifre in sequenza. Questo processo è molto rapido (tipicamente 5ms), e grazie all'effetto di persistenza ottica e al principio della persistenza visiva, possiamo vedere tutte e quattro le cifre contemporaneamente. **Componenti Necessari** In questo progetto, ci servono i seguenti componenti. È sicuramente conveniente acquistare un intero kit, ecco il link: .. list-table:: :widths: 20 20 20 :header-rows: 1 * - Nome - ELEMENTI IN QUESTO KIT - LINK PER L'ACQUISTO * - Kepler Kit - 450+ - |link_kepler_kit| Puoi anche acquistarli separatamente dai link qui sotto. .. list-table:: :widths: 5 20 5 20 :header-rows: 1 * - SN - INTRODUZIONE COMPONENTE - QUANTITÀ - LINK PER L'ACQUISTO * - 1 - :ref:`cpn_pico_w` - 1 - |link_picow_buy| * - 2 - Cavo Micro USB - 1 - * - 3 - :ref:`cpn_breadboard` - 1 - |link_breadboard_buy| * - 4 - :ref:`cpn_wire` - Alcuni - |link_wires_buy| * - 5 - :ref:`cpn_resistor` - 4(220Ω) - |link_resistor_buy| * - 6 - :ref:`cpn_4_dit_7_segment` - 1 - * - 7 - :ref:`cpn_74hc595` - 1 - |link_74hc595_buy| **Schema Elettrico** |sch_4dig| Qui il principio di cablaggio è sostanzialmente lo stesso di :ref:`ar_74hc_led`, l'unica differenza è che Q0-Q7 sono collegati ai pin da a a g del display a 4 cifre e 7 segmenti. Poi G10 ~ G13 selezioneranno quale display a 7 segmenti attivare. **Cablaggio** |wiring_4dig| **Codice** .. note:: * Puoi aprire il file ``5.3_time_counter.ino`` nel percorso ``kepler-kit-main/arduino/5.3_time_counter``. * Oppure copia questo codice nell'**Arduino IDE**. * Non dimenticare di selezionare la scheda (Raspberry Pi Pico) e la porta corretta prima di cliccare sul pulsante **Upload**. .. raw:: html Dopo l'esecuzione del programma, vedrai il display a 4 cifre e 7 segmenti diventare un contatore e il numero aumenterà di 1 ogni secondo. **Come funziona?** L'invio di segnali a ciascun display a 7 segmenti avviene nello stesso modo di :ref:`ar_74hc_7seg`, utilizzando la funzione ``hc595_shift()``. Il punto cruciale del display a 4 cifre e 7 segmenti è attivare selettivamente ciascun display a 7 segmenti. Il codice associato è il seguente. .. code-block:: arduino const int placePin[4] = {13,12,11,10}; void setup () { for (int i = 0; i<4;i++){ pinMode(placePin[i],OUTPUT); } } void loop() { pickDigit(0); hc595_shift(count%10/1); pickDigit(1); hc595_shift(count%100/10); pickDigit(2); hc595_shift(count%1000/100); pickDigit(3); hc595_shift(count%10000/1000); } void pickDigit(int digit){ for(int i = 0; i < 4; i++){ digitalWrite(placePin[i],HIGH); } digitalWrite(placePin[digit],LOW); } Qui, quattro pin (GP10, GP11, GP12, GP13) vengono utilizzati per controllare ciascun segmento del display a 4 cifre e 7 segmenti individualmente. Quando lo stato di questi pin è ``LOW``, il display a 7 segmenti corrispondente è attivo; quando lo stato è ``HIGH``, il display a 7 segmenti non funziona. Qui la funzione ``pickDigit(digit)`` viene utilizzata per disattivare tutti i display a 7 segmenti e poi attivare un determinato segmento singolarmente. Successivamente, ``hc595_shift()`` viene utilizzato per scrivere il codice di 8 bit corrispondente per il display a 7 segmenti. Il display a 4 cifre e 7 segmenti deve essere attivato continuamente a turno in modo che possiamo vedere visualizzate tutte e quattro le cifre, il che significa che il programma principale non può facilmente aggiungere codice che influenzi la temporizzazione. Tuttavia, è necessario aggiungere una funzione di temporizzazione a questo esempio, se aggiungiamo un ``delay (1000)``, potremo rilevare l'illusione dei quattro display a 7 segmenti che funzionano contemporaneamente, esponendo il fatto che solo un display a 7 segmenti alla volta si illumina. Pertanto, utilizzare la funzione ``millis()`` è un ottimo modo per farlo. .. code-block:: arduino void setup () { timerStart = millis(); } void loop() { unsigned int count = (millis()-timerStart)/1000; } La funzione ``millis()`` ottiene il numero di millisecondi trascorsi dall'inizio del programma corrente. Registriamo il primo valore temporale come ``timerStart``; poi, quando dobbiamo ottenere nuovamente il tempo, richiamiamo la funzione ``millis()`` e sottraiamo ``timerStart`` dal valore per ottenere da quanto tempo il programma è in esecuzione. Infine, converti questo valore temporale e lascia che il display a 4 cifre e 7 segmenti lo mostri. * `millis() `_