Nota

Ciao, benvenuto nella Community di SunFounder per appassionati di Raspberry Pi, Arduino ed ESP32 su Facebook! Approfondisci le tue conoscenze su Raspberry Pi, Arduino ed ESP32 insieme ad altri appassionati.

Perché unirti?

  • Supporto esperto: Risolvi problemi post-vendita e 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: Ottieni accesso anticipato agli annunci di nuovi prodotti e anteprime speciali.

  • Sconti Speciali: Godi di sconti esclusivi sui nostri prodotti più recenti.

  • Promozioni e Omaggi Festivi: Partecipa a omaggi e promozioni festive.

👉 Pronto a esplorare e creare con noi? Clicca su [qui] e unisciti oggi stesso!

6.6 Dado Digitale

Questo progetto si basa sul progetto 2.5 Display Numerico, aggiungendo un pulsante per controllare la cifra visualizzata sul display a sette segmenti.

Quando il pulsante viene premuto, il display a 7 segmenti scorre attraverso i numeri da 1 a 6 e, quando il pulsante viene rilasciato, visualizza un numero casuale.

Questo ciclo si ripete ogni volta che il pulsante viene premuto.

Componenti Necessari

In questo progetto, abbiamo bisogno dei seguenti componenti.

È sicuramente conveniente acquistare un intero kit, ecco il link:

Nome

ELEMENTI IN QUESTO KIT

LINK

Kit di Partenza ESP32

320+

ESP32 Starter Kit

Puoi anche acquistarli separatamente dai link sottostanti.

INTRODUZIONE AI COMPONENTI

LINK DI ACQUISTO

ESP32 Scheda

ACQUISTA

Estensione Fotocamera ESP32

ACQUISTA

Breadboard

ACQUISTA

Cavi Jumper

ACQUISTA

74HC595

ACQUISTA

Display a 7 Segmenti

ACQUISTA

Pulsante

ACQUISTA

Schema Elettrico

../../_images/circuit_6.6_electronic_dice.png

Questo progetto si basa sul progetto 2.5 Display Numerico, aggiungendo un pulsante per controllare la cifra visualizzata sul display a sette segmenti.

Il pulsante è collegato direttamente a IO13 senza un resistore di pull-up o pull-down esterno perché IO13 ha un resistore di pull-up interno di 47K, eliminando la necessità di un resistore esterno aggiuntivo.

Cablaggio

../../_images/6.6_DICE_bb.png

Codice

Nota

  • Apri il file 6.6_digital_dice.py situato nel percorso esp32-starter-kit-main\micropython\codes, oppure copia e incolla il codice in Thonny. Poi, clicca su «Esegui Script Corrente» o premi F5 per eseguirlo.

  • Assicurati di selezionare l’interprete «MicroPython (ESP32).COMxx» nell’angolo in basso a destra.

import machine
import time
import random

# Definisci il codice del segmento per un display a 7 segmenti a anodo comune
SEGCODE = [0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f]

# Inizializza i pin per il registro a scorrimento 74HC595
sdi = machine.Pin(25, machine.Pin.OUT)  # DS
rclk = machine.Pin(27, machine.Pin.OUT)  # STcp
srclk = machine.Pin(26, machine.Pin.OUT)  # SHcp

button = machine.Pin(13, machine.Pin.IN) # Pin del pulsante

# Definisci la funzione hc595_shift per trasferire i dati nel registro a scorrimento 74HC595
def hc595_shift(dat):
    # Imposta il pin RCLK su basso
    rclk.off()

    # Itera attraverso ciascun bit (da 7 a 0)
    for bit in range(7, -1, -1):
        # Estrai il bit corrente dai dati di input
        value = 1 & (dat >> bit)

        # Imposta il pin SRCLK su basso
        srclk.off()

        # Imposta il valore del pin SDI
        sdi.value(value)

        # Trasferisci il bit corrente nel registro a scorrimento impostando il pin SRCLK su alto
        srclk.on()

    # Latch i dati nel registro di memoria impostando il pin RCLK su alto
    rclk.on()

# Inizializza il seme casuale
random.seed(time.ticks_us())


num = 1
button_state = False

# Definisci la funzione di callback del pulsante per attivare/disattivare lo stato del pulsante
def button_callback(pin):
    global button_state
    button_state = not button_state

# Collega la funzione di callback del pulsante al bordo discendente del pin del pulsante
button.irq(trigger=machine.Pin.IRQ_FALLING, handler=button_callback)

# Visualizza continuamente la cifra corrente sul display a 7 segmenti, scorrendo se il pulsante non è premuto
while True:

    # Visualizza la cifra corrente sul display a 7 segmenti
    hc595_shift(SEGCODE[num])

    # Se il pulsante è premuto e lo stato del pulsante è True
    if button_state:
        pass

    # Se il pulsante viene premuto di nuovo e lo stato del pulsante è False, genera una nuova cifra casuale
    if not button_state:
        num = random.randint(1, 6)
        time.sleep_ms(10) # Regola questo valore per controllare la frequenza di aggiornamento del display

Durante l’esecuzione del programma, premendo il pulsante, il display a 7 segmenti scorrerà e visualizzerà casualmente un numero compreso tra 1 e 6.

Premendo nuovamente il pulsante, il display a 7 segmenti si fermerà e mostrerà un numero specifico. Premi il pulsante un’altra volta e il display a 7 segmenti riprenderà a scorrere tra le cifre.