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