.. note:: Ciao, benvenuto nella SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community su Facebook! Approfondisci le tue conoscenze su Raspberry Pi, Arduino ed ESP32 insieme ad altri appassionati. **Perché unirti a noi?** - **Supporto esperto**: Risolvi i problemi post-vendita e le sfide tecniche con l'aiuto della nostra comunità e del nostro team. - **Impara e condividi**: Scambia suggerimenti e tutorial per migliorare le tue competenze. - **Anteprime esclusive**: Ottieni accesso anticipato agli annunci di nuovi prodotti e anteprime speciali. - **Sconti esclusivi**: Approfitta di sconti riservati sui nostri prodotti più recenti. - **Promozioni festive e concorsi**: Partecipa a concorsi e promozioni durante le festività. 👉 Sei pronto a esplorare e creare con noi? Clicca su [|link_sf_facebook|] e unisciti oggi stesso! .. _2.1.1_py: 2.1.1 Pulsante ================== Introduzione ------------------- In questo progetto, impareremo come accendere o spegnere un LED utilizzando un pulsante. Componenti Necessari -------------------------------- In questo progetto, abbiamo bisogno dei seguenti componenti. .. image:: ../img/list_2.1.1_Button.png È sicuramente comodo acquistare un kit completo, ecco il link: .. list-table:: :widths: 20 20 20 :header-rows: 1 * - Nome - ARTICOLI IN QUESTO KIT - LINK * - Kit Raphael - 337 - |link_Raphael_kit| Puoi anche acquistarli separatamente dai link qui sotto. .. list-table:: :widths: 30 20 :header-rows: 1 * - INTRODUZIONE AI COMPONENTI - LINK PER L'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_led` - |link_led_buy| * - :ref:`cpn_button` - |link_button_buy| Schema Elettrico --------------------- Usa un pulsante normalmente aperto come ingresso per Raspberry Pi, la connessione è mostrata nello schema elettrico qui sotto. Quando il pulsante viene premuto, il GPIO18 si porterà a livello basso (0V). Possiamo rilevare lo stato del GPIO18 tramite programmazione. In pratica, se il GPIO18 si porta a livello basso, significa che il pulsante è stato premuto. Puoi eseguire il codice corrispondente quando il pulsante viene premuto, facendo così accendere il LED. .. note:: Il pin più lungo del LED è l'anodo e quello più corto è il catodo. .. image:: ../img/image302.png .. image:: ../img/image303.png Procedure Sperimentali --------------------------- **Passo 1**: Costruisci il circuito. .. image:: ../img/image152.png **Passo 2**: Apri il file del codice. .. raw:: html .. code-block:: cd ~/raphael-kit/python **Passo 3**: Esegui il codice. .. raw:: html .. code-block:: sudo python3 2.1.1_Button.py Ora, premi il pulsante e il LED si accenderà; premi di nuovo il pulsante e il LED si spegnerà. Allo stesso tempo, lo stato del LED sarà stampato sullo schermo. **Codice** .. note:: Puoi **Modificare/Reimpostare/Copiare/Eseguire/Interrompere** il codice qui sotto. Ma prima devi accedere al percorso del codice come ``raphael-kit/python``. Dopo aver modificato il codice, puoi eseguirlo direttamente per vedere l'effetto. .. raw:: html .. code-block:: python import RPi.GPIO as GPIO import time LedPin = 17 # Imposta GPIO17 come pin del LED BtnPin = 18 # Imposta GPIO18 come pin del pulsante # Imposta lo stato del LED su True (SPENTO) Led_status = True # Definisci una funzione di setup per alcune impostazioni iniziali def setup(): # Imposta la modalità GPIO su BCM GPIO.setmode(GPIO.BCM) # Imposta la modalità di LedPin su output, # e il livello iniziale su alto (3.3v) GPIO.setup(LedPin, GPIO.OUT, initial=GPIO.HIGH) # Imposta la modalità di BtnPin su input, # e collegamento a 3.3V (pull-up) GPIO.setup(BtnPin, GPIO.IN) # Definisci una funzione di callback per il pulsante def swLed(ev=None): global Led_status # Cambia lo stato del LED (acceso-->spento; spento-->acceso) Led_status = not Led_status GPIO.output(LedPin, Led_status) if Led_status: print ('LED OFF...') else: print ('...LED ON') # Definisci una funzione main per il processo principale def main(): # Imposta una rilevazione del fronte di discesa su BtnPin, # e funzione di callback su swLed GPIO.add_event_detect(BtnPin, GPIO.FALLING, callback=swLed) while True: # Non fare nulla. time.sleep(1) # Definisci una funzione destroy per pulire tutto dopo # la fine dello script def destroy(): # Spegni il LED GPIO.output(LedPin, GPIO.HIGH) # Rilascia le risorse GPIO.cleanup() # Se esegui questo script direttamente, fai: if __name__ == '__main__': setup() try: main() # Quando viene premuto 'Ctrl+C', il programma # destroy() verrà eseguito. except KeyboardInterrupt: destroy() **Spiegazione del Codice** .. code-block:: python LedPin = 17 Imposta GPIO17 come pin del LED. .. code-block:: python BtnPin = 18 Imposta GPIO18 come pin del pulsante. .. code-block:: python GPIO.add_event_detect(BtnPin, GPIO.FALLING, callback=swLed) Imposta una rilevazione del fronte di discesa su BtnPin, quindi quando il valore di BtnPin cambia da alto a basso, significa che il pulsante è stato premuto. Il passo successivo è chiamare la funzione swLed. .. code-block:: python def swLed(ev=None): global Led_status # Cambia lo stato del LED (acceso-->spento; spento-->acceso) Led_status = not Led_status GPIO.output(LedPin, Led_status) Definisci una funzione di callback come callback del pulsante. Quando il pulsante viene premuto per la prima volta e la condizione, not Led_status, è falsa, viene chiamata la funzione GPIO.output() per accendere il LED. Quando il pulsante viene premuto nuovamente, lo stato del LED passerà da falso a vero, spegnendo così il LED. Immagine del Fenomeno ^^^^^^^^^^^^^^^^^^^^^^^^ .. image:: ../img/image153.jpeg