注釈

こんにちは、SunFounderのRaspberry Pi & Arduino & ESP32愛好家コミュニティへようこそ!Facebook上でRaspberry Pi、Arduino、ESP32についてもっと深く掘り下げ、他の愛好家と交流しましょう。

参加する理由は?

  • エキスパートサポート:コミュニティやチームの助けを借りて、販売後の問題や技術的な課題を解決します。

  • 学び&共有:ヒントやチュートリアルを交換してスキルを向上させましょう。

  • 独占的なプレビュー:新製品の発表や先行プレビューに早期アクセスしましょう。

  • 特別割引:最新製品の独占割引をお楽しみください。

  • 祭りのプロモーションとギフト:ギフトや祝日のプロモーションに参加しましょう。

👉 私たちと一緒に探索し、創造する準備はできていますか?[ ここ]をクリックして今すぐ参加しましょう!

HueDial

この例では、回転ノブの位置に基づいてRGB LEDの色を制御します。 ノブの異なる位置は異なるHUE値に対応し、これらはRGB色値に変換され、RGB LEDの色が変わります。

必要なコンポーネント

このプロジェクトには以下のコンポーネントが必要です。

全体のキットを購入すると便利です。こちらがリンクです:

名称

このキットのアイテム数

リンク

Elite Explorer Kit

300+

Elite Explorer Kit

以下のリンクから別々に購入することもできます。

コンポーネント紹介

購入リンク

Arduino Uno R4 WiFi

-

ブレッドボード

購入

ジャンパーワイヤー

購入

抵抗器

購入

RGB LED

購入

ポテンショメーター

購入

配線図

../_images/03_hue_dial_bb.png

回路図

../_images/03_hue_schematic.png

コード

注釈

  • ファイル 03_huedial.inoelite-explorer-kit-main\fun_project\03_huedial のパスから直接開くことができます。

  • または、このコードを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}

どのように動作しますか?

以下はコードの詳細な説明です:

  1. グローバル変数の定義:

    redPin , greenPin , bluePin:それぞれ赤、緑、青のLEDに接続されたPWMピンを定義します。 KNOB_PIN:回転ノブに接続されたアナログ入力ピンを定義します。

  2. setup()

    RGB LEDのピンを出力として設定します。 アナログピンはデフォルトで入力として設定されているので、ノブのピンの入力モードを設定する必要はありません。

  3. loop()

    回転ノブの値を読み取ります。この値は0から1023の範囲です。 ノブの値を0-1の範囲に正規化します。 正規化された値を0-360の範囲のHUE値に変換します。 HUE値をRGB値に変換します。 これらのRGB値を使用してLEDの色を更新します。

  4. setColor()

    RGB LEDの色を設定するために、各LEDピンに対して analogWrite() 関数を使用して適切なPWM値を設定します。

  5. HUEtoRGB()

    この関数はHUE値をRGB値に変換します。これはHSLからRGBへの変換方法を使用しますが、彩度と明るさを100%に保ちながらHUEコンポーネントにのみ焦点を当てます。 アルゴリズムは6段階に分けられ、それぞれ60度をカバーしています。 各HUE段階のRGB値を計算し、それらの値を analogWrite() 関数に対して期待される0-255の範囲にスケーリングします。