前回はポテンショメーターを3つ使用してRGB LEDの色を自在に制御してみました。
今回は8LED モジュールをコントロールしてみましょう。
目次
回路図
接続図
コード
/**********************************************************************
Filename : SoftRainbowLight
Description : Make the strip light up in rainbow colors.
Auther : www.freenove.com
Modification: 2022/10/21
**********************************************************************/
#include "Freenove_WS2812_Lib_for_ESP32.h"
#define PIN_POT 1 // Define analog input pins
#define LEDS_COUNT 8 // The number of led
#define LEDS_PIN 14 // define the pin connected to the Freenove 8 led strip
#define CHANNEL 0 // RMT module channel
#define BRIGHTNESS 20 // breghtness, the value range is 0-255.
Freenove_ESP32_WS2812 strip = Freenove_ESP32_WS2812(LEDS_COUNT, LEDS_PIN, CHANNEL, TYPE_GRB);
void setup() {
strip.setBrightness(BRIGHTNESS);
strip.begin();
}
void loop() {
int colorPos = map(analogRead(PIN_POT), 0, 4095, 0, 255);
for (int i = 0; i < LEDS_COUNT; i++) {
strip.setLedColorData(i,strip.Wheel(colorPos + i * 255 / 8)); // Set color data.
}
strip.show(); // Send color data to LED, and display.
delay(10);
}
ポテンショメーターを回すと、LEDの色が回ったでしょうか?
strip.Wheel()関数は0~255で表現するので、今回はmap()関数でアナログの12ビットを8ビットに変換する必要がありますね。
さて問題です。map()関数を使わずに12ビットを8ビットに変換するにはどのようなコードを書けば良いでしょうか?ここまでの学習内容を思い出しながら考えてみて下さい。
正解は・・・
正解は『4ビット右シフト』です。具体的には以下のように書き換えます。美しいですね!
int colorPos = analogRead(PIN_POT) >> 4;
ビットシフトが使えると、ビット数を変換するときに便利ですね!
最近はプログラミング要素が少なかったので、ちょっと問題形式にしてみました。
本当は早くモーターあたりに行きたいのですが、ここでも『守破離』を思い出して、まずは基本の型を沢山反復練習していきましょう。徐々にコードについてもなんとなくやっていることがわかるようになってきた頃合いだと思います。焦らず、一歩ずつ進んでいきましょう。
次回はフォトレジスターを使用した夜間照明を作ってみましょう。
コメント