.. note:: Ciao, benvenuto nella community SunFounder Raspberry Pi & Arduino & ESP32 su Facebook! Esplora più a fondo Raspberry Pi, Arduino ed ESP32 con altri appassionati. **Perché unirti?** - **Supporto Esperti**: Risolvi problemi post-vendita e sfide tecniche con l'aiuto della nostra comunità e del nostro team. - **Impara e Condividi**: Scambia suggerimenti e tutorial per migliorare le tue abilità. - **Anteprime Esclusive**: Ottieni l'accesso anticipato agli annunci di nuovi prodotti e anticipazioni. - **Sconti Speciali**: Goditi sconti esclusivi sui nostri prodotti più recenti. - **Promozioni e Giveaway Festivi**: Partecipa a concorsi e promozioni per le festività. 👉 Pronto a esplorare e creare con noi? Clicca su [|link_sf_facebook|] e unisciti oggi! .. _1.1.2_c: 1.1.2 LED RGB ===================== Introduzione ---------------- In questo progetto, controlleremo un LED RGB per farlo lampeggiare in vari colori. Componenti Necessari ------------------------------- In questo progetto, ci servono i seguenti componenti. .. image:: ../img/list_rgb_led.png :align: center È decisamente comodo acquistare un kit completo, ecco il link: .. list-table:: :widths: 20 20 20 :header-rows: 1 * - Nome - COMPONENTI IN QUESTO KIT - LINK * - Kit Raphael - 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_rgb_led` - |link_rgb_led_buy| Schema Circuitale ----------------------- Dopo aver collegato i pin di R, G e B a una resistenza limitatrice di corrente, collegali rispettivamente ai GPIO17, GPIO18 e GPIO27. Il pin più lungo (GND) del LED si collega al GND del Raspberry Pi. Quando ai tre pin vengono assegnati diversi valori PWM, il LED RGB visualizzerà colori diversi. ============ ======== ======== === T-Board Name physical wiringPi BCM GPIO17 Pin 11 0 17 GPIO18 Pin 12 1 18 GPIO27 Pin 13 2 27 ============ ======== ======== === .. image:: ../img/rgb_led_schematic.png Procedure Sperimentali ---------------------------- **Passo 1:** Costruisci il circuito. .. image:: ../img/image61.png **Passo 2:** Vai nella cartella del codice. .. raw:: html .. code-block:: cd ~/raphael-kit/c/1.1.2/ **Passo 3:** Compila il codice. .. raw:: html .. code-block:: gcc 1.1.2_rgbLed.c -lwiringPi .. note:: Quando il comando ``gcc`` viene eseguito, se non viene utilizzato ``-o``, allora il file eseguibile sarà denominato ``a.out``. **Passo 4:** Esegui il file eseguibile. .. raw:: html .. code-block:: sudo ./a.out Dopo aver eseguito il codice, vedrai che l'RGB mostra rosso, verde, blu, giallo, rosa e ciano. .. note:: Se non funziona dopo l'esecuzione, o compare un errore: \"wiringPi.h: Nessun file o directory\", fai riferimento a :ref:`install_wiringpi`. **Codice** .. code-block:: c #include #include #include #define uchar unsigned char #define LedPinRed 0 #define LedPinGreen 1 #define LedPinBlue 2 void ledInit(void){ softPwmCreate(LedPinRed, 0, 100); softPwmCreate(LedPinGreen,0, 100); softPwmCreate(LedPinBlue, 0, 100); } void ledColorSet(uchar r_val, uchar g_val, uchar b_val){ softPwmWrite(LedPinRed, r_val); softPwmWrite(LedPinGreen, g_val); softPwmWrite(LedPinBlue, b_val); } int main(void){ if(wiringPiSetup() == -1){ //se l'inizializzazione di wiring fallisce, stampa il messaggio sullo schermo printf("setup wiringPi failed !"); return 1; } ledInit(); while(1){ printf("Red\n"); ledColorSet(0xff,0x00,0x00); //rosso delay(500); printf("Green\n"); ledColorSet(0x00,0xff,0x00); //verde delay(500); printf("Blue\n"); ledColorSet(0x00,0x00,0xff); //blu delay(500); printf("Yellow\n"); ledColorSet(0xff,0xff,0x00); //giallo delay(500); printf("Purple\n"); ledColorSet(0xff,0x00,0xff); //viola delay(500); printf("Cyan\n"); ledColorSet(0xc0,0xff,0x3e); //ciano delay(500); } return 0; } **Spiegazione del Codice** .. code-block:: c #include Libreria utilizzata per realizzare la funzione PWM software. .. code-block:: c void ledInit(void){ softPwmCreate(LedPinRed, 0, 100); softPwmCreate(LedPinGreen,0, 100); softPwmCreate(LedPinBlue, 0, 100); } La funzione serve per creare un pin PWM software e impostare il suo periodo tra 0x100us-100x100us. Il prototipo della funzione softPwmCreate(LedPinRed, 0, 100) è il seguente: .. code-block:: c int softPwmCreate(int pin,int initialValue,int pwmRange); * **Parametro pin:** Qualsiasi pin GPIO del Raspberry Pi può essere impostato come pin PWM. * **Parametro initialValue:** La larghezza dell'impulso iniziale è il valore di initialValue moltiplicato per 100us. * **Parametro pwmRange:** Il periodo di PWM è pwmRange moltiplicato per 100us. .. code-block:: c void ledColorSet(uchar r_val, uchar g_val, uchar b_val){ softPwmWrite(LedPinRed, r_val); softPwmWrite(LedPinGreen, g_val); softPwmWrite(LedPinBlue, b_val); } Questa funzione serve per impostare i colori del LED. Utilizzando RGB, il parametro formale **r_val** rappresenta la luminosità del colore rosso, **g_val** del verde, **b_val** del blu. Il prototipo della funzione softPwmWrite(LedPinBlue, b_val) è il seguente: .. code-block:: c void softPwmWrite (int pin, int value) ; * **Parametro pin:** Qualsiasi pin GPIO del Raspberry Pi può essere impostato come pin PWM. * **Parametro Value:** La larghezza dell'impulso di PWM è il valore moltiplicato per 100us. Nota che il valore può essere solo inferiore a pwmRange definito in precedenza, se è maggiore di pwmRange, al valore verrà assegnato un valore fisso, pwmRange. .. code-block:: c ledColorSet(0xff,0x00,0x00); Richiama la funzione definita in precedenza. Scrivi 0xff in LedPinRed e 0x00 in LedPinGreen e LedPinBlue. Solo il LED rosso si accenderà dopo l'esecuzione di questo codice. Se desideri accendere i LED in altri colori, basta modificare i parametri. Immagine del Fenomeno -------------------------- .. image:: ../img/image62.jpeg