.. 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.4_py:

2.1.4 Interruttore a Scorrimento
========================================

Introduzione
------------

In questo progetto, impareremo a utilizzare un interruttore a scorrimento. Di solito, 
l'interruttore a scorrimento è saldato su un PCB come interruttore di alimentazione, 
ma qui dobbiamo inserirlo nella breadboard, quindi potrebbe non essere ben fissato. 
Lo usiamo sulla breadboard per mostrare la sua funzione.

Componenti Necessari
------------------------------

In questo progetto, abbiamo bisogno dei seguenti componenti. 

.. image:: ../img/list_2.1.2_slide_switch.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_slide_switch`
        - |link_slide_switch_buy|
    *   - :ref:`cpn_capacitor`
        - |link_capacitor_buy|

Schema Elettrico
--------------------

Collega il pin centrale dell'interruttore a scorrimento al GPIO17, e due LED ai pin 
GPIO22 e GPIO27 rispettivamente. Quando sposti l'interruttore, vedrai i due LED accendersi 
alternativamente.

.. image:: ../img/image305.png


.. image:: ../img/image306.png


Procedure Sperimentali
--------------------------

**Passo 1:** Costruisci il circuito.

.. image:: ../img/image161.png

**Passo 2:** Accedi alla cartella del codice.

.. raw:: html

   <run></run>

.. code-block::

    cd ~/raphael-kit/python

**Passo 3:** Esegui.

.. raw:: html

   <run></run>

.. code-block::

    sudo python3 2.1.4_Slider.py

Mentre il codice è in esecuzione, sposta l'interruttore verso sinistra, il LED giallo si accenderà; sposta verso destra e si accenderà il LED rosso.

**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

    <run></run>

.. code-block:: python

    import RPi.GPIO as GPIO
    import time

    # Imposta GPIO17 come pin interruttore a scorrimento, GPIO22 come pin led1, GPIO27 come pin led2
    slidePin = 17
    led1Pin = 22
    led2Pin = 27

    # Definisci una funzione di setup per alcune impostazioni iniziali
    def setup():
        # Imposta la modalità GPIO su BCM Numbering
        GPIO.setmode(GPIO.BCM)
        # Imposta slidePin come input
        # Imposta ledPin come output,
        # e livello iniziale su High(3.3v)
        GPIO.setup(slidePin, GPIO.IN)
        GPIO.setup(led1Pin, GPIO.OUT, initial=GPIO.HIGH)
        GPIO.setup(led2Pin, GPIO.OUT, initial=GPIO.HIGH)

    # Definisci una funzione main per il processo principale
    def main():
        while True:
            # interruttore a scorrimento alto, led1 acceso
            if GPIO.input(slidePin) == 1:
                print ('    LED1 ON    ')
                GPIO.output(led1Pin, GPIO.LOW)
                GPIO.output(led2Pin, GPIO.HIGH)

            # interruttore a scorrimento basso, led2 acceso
            if GPIO.input(slidePin) == 0:
                print ('    LED2 ON    ')
                GPIO.output(led2Pin, GPIO.LOW)
                GPIO.output(led1Pin, GPIO.HIGH)

            time.sleep(0.5)
    # Definisci una funzione destroy per pulire tutto dopo
    # la fine dello script
    def destroy():
        # Spegni i LED
        GPIO.output(led1Pin, GPIO.HIGH)
        GPIO.output(led2Pin, 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

    if GPIO.input(slidePin) == 1:
                GPIO.output(led1Pin, GPIO.LOW)
                GPIO.output(led2Pin, GPIO.HIGH)

Quando l'interruttore a scorrimento è spostato a destra, il pin centrale e quello di 
destra sono collegati; il Raspberry Pi legge un livello alto al pin centrale, quindi 
LED1 si accende e LED2 si spegne.

.. code-block:: python

    if GPIO.input(slidePin) == 0:
                GPIO.output(led2Pin, GPIO.LOW)
                GPIO.output(led1Pin, GPIO.HIGH)

Quando l'interruttore a scorrimento è spostato a sinistra, il pin centrale e quello di 
sinistra sono collegati; il Raspberry Pi legge un livello basso, quindi LED2 si accende 
e LED1 si spegne.

Immagine del Fenomeno
-------------------------

.. image:: ../img/image162.jpeg

