Edited at

M5StackのLCDディスプレイの色をRGBで指定する。

More than 1 year has passed since last update.


目的

M5StackのLDCディスプレイでは、16Bit Colorで色を指定するようになっている。

直感的にわかりやすい、RGBの24Bit color(8Bit color x 3channel)で、色を指定する。


従来

M5Stackで、LCDディスプレイに赤を表示するサンプルコードは

例えば以下のようになる。

#include <M5Stack.h>

void setup() {
M5.begin();
M5.Lcd.fillScreen(TFT_RED);
//M5.Lcd.fillScreen(0xF800);
}

void loop(void) {
delay(100);
}

色を指定する場合は、LCDのディスプレイであらかじめ定義されている変数を使うか、

16Bit Colorを直接入力する必要がある。

https://github.com/m5stack/M5Stack/blob/master/src/utility/In_eSPI.h

                                     /*   R,   G,   B */ 

#define TFT_BLACK 0x0000 /* 0, 0, 0 */
#define TFT_BLUE 0x001F /* 0, 0, 255 */
#define TFT_GREEN 0x07E0 /* 0, 255, 0 */
#define TFT_RED 0xF800 /* 255, 0, 0 */
#define TFT_WHITE 0xFFFF /* 255, 255, 255 */


実装

16Bit Colorと24Bit Colorとは、以下の式の関係がある。

uint16_t color = ((red>>3)<<11) | ((green>>2)<<5) | (blue>>3);

この式を組み入れた関数を用意すれば、

直感的にわかりやすい、24Bit color(8Bit color x 3channel)で、色を指定できる。

#include <M5Stack.h>

uint16_t getColor(uint8_t red, uint8_t green, uint8_t blue){
return ((red>>3)<<11) | ((green>>2)<<5) | (blue>>3);
}

void setup() {
M5.begin();
M5.Lcd.fillScreen(getColor(255,0,0));
//M5.Lcd.fillScreen(0xF800);
//M5.Lcd.fillScreen(TFT_RED);
}

void loop(void) {
delay(100);
}


参考

C++ defined 16bit (high) color

https://stackoverflow.com/questions/13720937/c-defined-16bit-high-color