Adafruit_ST7735ライブラリでaitendo M-Z18SPI-2Pを制御すると、画面右端と下端にゴミが残り、画面左端が欠けてしまいます。
初期化時、initRのパラメータにINITR_GREENTABを指定するとこの現象は無くなりますが、その代わり色の配列がRGBではなくBGRになってしまいます。
ST7735ではMADCTLというコマンドが色表現のRGB/BGR指定を担っており、これをINITR_BLACKTABのときだけ違う値に設定しているのが関数initRの中の最後の部分です。
void Adafruit_ST7735::initR(uint8_t options) {
commonInit(Rcmd1);
if(options == INITR_GREENTAB) {
commandList(Rcmd2green);
colstart = 2;
rowstart = 1;
} else if(options == INITR_144GREENTAB) {
_height = ST7735_TFTHEIGHT_144;
commandList(Rcmd2green144);
colstart = 2;
rowstart = 3;
} else {
// colstart, rowstart left at default '0' values
commandList(Rcmd2red);
}
commandList(Rcmd3);
// if black, change MADCTL color filter
if (options == INITR_BLACKTAB) {
writecommand(ST7735_MADCTL);
writedata(0xC0);
}
tabcolor = options;
}
これをINITR_GREENTABでも実行するように変更すれば、色がRGBの並びになります。
ただし、本家のINITR_GREENTABが違う動作になるのも困るので、新しくINITR_BLUETABを定義しました。
まずAdafruit_ST7735.hに以下の定義を追加します。(赤字部分)
// some flags for initR() :(
#define INITR_GREENTAB 0x0
#define INITR_REDTAB 0x1
#define INITR_BLACKTAB 0x2
#define INITR_BLUETAB 0x3
#define INITR_18GREENTAB INITR_GREENTAB
#define INITR_18REDTAB INITR_REDTAB
#define INITR_18BLACKTAB INITR_BLACKTAB
#define INITR_144GREENTAB 0x1
そして、Adafruit_ST7735.cppのinitR関数を修正し、BLUETABではGREENTABの初期化+BLACKTAB用追加コードを実行するようにします。
void Adafruit_ST7735::initR(uint8_t options) {
commonInit(Rcmd1);
if((options == INITR_GREENTAB) || (options == \
INITR_BLUETAB)) {
commandList(Rcmd2green);
colstart = 2;
rowstart = 1;
} else if(options == INITR_144GREENTAB) {
_height = ST7735_TFTHEIGHT_144;
commandList(Rcmd2green144);
colstart = 2;
rowstart = 3;
} else {
// colstart, rowstart left at default '0' values
commandList(Rcmd2red);
}
commandList(Rcmd3);
// if black, change MADCTL color filter
if ((options == INITR_BLACKTAB)|| (options == \
INITR_BLUETAB)) {
writecommand(ST7735_MADCTL);
writedata(0xC0);
}
tabcolor = options;
}
これで、ノイズなし、かつ正しい色での表示ができるようになります。
(もちろん、setup()の中でinitRの引数をINITR_BLUETABにする必要があります。)
なお、以下のページにST7735の仕様の解説があり、参考になります。
・修正後のライブラリ+aitendo M-Z18SPI-2Pでgraphicstest
ゴミが消え、画面の左端が見えるようになりました。
コメント