Project 11.3 ビット変換の別解/Soft Rainbow Light

前回はポテンションメーターを3つ使用してRGB LEDの色を自在に制御してみました。

あわせて読みたい
Project 11.2 ADコンバータとbitマップ/Soft Colorful Light 前回はADCとポテンションメーターを使ってLEDの明るさをPWMで制御してみました。 https://kaneshige.org/?p=384 今回はポテンションメーターの数を増やして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;

ビットシフトが使えると、ビット数を変換するときに便利ですね!

最近はプログラミング要素が少なかったので、ちょっと問題形式にしてみました。

本当は早くモーターあたりに行きたいのですが、ここでも『守破離』を思い出して、まずは基本の型を沢山反復練習していきましょう。徐々にコードについてもなんとなくやっていることがわかるようになってきた頃合いだと思います。焦らず、一歩ずつ進んでいきましょう。

次回はフォトレジスターを使用した夜間照明を作ってみましょう。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

金重総合研究所の主席研究員。
子供の頃から研究者を目指し、ライフワークとして日々様々な研究をしています。
経営・マネジメント・金融・DXあたりが本職です。
私を採用したい人、私と一緒に働きたい人、一緒に知識を肥やしていきたい人はぜひお声がけ下さい。

コメント

コメントする

目次