04.T-Watch S3 plusでlv_buttonmatrixテスト


04.T-Watch S3 plusでlv_buttonmatrixテスト

lv_buttonmatrixを使用して、画面の明るさを選択する画面のテストです。画面のボタンをクリックすると明るさを変更します。明るさは0(off),1-255の範囲で、ボタンのテキストがそのまま明るさの変数としました。
Arduino-IDE > ファイル > スケッチ例 > (カスタムライブラリのスケッチ例) LilyGoLib > lvgl > widgets > btnmatrix

lv_example_buttonmatrix_1();
を参考にしました。

スケッチ


// btnmatrix.inoを参考 明るさ可変
// 文字サイズを変更する時は、フォントサイズを変更します。
#include <LilyGoLib.h>           // LilyGoLib 0.1.0(最新)を使用
#include <LV_Helper.h>           // LVGL 9.2.2を使用
const char *bright_buf = "255";  // 明るさ変数 0(off), 1-255

static void event_handler(lv_event_t *e) {  // btnが押された時
  lv_event_code_t code = lv_event_get_code(e);
  // イベントのコードを取得(イベント記述子へのpointer)
  // 戻り値:イベントコード(例 LV_EVENT_CLICKED, LV_EVENT_FOCUSED等)
  lv_obj_t *obj1 = lv_event_get_target_obj(e);
  // イベントの元のターゲットobjを取得(イベント記述子へのpointer)
  // 戻り値:event_codeの元のターゲットへのpointer
  if (code == LV_EVENT_VALUE_CHANGED) {  // 特別イベントウィジェットの値が変更されれば
    uint32_t id = lv_buttonmatrix_get_selected_button(obj1);
    // 最後に押した・離した・フォーカス等アクティブにしたbtnのインデックス
    // (btnマトリックスobjへのpointer)
    // 戻り値:最後に離されたbtnのインデックス
    bright_buf = lv_buttonmatrix_get_button_text(obj1, id);
    // btnのtextを取得(btnのマトリックスobjへのpointer,改行文字を含まないbtnのインデックス)
    // 戻り値:btn_indexボタンのtext btnのtextが明るさの変数になる
  }
}

static const char *btnm_map[] = { "255", "200", "150", "\n",  // 1行目 2行3列にする
                                  "100", "50", "1", "" };     // ボタンmap 最後に""が必要

void setup() {
  Serial.begin(115200);       // シリアルモニタの通信速度
  instance.begin();           // LilyGoLibを初期化
  beginLvglHelper(instance);  // LVGLを初期化
  lv_task_handler();

  lv_obj_t *label = lv_label_create(lv_screen_active());  // 画面にlabel追加
  lv_obj_align(label, LV_ALIGN_TOP_MID, 0, 10);
  // objの配置を変更し新座標を設定(配置objへのpointer,配置の種類,配置後のxオフセット,y)
  // 同等 lv_obj_set_align, lv_obj_set_pos
  lv_label_set_text(label, "明るさ設定");  // タイトル表示

  lv_obj_t *btnm1 = lv_buttonmatrix_create(lv_screen_active());  // 画面にボタンmatrix追加
  lv_obj_set_width(btnm1, lv_pct(99));                           // btn枠の幅(%) btnではない
  lv_obj_set_height(btnm1, 180);                                 // btn枠の高さ(px) btnではない
  lv_obj_set_style_text_font(btnm1,
                             &lv_font_montserrat_24, LV_PART_MAIN);  // 英数字 24px
  lv_buttonmatrix_set_map(btnm1, btnm_map);                          // ボタンmapのセット
  lv_obj_align(btnm1, LV_ALIGN_CENTER, 0, 0);                        // 画面中央に配置
  // objの整列を変更し、新座標を設定(objを合わせるためのpointer,アライメントの種類,オフセットx,y)
  // 同等 lv_obj_set_align, lv_obj_set_pos
  lv_obj_add_event_cb(btnm1, event_handler, LV_EVENT_ALL, NULL);  // 押したら上記cb関数へ
  // objにイベントハンドラ関数を追加(objへのpointer,新イベント関数,
  // イベントを呼出すコード,その関数でカスタムデータを使用できます)
}
void loop() {
  lv_task_handler();
  instance.setBrightness(strtol(bright_buf, NULL, 10));  // 明るさ設定 char→int
  // strtol()は、文字列中の数値部分をlongに変換(変換対象の入力文字列を指すポインタ,
  // 変換が完了した位置へのポインタを格納するための引数 不要はNULL, 10進数なら10 16進数なら16)
  delay(5);  // 5mS待つ
}
* flash memory(3.1Mbyte)のうち、スケッチが30%使用。RAM(327kbyte)のうち、global変数が7%使用、local変数で30kbyte使用可能。(1000byte=1kbyteで計算)

次のVerを使用中です。
LilyGoLib 0.1.0
FFat 3.3.5
FS 3.3.5
Wire 3.3.5
SensorLib 0.3.3
SPI 3.3.5
RadioLib 7.1.0
TinyGPSPlus 1.1.0
ESP_I2S 3.3.5
XPowersLib 0.3.1
lvgl 9.2.2
esptool 5.1.0