#include M5GFX display; //#include //M5UnitOLED display; // default setting //M5UnitOLED display ( 21, 22, 400000 ); // SDA, SCL, FREQ //#include //M5UnitLCD display; // default setting //M5UnitLCD display ( 21, 22, 400000 ); // SDA, SCL, FREQ //#include //M5UnitGLASS2 display; // default setting //M5UnitGLASS2 display ( 21, 22, 400000 ); // SDA, SCL, FREQ //#include //M5AtomDisplay display; M5Canvas canvas(&display); static constexpr char text[] = "Hello world ! こんにちは世界! this is long long string sample. 寿限無、寿限無、五劫の擦り切れ、海砂利水魚の、水行末・雲来末・風来末、喰う寝る処に住む処、藪ら柑子の藪柑子、パイポ・パイポ・パイポのシューリンガン、シューリンガンのグーリンダイ、グーリンダイのポンポコピーのポンポコナの、長久命の長助"; static constexpr size_t textlen = sizeof(text) / sizeof(text[0]); int textpos = 0; int scrollstep = 2; void setup(void) { display.begin(); display.setColorDepth(8); if (display.isEPD()) { scrollstep = 16; display.setEpdMode(epd_mode_t::epd_fastest); display.invertDisplay(true); display.clear(TFT_BLACK); } if (display.width() < display.height()) { display.setRotation(display.getRotation() ^ 1); } canvas.setColorDepth(1); // mono color canvas.setFont(&fonts::lgfxJapanMinchoP_32); canvas.setTextWrap(false); canvas.setTextSize(2); canvas.createSprite(display.width() + 64, 72); } void loop(void) { int32_t cursor_x = canvas.getCursorX() - scrollstep; if (cursor_x <= 0) { textpos = 0; cursor_x = display.width(); } canvas.setCursor(cursor_x, 0); canvas.scroll(-scrollstep, 0); while (textpos < textlen && cursor_x <= display.width()) { canvas.print(text[textpos++]); cursor_x = canvas.getCursorX(); } display.waitDisplay(); int y = (display.height() - canvas.height()) >> 1; /* display.copyRect(0, y, display.width(), canvas.height(), scrollstep, y); display.setClipRect(display.width()-scrollstep, y, scrollstep, canvas.height()); canvas.pushSprite(&display, 0, (display.height() - canvas.height()) >> 1); display.clearClipRect(); /*/ canvas.pushSprite(&display, 0, y); //*/ }