Bemerkung

Hallo und willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Gemeinschaft auf Facebook! Tauchen Sie tiefer ein in die Welt von Raspberry Pi, Arduino und ESP32 mit anderen Enthusiasten.

Warum beitreten?

  • Expertenunterstützung: Lösen Sie Nachverkaufsprobleme und technische Herausforderungen mit Hilfe unserer Gemeinschaft und unseres Teams.

  • Lernen & Teilen: Tauschen Sie Tipps und Anleitungen aus, um Ihre Fähigkeiten zu verbessern.

  • Exklusive Vorschauen: Erhalten Sie frühzeitigen Zugang zu neuen Produktankündigungen und exklusiven Einblicken.

  • Spezialrabatte: Genießen Sie exklusive Rabatte auf unsere neuesten Produkte.

  • Festliche Aktionen und Gewinnspiele: Nehmen Sie an Gewinnspielen und Feiertagsaktionen teil.

👉 Sind Sie bereit, mit uns zu erkunden und zu erschaffen? Klicken Sie auf [ hier ] und treten Sie heute bei!

HueDial

Dieses Beispiel steuert die Farbe einer RGB-LED basierend auf der Position eines Drehknopfs. Verschiedene Positionen des Knopfs entsprechen verschiedenen HUE-Werten, die dann in RGB-Farbwerte übersetzt werden, was zu einer Farbänderung der RGB-LED führt.

Benötigte Komponenten

Für dieses Projekt benötigen wir die folgenden Komponenten.

Es ist definitiv praktisch, ein ganzes Kit zu kaufen, hier ist der Link:

Name

ARTIKEL IN DIESEM KIT

LINK

Elite Explorer Kit

300+

Elite Explorer Kit

Sie können sie auch einzeln über die untenstehenden Links kaufen.

KOMPONENTENBESCHREIBUNG

KAUF-LINK

Arduino Uno R4 WiFi

-

Steckbrett

KAUFEN

Jumperkabel

KAUFEN

Widerstand

KAUFEN

RGB-LED

KAUFEN

Potentiometer

KAUFEN

Verdrahtung

../_images/03_hue_dial_bb.png

Schaltplan

../_images/03_hue_schematic.png

Code

Bemerkung

  • Sie können die Datei 03_huedial.ino direkt unter dem Pfad elite-explorer-kit-main\fun_project\03_huedial öffnen.

  • Oder kopieren Sie diesen Code in die Arduino IDE.

03_HueDial.ino
 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}

Wie funktioniert das?

Hier ist eine detaillierte Erklärung des Codes:

  1. Globale Variablendefinitionen:

    redPin, greenPin und bluePin: Diese definieren die PWM-Pins, die jeweils mit den roten, grünen und blauen LEDs verbunden sind. KNOB_PIN: Definiert den analogen Eingangspin, der mit dem Drehknopf verbunden ist.

  2. setup():

    Stellen Sie die Pins für die RGB-LED als Ausgang ein. Standardmäßig sind analoge Pins als Eingänge gesetzt, daher ist es nicht notwendig, den Eingangsmodus für den Pin des Knopfes einzustellen.

  3. loop():

    Lesen Sie den Wert des Drehknopfs. Dieser Wert reicht von 0 bis 1023. Normalisieren Sie den Wert des Knopfs auf einen Bereich von 0-1. Konvertieren Sie den normalisierten Wert in einen HUE-Wert im Bereich von 0-360. Konvertieren Sie den HUE-Wert in RGB-Werte. Aktualisieren Sie die Farbe der LED mit diesen RGB-Werten.

  4. setColor():

    Setzen Sie die passenden PWM-Werte für jeden LED-Pin mit der Funktion analogWrite(), um die Farbe der RGB-LED einzustellen.

  5. HUEtoRGB():

    Diese Funktion konvertiert HUE-Werte in RGB-Werte mit der HSL-zu-RGB-Konvertierungsmethode, konzentriert sich jedoch nur auf die HUE-Komponente und hält Sättigung und Helligkeit bei 100%. Der Algorithmus ist in 6 Stufen unterteilt, wobei jede 60 Grad abdeckt. Es berechnet RGB-Werte für jede HUE-Stufe und skaliert dann diese Werte auf einen Bereich von 0-255, was der erwarteten Spanne für die Funktion analogWrite() entspricht.