Using typedef-name 'using LGFX = class lgfx::v1::LGFX' after 'class'

Hi all.
the example of 2_user_setting of LovyanGFX.hpp works well. it used a class:
class LGFX : public lgfx::LGFX_Device
to do the SPI device configuration.

I got compiling error of topic when copied the class to another sketch, why and how to fix?
Thanks
Adam


#include <LovyanGFX.hpp>

// ESP32でLovyanGFXを独自設定で利用する場合の設定例

/// 独自の設定を行うクラスを、LGFX_Deviceから派生して作成します。
class LGFX : public lgfx::LGFX_Device
{
/*
 クラス名は"LGFX"から別の名前に変更しても構いません。
 AUTODETECTと併用する場合は"LGFX"は使用されているため、LGFX以外の名前に変更してください。
 また、複数枚のパネルを同時使用する場合もそれぞれに異なる名前を付けてください。
 ※ クラス名を変更する場合はコンストラクタの名前も併せて同じ名前に変更が必要です。

 名前の付け方は自由に決めて構いませんが、設定が増えた場合を想定し、
 例えばESP32 DevKit-CでSPI接続のILI9341の設定を行った場合、
  LGFX_DevKitC_SPI_ILI9341
 のような名前にし、ファイル名とクラス名を一致させておくことで、利用時に迷いにくくなります。
//*/


// 接続するパネルの型にあったインスタンスを用意します。
//lgfx::Panel_GC9A01      _panel_instance;
//lgfx::Panel_GDEW0154M09 _panel_instance;
//lgfx::Panel_HX8357B     _panel_instance;
//lgfx::Panel_HX8357D     _panel_instance;
//lgfx::Panel_ILI9163     _panel_instance;
  lgfx::Panel_ILI9341     _panel_instance;
//lgfx::Panel_ILI9342     _panel_instance;
//lgfx::Panel_ILI9481     _panel_instance;
//lgfx::Panel_ILI9486     _panel_instance;
//lgfx::Panel_ILI9488     _panel_instance;
//lgfx::Panel_IT8951      _panel_instance;
//lgfx::Panel_RA8875      _panel_instance;
//lgfx::Panel_SH110x      _panel_instance; // SH1106, SH1107
//lgfx::Panel_SSD1306     _panel_instance;
//lgfx::Panel_SSD1327     _panel_instance;
//lgfx::Panel_SSD1331     _panel_instance;
//lgfx::Panel_SSD1351     _panel_instance; // SSD1351, SSD1357
//lgfx::Panel_SSD1963     _panel_instance;
//lgfx::Panel_ST7735      _panel_instance;
//lgfx::Panel_ST7735S     _panel_instance;
//lgfx::Panel_ST7789      _panel_instance;
//lgfx::Panel_ST7796      _panel_instance;


// パネルを接続するバスの種類にあったインスタンスを用意します。
  lgfx::Bus_SPI        _bus_instance;   // SPIバスのインスタンス
//lgfx::Bus_I2C        _bus_instance;   // I2Cバスのインスタンス
//lgfx::Bus_Parallel8  _bus_instance;   // 8ビットパラレルバスのインスタンス

// バックライト制御が可能な場合はインスタンスを用意します。(必要なければ削除)
  lgfx::Light_PWM     _light_instance;

// タッチスクリーンの型にあったインスタンスを用意します。(必要なければ削除)
  lgfx::Touch_FT5x06           _touch_instance; // FT5206, FT5306, FT5406, FT6206, FT6236, FT6336, FT6436
//lgfx::Touch_GSL1680E_800x480 _touch_instance; // GSL_1680E, 1688E, 2681B, 2682B
//lgfx::Touch_GSL1680F_800x480 _touch_instance;
//lgfx::Touch_GSL1680F_480x272 _touch_instance;
//lgfx::Touch_GSLx680_320x320  _touch_instance;
//lgfx::Touch_GT911            _touch_instance;
//lgfx::Touch_STMPE610         _touch_instance;
//lgfx::Touch_TT21xxx          _touch_instance; // TT21100
//lgfx::Touch_XPT2046          _touch_instance;

public:

  // コンストラクタを作成し、ここで各種設定を行います。
  // クラス名を変更した場合はコンストラクタも同じ名前を指定してください。
  LGFX(void)
  {
    { // バス制御の設定を行います。
      auto cfg = _bus_instance.config();    // バス設定用の構造体を取得します。

// SPIバスの設定
      cfg.spi_host = VSPI_HOST;     // 使用するSPIを選択  ESP32-S2,C3 : SPI2_HOST or SPI3_HOST / ESP32 : VSPI_HOST or HSPI_HOST
      // ※ ESP-IDFバージョンアップに伴い、VSPI_HOST , HSPI_HOSTの記述は非推奨になるため、エラーが出る場合は代わりにSPI2_HOST , SPI3_HOSTを使用してください。
      cfg.spi_mode = 0;             // SPI通信モードを設定 (0 ~ 3)
      cfg.freq_write = 40000000;    // 送信時のSPIクロック (最大80MHz, 80MHzを整数で割った値に丸められます)
      cfg.freq_read  = 16000000;    // 受信時のSPIクロック
      cfg.spi_3wire  = true;        // 受信をMOSIピンで行う場合はtrueを設定
      cfg.use_lock   = true;        // トランザクションロックを使用する場合はtrueを設定
      cfg.dma_channel = SPI_DMA_CH_AUTO; // 使用するDMAチャンネルを設定 (0=DMA不使用 / 1=1ch / 2=ch / SPI_DMA_CH_AUTO=自動設定)
      // ※ ESP-IDFバージョンアップに伴い、DMAチャンネルはSPI_DMA_CH_AUTO(自動設定)が推奨になりました。1ch,2chの指定は非推奨になります。
      cfg.pin_sclk = 18;            // SPIのSCLKピン番号を設定
      cfg.pin_mosi = 23;            // SPIのMOSIピン番号を設定
      cfg.pin_miso = 19;            // SPIのMISOピン番号を設定 (-1 = disable)
      cfg.pin_dc   = 27;            // SPIのD/Cピン番号を設定  (-1 = disable)
     // SDカードと共通のSPIバスを使う場合、MISOは省略せず必ず設定してください。
//*/
/*
// I2Cバスの設定
      cfg.i2c_port    = 0;          // 使用するI2Cポートを選択 (0 or 1)
      cfg.freq_write  = 400000;     // 送信時のクロック
      cfg.freq_read   = 400000;     // 受信時のクロック
      cfg.pin_sda     = 21;         // SDAを接続しているピン番号
      cfg.pin_scl     = 22;         // SCLを接続しているピン番号
      cfg.i2c_addr    = 0x3C;       // I2Cデバイスのアドレス
//*/
/*
// 8ビットパラレルバスの設定
      cfg.i2s_port = I2S_NUM_0;     // 使用するI2Sポートを選択 (I2S_NUM_0 or I2S_NUM_1) (ESP32のI2S LCDモードを使用します)
      cfg.freq_write = 20000000;    // 送信クロック (最大20MHz, 80MHzを整数で割った値に丸められます)
      cfg.pin_wr =  4;              // WR を接続しているピン番号
      cfg.pin_rd =  2;              // RD を接続しているピン番号
      cfg.pin_rs = 15;              // RS(D/C)を接続しているピン番号
      cfg.pin_d0 = 12;              // D0を接続しているピン番号
      cfg.pin_d1 = 13;              // D1を接続しているピン番号
      cfg.pin_d2 = 26;              // D2を接続しているピン番号
      cfg.pin_d3 = 25;              // D3を接続しているピン番号
      cfg.pin_d4 = 17;              // D4を接続しているピン番号
      cfg.pin_d5 = 16;              // D5を接続しているピン番号
      cfg.pin_d6 = 27;              // D6を接続しているピン番号
      cfg.pin_d7 = 14;              // D7を接続しているピン番号
//*/

      _bus_instance.config(cfg);    // 設定値をバスに反映します。
      _panel_instance.setBus(&_bus_instance);      // バスをパネルにセットします。
    }

    { // 表示パネル制御の設定を行います。
      auto cfg = _panel_instance.config();    // 表示パネル設定用の構造体を取得します。

      cfg.pin_cs           =    14;  // CSが接続されているピン番号   (-1 = disable)
      cfg.pin_rst          =    33;  // RSTが接続されているピン番号  (-1 = disable)
      cfg.pin_busy         =    -1;  // BUSYが接続されているピン番号 (-1 = disable)

      // ※ 以下の設定値はパネル毎に一般的な初期値が設定されていますので、不明な項目はコメントアウトして試してみてください。

      cfg.panel_width      =   240;  // 実際に表示可能な幅
      cfg.panel_height     =   320;  // 実際に表示可能な高さ
      cfg.offset_x         =     0;  // パネルのX方向オフセット量
      cfg.offset_y         =     0;  // パネルのY方向オフセット量
      cfg.offset_rotation  =     0;  // 回転方向の値のオフセット 0~7 (4~7は上下反転)
      cfg.dummy_read_pixel =     8;  // ピクセル読出し前のダミーリードのビット数
      cfg.dummy_read_bits  =     1;  // ピクセル以外のデータ読出し前のダミーリードのビット数
      cfg.readable         =  true;  // データ読出しが可能な場合 trueに設定
      cfg.invert           = false;  // パネルの明暗が反転してしまう場合 trueに設定
      cfg.rgb_order        = false;  // パネルの赤と青が入れ替わってしまう場合 trueに設定
      cfg.dlen_16bit       = false;  // 16bitパラレルやSPIでデータ長を16bit単位で送信するパネルの場合 trueに設定
      cfg.bus_shared       =  true;  // SDカードとバスを共有している場合 trueに設定(drawJpgFile等でバス制御を行います)

// 以下はST7735やILI9163のようにピクセル数が可変のドライバで表示がずれる場合にのみ設定してください。
//    cfg.memory_width     =   240;  // ドライバICがサポートしている最大の幅
//    cfg.memory_height    =   320;  // ドライバICがサポートしている最大の高さ

      _panel_instance.config(cfg);
    }

//*
    { // バックライト制御の設定を行います。(必要なければ削除)
      auto cfg = _light_instance.config();    // バックライト設定用の構造体を取得します。

      cfg.pin_bl = 32;              // バックライトが接続されているピン番号
      cfg.invert = false;           // バックライトの輝度を反転させる場合 true
      cfg.freq   = 44100;           // バックライトのPWM周波数
      cfg.pwm_channel = 7;          // 使用するPWMのチャンネル番号

      _light_instance.config(cfg);
      _panel_instance.setLight(&_light_instance);  // バックライトをパネルにセットします。
    }
//*/

//*
    { // タッチスクリーン制御の設定を行います。(必要なければ削除)
      auto cfg = _touch_instance.config();

      cfg.x_min      = 0;    // タッチスクリーンから得られる最小のX値(生の値)
      cfg.x_max      = 239;  // タッチスクリーンから得られる最大のX値(生の値)
      cfg.y_min      = 0;    // タッチスクリーンから得られる最小のY値(生の値)
      cfg.y_max      = 319;  // タッチスクリーンから得られる最大のY値(生の値)
      cfg.pin_int    = 38;   // INTが接続されているピン番号
      cfg.bus_shared = true; // 画面と共通のバスを使用している場合 trueを設定
      cfg.offset_rotation = 0;// 表示とタッチの向きのが一致しない場合の調整 0~7の値で設定

// SPI接続の場合
      cfg.spi_host = VSPI_HOST;// 使用するSPIを選択 (HSPI_HOST or VSPI_HOST)
      cfg.freq = 1000000;     // SPIクロックを設定
      cfg.pin_sclk = 18;     // SCLKが接続されているピン番号
      cfg.pin_mosi = 23;     // MOSIが接続されているピン番号
      cfg.pin_miso = 19;     // MISOが接続されているピン番号
      cfg.pin_cs   =  5;     //   CSが接続されているピン番号

// I2C接続の場合
      cfg.i2c_port = 1;      // 使用するI2Cを選択 (0 or 1)
      cfg.i2c_addr = 0x38;   // I2Cデバイスアドレス番号
      cfg.pin_sda  = 23;     // SDAが接続されているピン番号
      cfg.pin_scl  = 32;     // SCLが接続されているピン番号
      cfg.freq = 400000;     // I2Cクロックを設定

      _touch_instance.config(cfg);
      _panel_instance.setTouch(&_touch_instance);  // タッチスクリーンをパネルにセットします。
    }
//*/

    setPanel(&_panel_instance); // 使用するパネルをセットします。
  }
};

// 準備したクラスのインスタンスを作成します。
LGFX display;

void setup(void)
{
  // SPIバスとパネルの初期化を実行すると使用可能になります。
  display.init();

  display.setTextSize((std::max(display.width(), display.height()) + 255) >> 8);

  // タッチが使用可能な場合のキャリブレーションを行います。(省略可)
  if (display.touch())
  {
    if (display.width() < display.height()) display.setRotation(display.getRotation() ^ 1);

    // 画面に案内文章を描画します。
    display.setTextDatum(textdatum_t::middle_center);
    display.drawString("touch the arrow marker.", display.width()>>1, display.height() >> 1);
    display.setTextDatum(textdatum_t::top_left);

    // タッチを使用する場合、キャリブレーションを行います。画面の四隅に表示される矢印の先端を順にタッチしてください。
    std::uint16_t fg = TFT_WHITE;
    std::uint16_t bg = TFT_BLACK;
    if (display.isEPD()) std::swap(fg, bg);
    display.calibrateTouch(nullptr, fg, bg, std::max(display.width(), display.height()) >> 3);
  }

  display.fillScreen(TFT_BLACK);
}

uint32_t count = ~0;
void loop(void)
{
  display.startWrite();
  display.setRotation(++count & 7);
  display.setColorDepth((count & 8) ? 16 : 24);

  display.setTextColor(TFT_WHITE);
  display.drawNumber(display.getRotation(), 16, 0);

  display.setTextColor(0xFF0000U);
  display.drawString("R", 30, 16);
  display.setTextColor(0x00FF00U);
  display.drawString("G", 40, 16);
  display.setTextColor(0x0000FFU);
  display.drawString("B", 50, 16);

  display.drawRect(30,30,display.width()-60,display.height()-60,count*7);
  display.drawFastHLine(0, 0, 10);

  display.endWrite();

  int32_t x, y;
  if (display.getTouch(&x, &y)) {
    display.fillRect(x-2, y-2, 5, 5, count*7);
  }
}

ERROR:

Arduino:1.8.19 (Windows 7), 开发板:"ESP32 Dev Module, Disabled, Disabled, Default 4MB with spiffs (1.2MB APP/1.5MB SPIFFS), 240MHz (WiFi/BT), QIO, 80MHz, 4MB (32Mb), 921600, Core 1, Core 1, None, Disabled"

In file included from c:\users\hua.dellv-pc\documents\arduino\libraries\lvgl-8.3.9\src/misc/lv_log.h:16,

                 from c:\users\hua.dellv-pc\documents\arduino\libraries\lvgl-8.3.9\lvgl.h:25,

                 from C:\Users\HUA.DELLV-PC\Documents\Arduino\libraries\lvgl-8.3.9\src/lvgl.h:17,

                 from C:\Users\HUA.DELLV-PC\Documents\Arduino\ESP32_LovyanGFX_T1\ESP32_LovyanGFX_T1.ino:11:

c:\users\hua.dellv-pc\documents\arduino\libraries\lvgl-8.3.9\src\lv_conf_internal.h:46:120: note: #pragma message: Possible failure to include lv_conf.h, please read the comment in this file if you get errors

         #pragma message("Possible failure to include lv_conf.h, please read the comment in this file if you get errors")

                                                                                                                        ^

In file included from C:\Users\HUA.DELLV-PC\Documents\Arduino\ESP32_LovyanGFX_T1\ESP32_LovyanGFX_T1.ino:39:

LGFXconfig.h:13:8: error: using typedef-name 'using LGFX = class lgfx::v1::LGFX' after 'class'

 class  LGFX : public lgfx::LGFX_Device

        ^~~~

In file included from C:\Users\HUA.DELLV-PC\Documents\Arduino\libraries\LovyanGFX-master\src/lgfx/v1_autodetect/common.hpp:30,

                 from C:\Users\HUA.DELLV-PC\Documents\Arduino\libraries\LovyanGFX-master\src/LGFX_AUTODETECT.hpp:20,

                 from C:\Users\HUA.DELLV-PC\Documents\Arduino\libraries\LovyanGFX-master\src/LovyanGFX.hpp:35,

                 from C:\Users\HUA.DELLV-PC\Documents\Arduino\ESP32_LovyanGFX_T1\ESP32_LovyanGFX_T1.ino:10:

C:\Users\HUA.DELLV-PC\Documents\Arduino\libraries\LovyanGFX-master\src/lgfx/v1_autodetect/LGFX_AutoDetect_ESP32_all.hpp:3408:24: note: 'using LGFX = class lgfx::v1::LGFX' has a previous declaration here

 using LGFX = lgfx::LGFX;

                        ^

C:\Users\HUA.DELLV-PC\Documents\Arduino\ESP32_LovyanGFX_T1\ESP32_LovyanGFX_T1.ino: In function 'void setup()':

ESP32_LovyanGFX_T1:107:3: error: 'lv_demo_music' was not declared in this scope

   lv_demo_music();

   ^~~~~~~~~~~~~

C:\Users\HUA.DELLV-PC\Documents\Arduino\ESP32_LovyanGFX_T1\ESP32_LovyanGFX_T1.ino:107:3: note: suggested alternative: 'lv_mem_test'

   lv_demo_music();

   ^~~~~~~~~~~~~

   lv_mem_test

exit status 1

using typedef-name 'using LGFX = class lgfx::v1::LGFX' after 'class'

the modified sketch resulted compiling error:

/* https://www.youtube.com/watch?v=IyRWrzWhHSQ  
 *  https://pastebin.com/Hz0TJeSL
 *  
 *  
 *  
 */

#define LGFX_USE_V1
#define LGFX_AUTODETECT
#include <LovyanGFX.hpp>
#include <lvgl.h>
#include <demos/lv_demos.h> /* <-- read more about this below, it's important */
 
/* To be able to include the demo folder successfully you need to go into your
   Arduino libraries folder, then "lvgl" and from there move the "demos" folder
   into the "src" folder. You also need to set the following settings in the
   lvgl config file (lv_conf.h):
 
   #define LV_TICK_CUSTOM          1
   #define LV_USE_PERF_MONITOR     1
   #define LV_FONT_MONTSERRAT_12   1
   #define LV_FONT_MONTSERRAT_14   1
   #define LV_FONT_MONTSERRAT_16   1
   #define LV_USE_DEMO_MUSIC       1
   #define LV_DEMO_MUSIC_SQUARE    1
   #define LV_DEMO_MUSIC_AUTO_PLAY 1 */
 
 
/* You have to put your Lovyan GFX config here, create your config
   using the example from LovyanGFX "2_user_setting" */
   //........................... Lovyan GFX config
#define PIN_NUM_MISO 19
#define PIN_NUM_MOSI 23
#define PIN_NUM_CLK  18
#define PIN_NUM_CS   5
#define PIN_NUM_DC   4
#define PIN_NUM_RST  16

//#include "LGFXconfig.h"

   //........................... Lovyan GFX config

 

/*
   /* To be able to include the demo folder successfully you need to go into your
   Arduino libraries folder, then "lvgl" and from there move the "demos" folder
   into the "src" folder. You also need to set the following settings in the
   lvgl config file (lv_conf.h):


*/
/// class LGFX : public lgfx::LGFX_Device  // ERROR: using typedef-name 'using LGFX = class lgfx::v1::LGFX' after 'class'

class  LGFX : public lgfx::LGFX_Device
{

    lgfx::Panel_ILI9341     _panel_instance;

    // パネルを接続するバスの種類にあったインスタンスを用意します。
    lgfx::Bus_SPI        _bus_instance;   // SPIバスのインスタンス
    //lgfx::Bus_I2C        _bus_instance;   // I2Cバスのインスタンス
    //lgfx::Bus_Parallel8  _bus_instance;   // 8ビットパラレルバスのインスタンス

    lgfx::Light_PWM     _light_instance;
    lgfx::Touch_XPT2046          _touch_instance;

  public:

    LGFX(void)
    {
      {
        auto cfg = _bus_instance.config();    // バス設定用の構造体を取得します。

        // SPIバスの設定
        cfg.spi_host = HSPI_HOST; // VSPI_HOST   // 使用するSPIを選択  ESP32-S2,C3 : SPI2_HOST or SPI3_HOST / ESP32 : VSPI_HOST or HSPI_HOST
        // ※ ESP-IDFバージョンアップに伴い、VSPI_HOST , HSPI_HOSTの記述は非推奨になるため、エラーが出る場合は代わりにSPI2_HOST , SPI3_HOSTを使用してください。
        cfg.spi_mode = 0;             // SPI通信モードを設定 (0 ~ 3)
        cfg.freq_write = 40000000;    // 送信時のSPIクロック (最大80MHz, 80MHzを整数で割った値に丸められます)
        cfg.freq_read  = 16000000;    // 受信時のSPIクロック
        cfg.spi_3wire  = true;        // 受信をMOSIピンで行う場合はtrueを設定
        cfg.use_lock   = true;        // トランザクションロックを使用する場合はtrueを設定

        cfg.dma_channel = 1;

        cfg.pin_sclk = PIN_NUM_CLK ;  //18          // SPIのSCLKピン番号を設定
        cfg.pin_mosi = PIN_NUM_MOSI;  //23          // SPIのMOSIピン番号を設定
        cfg.pin_miso = PIN_NUM_MISO;  //19          // SPIのMISOピン番号を設定 (-1 = disable)
        cfg.pin_dc   = PIN_NUM_DC;    // 4        // SPIのD/Cピン番号を設定  (-1 = disable)

        _bus_instance.config(cfg);    // 設定値をバスに反映します。
        _panel_instance.setBus(&_bus_instance);      // バスをパネルにセットします。
      }

      { // 表示パネル制御の設定を行います。
        auto cfg = _panel_instance.config();    // 表示パネル設定用の構造体を取得します。

        cfg.pin_cs           =    PIN_NUM_CS; // 5  // CSが接続されているピン番号   (-1 = disable)
        cfg.pin_rst          =    PIN_NUM_RST; // 16  // RSTが接続されているピン番号  (-1 = disable)
        cfg.pin_busy         =    -1;  // BUSYが接続されているピン番号 (-1 = disable)

        // ※ 以下の設定値はパネル毎に一般的な初期値が設定されていますので、不明な項目はコメントアウトして試してみてください。

        cfg.panel_width      =   240;  // 実際に表示可能な幅
        cfg.panel_height     =   320;  // 実際に表示可能な高さ
        cfg.offset_x         =     0;  // パネルのX方向オフセット量
        cfg.offset_y         =     0;  // パネルのY方向オフセット量
        cfg.offset_rotation  =     0;  // 回転方向の値のオフセット 0~7 (4~7は上下反転)
        cfg.dummy_read_pixel =     8;  // ピクセル読出し前のダミーリードのビット数
        cfg.dummy_read_bits  =     1;  // ピクセル以外のデータ読出し前のダミーリードのビット数
        cfg.readable         =  true;  // データ読出しが可能な場合 trueに設定
        cfg.invert           = false;  // パネルの明暗が反転してしまう場合 trueに設定
        cfg.rgb_order        = false;  // パネルの赤と青が入れ替わってしまう場合 trueに設定
        cfg.dlen_16bit       = false;  // 16bitパラレルやSPIでデータ長を16bit単位で送信するパネルの場合 trueに設定
        cfg.bus_shared       =  true;  // SDカードとバスを共有している場合 trueに設定(drawJpgFile等でバス制御を行います)

        _panel_instance.config(cfg);
      }


      { // バックライト制御の設定を行います。(必要なければ削除)
        auto cfg = _light_instance.config();    // バックライト設定用の構造体を取得します。

        cfg.pin_bl = 32;              // バックライトが接続されているピン番号
        cfg.invert = false;           // バックライトの輝度を反転させる場合 true
        cfg.freq   = 44100;           // バックライトのPWM周波数
        cfg.pwm_channel = 7;          // 使用するPWMのチャンネル番号

        _light_instance.config(cfg);
        _panel_instance.setLight(&_light_instance);  // バックライトをパネルにセットします。
      }

      { // タッチスクリーン制御の設定を行います。(必要なければ削除)
        auto cfg = _touch_instance.config();

        cfg.x_min      = 0;    // タッチスクリーンから得られる最小のX値(生の値)
        cfg.x_max      = 239;  // タッチスクリーンから得られる最大のX値(生の値)
        cfg.y_min      = 0;    // タッチスクリーンから得られる最小のY値(生の値)
        cfg.y_max      = 319;  // タッチスクリーンから得られる最大のY値(生の値)
        cfg.pin_int    = -1;   // INTが接続されているピン番号
        cfg.bus_shared = true; // 画面と共通のバスを使用している場合 trueを設定
        cfg.offset_rotation = 0;// 表示とタッチの向きのが一致しない場合の調整 0~7の値で設定

        // SPI接続の場合

        cfg.spi_host = HSPI_HOST;// 使用するSPIを選択 (HSPI_HOST or VSPI_HOST)
        cfg.freq = 1000000;     // SPIクロックを設定
        cfg.pin_sclk = PIN_NUM_CLK;     // SCLKが接続されているピン番号
        cfg.pin_mosi = PIN_NUM_MOSI;     // MOSIが接続されているピン番号
        cfg.pin_miso = PIN_NUM_MISO;     // MISOが接続されているピン番号
        cfg.pin_cs   =  15;     //   CSが接続されているピン番号

        // I2C接続の場合
        cfg.i2c_port = 1;      // 使用するI2Cを選択 (0 or 1)
        cfg.i2c_addr = 0x38;   // I2Cデバイスアドレス番号
        cfg.pin_sda  = 23;     // SDAが接続されているピン番号
        cfg.pin_scl  = 32;     // SCLが接続されているピン番号
        cfg.freq = 400000;     // I2Cクロックを設定

        _touch_instance.config(cfg);
        _panel_instance.setTouch(&_touch_instance);  // タッチスクリーンをパネルにセットします。
      }
      setPanel(&_panel_instance); // 使用するパネルをセットします。
    }
};



static LGFX tft;
 
/* Change these lines to match your display resolution */
static const uint32_t screenWidth = 320;
static const uint32_t screenHeight = 240;
static lv_disp_draw_buf_t draw_buf;
static lv_color_t buf[screenWidth * 10];
 
/* Write to the display */
void my_disp_flush(lv_disp_drv_t *disp, const lv_area_t *area, lv_color_t *color_p) {
  uint32_t w = (area->x2 - area->x1 + 1);
  uint32_t h = (area->y2 - area->y1 + 1);
 
  tft.startWrite();
  tft.setAddrWindow(area->x1, area->y1, w, h);
  tft.writePixelsDMA((lgfx::rgb565_t *)&color_p->full, w * h);
 
  lv_disp_flush_ready(disp);
}
 
/* Read the touch panel if your display has one attached */
void my_touchpad_read(lv_indev_drv_t *indev_driver, lv_indev_data_t *data) {
  uint16_t touchX, touchY;
  bool touched = tft.getTouch(&touchX, &touchY);
  if (!touched) {
    data->state = LV_INDEV_STATE_REL;
  } else {
    data->state = LV_INDEV_STATE_PR;
 
    data->point.x = touchX;
    data->point.y = touchY;
  }
}
 
void setup() {
  Serial.begin(115200);
 
  tft.begin();
  tft.setRotation(1);
  tft.setBrightness(255);
 
  /*
  If your touch panel is a resistive touch panel or a type that needs calibration,
  please call the calibration function or set the calibration data here
  */
 
  lv_init();
  lv_disp_draw_buf_init(&draw_buf, buf, NULL, screenWidth * 10);
 
  static lv_disp_drv_t disp_drv;
  lv_disp_drv_init(&disp_drv);
 
  disp_drv.hor_res = screenWidth;
  disp_drv.ver_res = screenHeight;
  disp_drv.flush_cb = my_disp_flush;
  disp_drv.draw_buf = &draw_buf;
  lv_disp_drv_register(&disp_drv);
 
  static lv_indev_drv_t indev_drv;
  lv_indev_drv_init(&indev_drv);
  indev_drv.type = LV_INDEV_TYPE_POINTER;
  indev_drv.read_cb = my_touchpad_read;
  lv_indev_drv_register(&indev_drv);
 
  lv_demo_music();
}
 
void loop() {
  /* Empty loop! Using FreeRTOS tasks instead of this loop */
}


That message is pretty clear. Did you include a file called lv_conf.h?

Did you follow the advice and read the comment in the file?

1 Like

Thanks.
I did all comments asked, no lucky.

the lv_conf.h located in scr of lvgl.h, do I still need:
#include lv_conf.h?

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.