.. note:: Ciao, benvenuto nella Community di SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts su Facebook! Approfondisci il mondo di Raspberry Pi, Arduino ed ESP32 insieme ad altri appassionati. **Perché unirti a noi?** - **Supporto tecnico esperto**: Risolvi problemi post-vendita e sfide tecniche con l'aiuto della nostra comunità 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 alle anteprime. - **Sconti speciali**: Approfitta di sconti esclusivi sui nostri prodotti più recenti. - **Promozioni festive e giveaway**: Partecipa a giveaway e promozioni durante le festività. 👉 Sei pronto a esplorare e creare con noi? Clicca [|link_sf_facebook|] e unisciti oggi stesso! .. _1.1.3_py_pi5: 1.1.3 Grafico a Barre LED ================================= Introduzione ------------------- In questo progetto, accenderemo in sequenza le luci sul grafico a barre LED. Componenti Necessari --------------------------------- Per questo progetto, avremo bisogno dei seguenti componenti. .. image:: ../python_pi5/img/1.1.3_led_bar_list.png È decisamente conveniente acquistare un kit completo, ecco il link: .. list-table:: :widths: 20 20 20 :header-rows: 1 * - Nome - COMPONENTI NEL KIT - LINK * - Raphael Kit - 337 - |link_Raphael_kit| Puoi anche acquistarli separatamente dai link sottostanti. .. list-table:: :widths: 30 20 :header-rows: 1 * - INTRODUZIONE AI COMPONENTI - LINK D'ACQUISTO * - :ref:`cpn_gpio_extension_board` - |link_gpio_board_buy| * - :ref:`cpn_breadboard` - |link_breadboard_buy| * - :ref:`cpn_wires` - |link_wires_buy| * - :ref:`cpn_resistor` - |link_resistor_buy| * - :ref:`cpn_bar_graph` - \- Schema Elettrico ------------------------- ============ ======== ======== === T-Board Name physical wiringPi BCM GPIO18 Pin 12 1 18 GPIO23 Pin 16 4 23 GPIO24 Pin 18 5 24 GPIO25 Pin 22 6 25 SPICE0 Pin 24 10 8 SPICE1 Pin 26 11 7 GPIO12 Pin 32 26 12 GPIO16 Pin 36 27 16 GPIO20 Pin 38 28 22 GPIO21 Pin 40 29 21 ============ ======== ======== === .. image:: ../python_pi5/img/1.1.3_LedBarGraph_schematic.png Procedure Sperimentali ------------------------------ **Passo 1**: Costruisci il circuito. .. note:: Fai attenzione alla direzione quando colleghi i componenti. Se li colleghi al contrario, non si accenderanno. .. image:: ../python_pi5/img/1.1.3_LedBarGraph_circuit.png **Passo 2:** Vai alla cartella del codice. .. raw:: html .. code-block:: cd ~/raphael-kit/python-pi5 **Passo 3**: Esegui il file eseguibile. .. raw:: html .. code-block:: sudo python3 1.1.3_LedBarGraph_zero.py Dopo l'esecuzione del codice, vedrai che i LED della barra LED si accendono e si spengono regolarmente. .. warning:: Se viene visualizzato l'errore ``RuntimeError: Cannot determine SOC peripheral base address``, fare riferimento a :ref:`faq_soc`. **Code** .. note:: Puoi **Modificare/Reset/Copy/Esegui/Ferma** il codice qui sotto. Ma prima, devi andare nella directory del codice come ``raphael-kit/python-pi5``. Dopo aver modificato il codice, puoi eseguirlo direttamente per vedere l'effetto. .. raw:: html .. code-block:: python #!/usr/bin/env python3 from gpiozero import LED from time import sleep # Definisci i pin GPIO a cui sono collegati i LED led_pins = [18, 23, 24, 25, 8, 7, 12, 16, 20, 21] # Crea oggetti LED per ogni pin leds = [LED(pin) for pin in led_pins] def odd_led_bar_graph(): # Accendi in sequenza i LED con numeri dispari (indice 0, 2, 4, ecc.) for i in range(5): j = i * 2 # Calcola l'indice dispari leds[j].on() # Accendi il LED con numero dispari sleep(0.3) # Ritardo per l'effetto visivo leds[j].off() # Spegni il LED def even_led_bar_graph(): # Accendi in sequenza i LED con numeri pari (indice 1, 3, 5, ecc.) for i in range(5): j = i * 2 + 1 # Calcola l'indice pari leds[j].on() # Accendi il LED con numero pari sleep(0.3) # Ritardo per l'effetto visivo leds[j].off() # Spegni il LED def all_led_bar_graph(): # Accendi in sequenza tutti i LED uno per uno for led in leds: led.on() # Accendi il LED sleep(0.3) # Ritardo per l'effetto visivo led.off() # Spegni il LED def turn_off_all_leds(): # Spegni tutti i LED contemporaneamente for led in leds: led.off() try: # Ciclo principale per passare tra i vari schemi LED while True: odd_led_bar_graph() # Attiva i LED dispari sleep(0.3) # Pausa tra i pattern even_led_bar_graph() # Attiva i LED pari sleep(0.3) # Pausa tra i pattern all_led_bar_graph() # Attiva tutti i LED sleep(0.3) # Pausa prima di ricominciare except KeyboardInterrupt: # Gestisci l'interruzione (Ctrl+C) in modo sicuro turn_off_all_leds() # Assicurati che tutti i LED siano spenti all'uscita pass **Spiegazione del Codice** #. Queste righe importano le classi e le funzioni necessarie. ``LED`` dalla libreria ``gpiozero`` per controllare i LED e ``sleep`` dalla libreria ``time`` per i ritardi. .. code-block:: python #!/usr/bin/env python3 from gpiozero import LED from time import sleep #. La lista ``led_pins`` contiene i numeri dei pin GPIO. ``leds`` è una lista di oggetti ``LED``, ognuno dei quali corrisponde a un pin in ``led_pins``. .. code-block:: python # Definisci i pin GPIO a cui sono collegati i LED led_pins = [18, 23, 24, 25, 8, 7, 12, 16, 20, 21] # Crea oggetti LED per ogni pin leds = [LED(pin) for pin in led_pins] #. Accendi in sequenza i LED sui numeri dispari della barra LED. .. code-block:: python def odd_led_bar_graph(): # Accendi in sequenza i LED con numeri dispari (indice 0, 2, 4, ecc.) for i in range(5): j = i * 2 # Calcola l'indice dispari leds[j].on() # Accendi il LED con numero dispari sleep(0.3) # Ritardo per l'effetto visivo leds[j].off() # Spegni il LED #. Accendi in sequenza i LED sui numeri pari della barra LED. .. code-block:: python def even_led_bar_graph(): # Accendi in sequenza i LED con numeri pari (indice 1, 3, 5, ecc.) for i in range(5): j = i * 2 + 1 # Calcola l'indice pari leds[j].on() # Accendi il LED con numero pari sleep(0.3) # Ritardo per l'effetto visivo leds[j].off() # Spegni il LED #. Accendi in sequenza tutti i LED della barra LED uno per uno. .. code-block:: python def all_led_bar_graph(): # Accendi in sequenza tutti i LED uno per uno for led in leds: led.on() # Accendi il LED sleep(0.3) # Ritardo per l'effetto visivo led.off() # Spegni il LED #. Il ciclo ``while True`` cicla continuamente tra i pattern LED. Il blocco ``except`` gestisce una KeyboardInterrupt (Ctrl+C), assicurando che tutti i LED siano spenti all'uscita. .. code-block:: python try: # Ciclo principale per passare tra i vari schemi LED while True: odd_led_bar_graph() # Attiva i LED dispari sleep(0.3) # Pausa tra i pattern even_led_bar_graph() # Attiva i LED pari sleep(0.3) # Pausa tra i pattern all_led_bar_graph() # Attiva tutti i LED sleep(0.3) # Pausa prima di ricominciare except KeyboardInterrupt: # Gestisci l'interruzione (Ctrl+C) in modo sicuro turn_off_all_leds() # Assicurati che tutti i LED siano spenti all'uscita pass