/* ledcWrite_RGB.ino
RGB LEDを光らせるスクリプト
この例はパブリックドメインです。
一部の基本的な変更はvsevenによって行われています。
*/
// RGB LEDのピンを設定
uint8_t ledR = A14;//d13
uint8_t ledG = A15;//d12
uint8_t ledB = A17;//d27
uint8_t ledArray[3] = {1, 2, 3}; // 3つのLEDチャンネル
const boolean invert = true; // 共通陽極の場合はtrue、共通陰極の場合はfalse
uint8_t color = 0; // 色相を表す0から255の値
uint32_t R, G, B; // 赤、緑、青の色成分
uint8_t brightness = 255; // 最大輝度は255ですが、共通陽極の場合は256にする必要があるかもしれません
void setup() {
Serial.begin(115200);
delay(10);
ledcSetup(1, 12000, 8); // 12 kHz PWM、8ビット解像度
ledcSetup(2, 12000, 8);
ledcSetup(3, 12000, 8);
ledcAttachPin(ledR, 1);
ledcAttachPin(ledG, 2);
ledcAttachPin(ledB, 3);
}
// 色相をRGBに変換する関数
void hueToRGB(uint8_t hue, uint8_t brightness) {
uint8_t sector = hue / 43; // 色相を6つのセクターに分割
uint8_t offset = (hue % 43) * 6; // セクター内のオフセット
uint8_t p = (brightness * (255 - offset)) >> 8;
uint8_t q = (brightness * (255 - (offset % 255))) >> 8;
uint8_t t = (brightness * (255 - (255 - offset))) >> 8;
switch (sector) {
case 0:
R = brightness;
G = t;
B = p;
break;
case 1:
R = q;
G = brightness;
B = p;
break;
case 2:
R = p;
G = brightness;
B = t;
break;
case 3:
R = p;
G = q;
B = brightness;
break;
case 4:
R = t;
G = p;
B = brightness;
break;
default:
R = brightness;
G = p;
B = q;
break;
}
}
void loop() {
Serial.println("全てのLEDに255を送信して2秒待機");
ledcWrite(1, 255);
ledcWrite(2, 255);
ledcWrite(3, 255);
delay(2000);
Serial.println("全てのLEDに0を送信して2秒待機");
ledcWrite(1, 0);
ledcWrite(2, 0);
ledcWrite(3, 0);
delay(2000);
Serial.println("カラーフェードループを開始");
for (color = 0; color < 255; color++) {
hueToRGB(color, brightness); // 色相をRGBに変換
// RGB値をピンに書き込む
ledcWrite(1, R);
ledcWrite(2, G);
ledcWrite(3, B);
}
}