Nota
Ciao, benvenuto nella community SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts su Facebook! Approfondisci Raspberry Pi, Arduino ed ESP32 con altri appassionati.
Perché unirsi?
Supporto Esperto: Risolvi problemi post-vendita e sfide tecniche con l’aiuto della nostra community e del nostro team.
Impara & Condividi: Scambia consigli e tutorial per migliorare le tue competenze.
Anteprime Esclusive: Ottieni l’accesso anticipato agli annunci di nuovi prodotti e anteprime esclusive.
Sconti Speciali: Goditi sconti esclusivi sui nostri prodotti più recenti.
Promozioni e Concorsi Festivi: Partecipa a concorsi e promozioni festive.
👉 Pronto a esplorare e creare con noi? Clicca [Qui] e unisciti oggi stesso!
HueDial
Questo esempio controlla il colore di un LED RGB in base alla posizione di una manopola rotante. Diverse posizioni della manopola corrispondono a diversi valori di tonalità (HUE), che vengono poi tradotti in valori RGB, determinando così un cambiamento di colore per il LED RGB.
Componenti Necessari
In questo progetto, abbiamo bisogno dei seguenti componenti.
È sicuramente conveniente acquistare un kit completo, ecco il link:
Nome |
ELEMENTI IN QUESTO KIT |
LINK |
|---|---|---|
Elite Explorer Kit |
300+ |
Puoi anche acquistarli separatamente dai link sottostanti.
INTRODUZIONE COMPONENTI |
LINK ACQUISTO |
|---|---|
- |
|
potentiometer |
Collegamenti
Schema Elettrico
Codice
Nota
Puoi aprire il file
03_huedial.inonel percorsoelite-explorer-kit-main\fun_project\03_huedialdirettamente.Oppure copia questo codice nell’Arduino IDE.
1/*
2 This code controls an RGB LED using a potentiometer
3 to change the hue of the color.
4
5 Board: Arduino Uno R4
6 Component: RGB LED and Potentiometer
7*/
8
9// Define RGB LED pins
10const int redPin = 12; // Red channel
11const int greenPin = 10; // Green channel
12const int bluePin = 9; // Blue channel
13
14// Define the pin for the knob
15const int knobPin = A0;
16
17void setup() {
18 // Initialize RGB LED pins as outputs
19 pinMode(redPin, OUTPUT);
20 pinMode(greenPin, OUTPUT);
21 pinMode(bluePin, OUTPUT);
22}
23
24void loop() {
25 // Read the value of the knob
26 int knobValue = analogRead(knobPin);
27
28 // Normalize the knob value to the range 0-1
29 float hueValue = (float)knobValue / 1023.0;
30
31 // Convert the normalized value to a HUE value (0-360)
32 int hue = (int)(hueValue * 360);
33
34 // Convert the HUE value to RGB values
35 int red, green, blue;
36 HUEtoRGB(hue, &red, &green, &blue);
37
38 // Update the RGB LED with the new color values
39 setColor(red, green, blue);
40}
41
42// Function to set the RGB LED color
43void setColor(int red, int green, int blue) {
44 analogWrite(redPin, red);
45 analogWrite(greenPin, green);
46 analogWrite(bluePin, blue);
47}
48
49// Function to convert a hue value to RGB values
50void HUEtoRGB(int hue, int* red, int* green, int* blue) {
51 float h = (float)hue / 60.0;
52 float c = 1.0;
53 float x = c * (1.0 - fabs(fmod(h, 2.0) - 1.0));
54 float r, g, b;
55 if (h < 1.0) {
56 r = c;
57 g = x;
58 b = 0;
59 } else if (h < 2.0) {
60 r = x;
61 g = c;
62 b = 0;
63 } else if (h < 3.0) {
64 r = 0;
65 g = c;
66 b = x;
67 } else if (h < 4.0) {
68 r = 0;
69 g = x;
70 b = c;
71 } else if (h < 5.0) {
72 r = x;
73 g = 0;
74 b = c;
75 } else {
76 r = c;
77 g = 0;
78 b = x;
79 }
80 float m = 1.0 - c;
81 *red = (int)((r + m) * 255);
82 *green = (int)((g + m) * 255);
83 *blue = (int)((b + m) * 255);
84}
Come funziona?
Ecco una spiegazione dettagliata del codice:
Definizioni delle Variabili Globali:
redPin,greenPinebluePin: Questi definiscono i pin PWM collegati rispettivamente ai LED rosso, verde e blu.KNOB_PIN: Definisce il pin di input analogico collegato alla manopola rotante.setup():Imposta i pin per il LED RGB come output. Di default, i pin analogici sono impostati come input, quindi non c’è bisogno di impostare la modalità input per il pin della manopola.
loop():Leggi il valore della manopola rotante. Questo valore varia da 0 a 1023. Normalizza il valore della manopola a un intervallo da 0 a 1. Converti il valore normalizzato in un valore di tonalità (HUE) che varia da 0 a 360. Converti il valore di tonalità in valori RGB. Aggiorna il colore del LED utilizzando questi valori RGB.
setColor():Imposta i valori PWM appropriati per ciascun pin del LED utilizzando la funzione
analogWrite()per impostare il colore del LED RGB.HUEtoRGB():Questa funzione converte i valori di tonalità (HUE) in valori RGB utilizzando il metodo di conversione da HSL a RGB, concentrandosi solo sulla componente HUE, mantenendo saturazione e luminosità al 100%. L’algoritmo è diviso in 6 fasi, ciascuna delle quali copre 60 gradi. Calcola i valori RGB per ciascuna fase di tonalità e poi scala questi valori a un intervallo di 0-255, che è l’intervallo previsto per la funzione
analogWrite().