注釈
こんにちは、SunFounderのRaspberry Pi & Arduino & ESP32愛好家コミュニティへようこそ!Facebook上でRaspberry Pi、Arduino、ESP32についてもっと深く掘り下げ、他の愛好家と交流しましょう。
参加する理由は?
エキスパートサポート:コミュニティやチームの助けを借りて、販売後の問題や技術的な課題を解決します。
学び&共有:ヒントやチュートリアルを交換してスキルを向上させましょう。
独占的なプレビュー:新製品の発表や先行プレビューに早期アクセスしましょう。
特別割引:最新製品の独占割引をお楽しみください。
祭りのプロモーションとギフト:ギフトや祝日のプロモーションに参加しましょう。
👉 私たちと一緒に探索し、創造する準備はできていますか?[ ここ]をクリックして今すぐ参加しましょう!
HueDial
この例では、回転ノブの位置に基づいてRGB LEDの色を制御します。 ノブの異なる位置は異なるHUE値に対応し、これらはRGB色値に変換され、RGB LEDの色が変わります。
必要なコンポーネント
このプロジェクトには以下のコンポーネントが必要です。
全体のキットを購入すると便利です。こちらがリンクです:
名称 |
このキットのアイテム数 |
リンク |
|---|---|---|
Elite Explorer Kit |
300+ |
以下のリンクから別々に購入することもできます。
コンポーネント紹介 |
購入リンク |
|---|---|
- |
|
配線図
回路図
コード
注釈
ファイル
03_huedial.inoをelite-explorer-kit-main\fun_project\03_huedialのパスから直接開くことができます。または、このコードを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}
どのように動作しますか?
以下はコードの詳細な説明です:
グローバル変数の定義:
redPin,greenPin,bluePin:それぞれ赤、緑、青のLEDに接続されたPWMピンを定義します。KNOB_PIN:回転ノブに接続されたアナログ入力ピンを定義します。setup():RGB LEDのピンを出力として設定します。 アナログピンはデフォルトで入力として設定されているので、ノブのピンの入力モードを設定する必要はありません。
loop():回転ノブの値を読み取ります。この値は0から1023の範囲です。 ノブの値を0-1の範囲に正規化します。 正規化された値を0-360の範囲のHUE値に変換します。 HUE値をRGB値に変換します。 これらのRGB値を使用してLEDの色を更新します。
setColor():RGB LEDの色を設定するために、各LEDピンに対して
analogWrite()関数を使用して適切なPWM値を設定します。HUEtoRGB():この関数はHUE値をRGB値に変換します。これはHSLからRGBへの変換方法を使用しますが、彩度と明るさを100%に保ちながらHUEコンポーネントにのみ焦点を当てます。 アルゴリズムは6段階に分けられ、それぞれ60度をカバーしています。 各HUE段階のRGB値を計算し、それらの値を
analogWrite()関数に対して期待される0-255の範囲にスケーリングします。