.. note::

    Ciao, benvenuto nella Community di SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts su Facebook! Approfondisci le tue conoscenze su Raspberry Pi, Arduino ed ESP32 con altri appassionati.

    **Perché Unirsi?**

    - **Supporto Esperto**: Risolvi problemi post-vendita e sfide tecniche con il supporto della nostra comunità e del nostro team.
    - **Impara e Condividi**: Scambia consigli e tutorial per migliorare le tue competenze.
    - **Anteprime Esclusive**: Accedi in anteprima a nuovi annunci di prodotti e anticipazioni.
    - **Sconti Speciali**: Approfitta di sconti esclusivi sui nostri prodotti più recenti.
    - **Promozioni Festive e Giveaway**: Partecipa a giveaway e promozioni durante le festività.

    👉 Pronto per esplorare e creare con noi? Clicca [|link_sf_facebook|] e unisciti oggi stesso!

1.2.1 Cicalino Attivo
=======================

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

In questa lezione, impareremo a far suonare un cicalino attivo usando un 
transistor PNP.

Componenti
--------------

.. image:: img/list_1.2.1.png


Principio
---------

**Cicalino**

Il cicalino è un tipo di dispositivo elettronico integrato, alimentato in 
corrente continua, ampiamente utilizzato in computer, stampanti, fotocopiatrici, 
allarmi, giocattoli elettronici, dispositivi elettronici per auto, telefoni, 
timer e altri prodotti o dispositivi a voce. I cicalini si dividono in attivi e 
passivi (vedi immagine seguente). Ruota il cicalino in modo che i pin siano 
rivolti verso l’alto: il cicalino con una scheda verde è passivo, mentre quello 
con nastro nero è attivo.

Differenza tra un cicalino attivo e uno passivo:

.. image:: img/image101.png
    :width: 400
    :align: center

La differenza principale è che un cicalino attivo ha una sorgente di 
oscillazione interna, quindi emette suoni quando è alimentato. Al contrario, 
il cicalino passivo non ha questa sorgente e non suona se alimentato da corrente 
continua; richiede onde quadre con frequenza tra 2K e 5K per funzionare. 
I cicalini attivi, a causa dei circuiti oscillanti interni, tendono ad essere più 
costosi di quelli passivi.

Ecco il simbolo elettrico di un cicalino. Ha due pin, uno positivo e uno negativo. 
Il pin contrassegnato con un + sulla superficie è l'anodo e l'altro è il catodo.

.. image:: img/image102.png
    :width: 150
    :align: center

Controlla i pin del cicalino: il pin più lungo è l'anodo e quello più corto è il catodo. 
Assicurati di non invertirli durante il collegamento, altrimenti il cicalino non emetterà suoni.

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

In questo esperimento, si utilizza un cicalino attivo, un transistor PNP e una 
resistenza da 1k tra la base del transistor e il GPIO per proteggere il transistor. 
Quando il GPIO17 del Raspberry Pi viene impostato a livello basso (0V) tramite 
programmazione, il transistor si satura di corrente e il cicalino emette suoni. 
Quando, invece, il GPIO è impostato a livello alto, il transistor si spegne e il 
cicalino non suona.

.. image:: img/image332.png

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

**Step 1:** Costruisci il circuito. (Fai attenzione ai poli del cicalino: quello 
con l'etichetta + è il polo positivo e l'altro è il negativo.)

.. image:: img/image104.png
    :width: 800

**Step 2**: Apri il file di codice.

.. raw:: html

   <run></run>

.. code-block::

    cd ~/davinci-kit-for-raspberry-pi/c/1.2.1/

**Step 3**: Compila il codice.

.. raw:: html

   <run></run>

.. code-block::

    gcc 1.2.1_ActiveBuzzer.c -lwiringPi

**Step 4**: Esegui il file eseguibile.

.. raw:: html

   <run></run>

.. code-block::

    sudo ./a.out

Quando il codice viene eseguito, il cicalino suona.

.. note::

    Se il programma non funziona o appare un errore come "wiringPi.h: No such file or directory", consulta :ref:`Il codice C non funziona?`.

**Codice**

.. code-block:: c

    #include <wiringPi.h>
    #include <stdio.h>

    #define BeepPin 0
    int main(void){
        if(wiringPiSetup() == -1){ //se l'inizializzazione fallisce, stampa un messaggio
            printf("setup wiringPi failed !");
            return 1;
        }
        
        pinMode(BeepPin, OUTPUT);   //imposta GPIO0 come uscita
        while(1){
            //accendi il cicalino
            printf("Buzzer on\n");
            digitalWrite(BeepPin, LOW);
            delay(100);
            printf("Buzzer off\n");
            //spegni il cicalino
            digitalWrite(BeepPin, HIGH);
            delay(100);
        }
        return 0;
    }

**Spiegazione del Codice**

.. code-block:: c

    digitalWrite(BeepPin, LOW);

Usiamo un cicalino attivo in questo esperimento, quindi suonerà automaticamente 
quando collegato alla corrente continua. Questo comando imposta la porta I/O a 
livello basso (0V), attivando il transistor e facendo suonare il cicalino.

.. code-block:: c

    digitalWrite(BeepPin, HIGH);

Imposta la porta I/O a livello alto (3.3V), disattivando il transistor, e il 
cicalino non suona.
