LoginSignup
1
0

More than 5 years have passed since last update.

ProMicroでフルカラーLEDを制御する

Last updated at Posted at 2018-07-08

フルカラーLEDとは

 Red/Green/Blueの3色の色を1つのLEDで表現できるLEDです。
 普通のLEDが2本の線に対し、フルカラーLEDは4本の線を制御して、表示します。

フルカラーLEDの各線について

写真 2018-07-09 0 55 50.jpg

 規格化されているのかは分かりませんが、一番長い線がカソード(GNDに繋がる線)で、左から順番に青のアノード、緑のアノード、赤のアノードとなります。3本を別々に制御するためには3本のピンが必要です。

回路イメージ

写真 2018-07-09 0 30 52.jpg

 3つのタクトスイッチをそれぞれ、R・G・Bの制御用に割り当てます。ボタンは14~16番ピンを使用します。
 また、出力用に6, 7, 9番のピンを使用します。単純にLチカをしたときはdigitalWriteを使いましたが、今回は明るさを制御したいためanalogWriteを使います。
 analogWriteを使う場合は、対応したピンを使う必要があり、https://learn.sparkfun.com/tutorials/pro-micro--fio-v3-hookup-guide によると、4, 6, 8, 9, 10, 18, 19, 20, 21が対応しているピンになります。

 抵抗は230Ωのものを3つ、各アノードに接続しています。

 一点問題があり、RとBのつもりでボタンを押しているのですが、お互いが反転しています。
 回路的にはあっているはずなので、まだ原因は謎です。

ソースコード

#include <Arduino.h>

#define BUTTON_1 14
#define BUTTON_2 15
#define BUTTON_3 16
#define LED_R 6
#define LED_G 8
#define LED_B 9

int r_value = 0;
int g_value = 0;
int b_value = 0;
char buffer[256];

void setup()
{
    pinMode(BUTTON_1, INPUT_PULLUP);
    pinMode(BUTTON_2, INPUT_PULLUP);
    pinMode(BUTTON_3, INPUT_PULLUP);
    pinMode(LED_R, OUTPUT);
    pinMode(LED_G, OUTPUT);
    pinMode(LED_B, OUTPUT);
    Serial.begin(9600);
}

void loop()
{
    if (digitalRead(BUTTON_1) == LOW)
    {
        r_value = (r_value + 16) % 256;
        delay(300);
    }

    if (digitalRead(BUTTON_2) == LOW)
    {
        g_value = (g_value + 16) % 256;
        delay(300);
    }

    if (digitalRead(BUTTON_3) == LOW)
    {
        b_value = (b_value + 16) % 256;
        delay(300);
    }
    sprintf(buffer, "R = %d, G = %d, B = %d", r_value, g_value, b_value);
    Serial.println(buffer);

    analogWrite(LED_R, r_value);
    analogWrite(LED_G, g_value);
    analogWrite(LED_B, b_value);
}

動作イメージ

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0