/*
* コンサートペンライト
* PWM出力を使い点灯できる色を増やす
*/
// ピン番号を定数として定義
const int LED_R = 3;
const int LED_G = 5;
const int LED_B = 6;
const int BUTTON = 2;
// 点灯色列挙体
enum LIGHT_COLOR
{
WHITE,
RED,
ORANGE,
YELLOW,
LIME,
GREEN,
LIGHTBLUE,
BLUE,
PURPLE,
PINK
};
// 点灯色RGB構造体
struct RGB
{
int led_r;
int led_g;
int led_b;
};
// 点灯色
RGB color[] =
{
// カソードコモンのため 0: 消灯, 255: 点灯
// 赤, 緑, 青
{255, 255, 255}, // WHITE
{255, 0, 0}, // RED
{255, 100, 0}, // ORANGE
{255, 255, 0}, // YELLOW
{100, 255, 0}, // LIME
{0, 255, 0}, // GREEN
{0, 100, 255}, // LIGHTBLUE
{0, 0, 255}, // BLUE
{100, 0, 255}, // PURPLE
{255, 0, 100} // PINK
};
int pressed_times = 0; // ボタンを押した回数(初期値:0 = WHITE)
bool press_button = false; // ボタンの状態
void setup() {
// ピンモード設定
pinMode(LED_R, OUTPUT);
pinMode(LED_G, OUTPUT);
pinMode(LED_B, OUTPUT);
pinMode(BUTTON, INPUT);
// pinMode(BUTTON, INPUT_PULLUP); // 内部プルアップ抵抗を使用する場合
// WHITE点灯
analogWrite(LED_R, color[WHITE].led_r);
analogWrite(LED_G, color[WHITE].led_g);
analogWrite(LED_B, color[WHITE].led_b);
// Serial.begin(115200);
}
void loop() {
int button = digitalRead(BUTTON);
// Serial.print("button: ");
// Serial.println(button);
if (button == LOW) // ボタンが押されたとき
{
if (press_button == false)
{
// 点灯色変更
if (pressed_times < PINK)
{
pressed_times++; // カウントアップして次の色へ
}
else
{
pressed_times = 0; // 最初(WHITE)に戻る
}
press_button = true;
}
delay(10); // チャタリング防止
}
else
{
if (press_button == true)
{
press_button = false;
}
}
analogWrite(LED_R, color[pressed_times].led_r);
analogWrite(LED_G, color[pressed_times].led_g);
analogWrite(LED_B, color[pressed_times].led_b);
}