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
