docs/README_he.md
<a href="https://github.com/sponsors/lvgl" target="_blank"></a>
<p align="right"> <b>ืขืืจืืช</b> | <a href="./docs/README_zh.md">ไธญๆ</a> | <a href="./docs/README_pt_BR.md">Portuguรชs do Brasil</a> | <a href="./docs/README_jp.md">ๆฅๆฌ่ช</a> | <a href="./README.md">English</a> </p> <p align="center"> </p> <h1 align="center">ืกืคืจืืืช ืืจืคืืงื ืงืื ืืจื-ืฉืืืืฉืืช</h1> <div align="center">ย
</div> <p align="center"> <a href="https://lvgl.io" title="ืขืืื ืืืืช ืฉื LVGL">ืืชืจ</a> | <a href="https://pro.lvgl.io" title="ืขืืจื UI ืืืืกืก XML ืฉื LVGL Pro">ืขืืจื LVGL Pro</a> | <a href="https://docs.lvgl.io/" title="ืชืืขืื ืืคืืจื ืขื ืืืชืจ ืึพ100 ืืืืืืืช">ืชืืขืื</a> | <a href="https://forum.lvgl.io" title="ืงืื ืขืืจื ืืขืืืจ ืืืืจืื">ืคืืจืื</a> | <a href="https://lvgl.io/demos" title="ืืืืืืช ืฉืจืฆืืช ืืืคืืคื">ืืืืืืืช</a> | <a href="https://lvgl.io/services" title="ืขืืฆืื ืืจืคื, ืืืฉืื UI ืืืืขืืฅ">ืฉืืจืืชืื</a> </p>LVGL ืืื ืกืคืจืืืช UI ืืื ืืืช ืืงืื ืคืชืื ืฉืืืคืฉืจืช ืืืฆืืจ ืืืฉืงื ืืฉืชืืฉ ืืจืคืืื ืืื MCU ืื MPU ืืื ืกืคืง ืืขื ืื ืคืืืคืืจืื.
ืืจืืฉืืช: ืึพLVGL ืืื ืชืืืช ืืืฆืื ืืช, ืื ืฉืืงื ืขื ืืืืืจ ืืื ืืขื ืืืืจื ื, ืืื ืึพMCU ืงืื ืื ืืขื MPU ืืืืกืกื Linux ืืจืืื ืืืืืช ืขื ืชืืืืช 3D. ืขืืืจ UI ืคืฉืื ืืจืืฉืื ืจืง 100kB RAM, ื200โ300kB Flash ืืืืืจ ืจืื ืืืจ ืืืืื 1/10 ืืืืื ืืืกื.
ืืืชืืื ืืืืจื: ืืืจื ืคืจืืืงื ืืืื ืึพVSCode,โ Eclipse ืื ืื ืกืืืืช ืคืืชืื ืืืจืช ืื ืกื ืืช LVGL ืขื ืืืืฉื. ืงืื ืึพUI ืฉื LVGL ืืืชื ืชืืื ืืคืืืคืืจืื, ืืืื ื ืืชื ืืืฉืชืืฉ ืืืืชื ืงืื ืื ืืืขืืื ืืฉืืืฆืื.
LVGL Pro ืืื ืืืจื ืืืื ืืื ืืื ืืื, ืืืืงื, ืฉืืชืืฃ ืืืคืฆื ืืืืจื ืืืชืจ ืฉื UI. ืืื ืืืื ืขืืจื XML ืืืฆืืจื ืืืืืืงื ืืืืจื ืฉื ืจืืืืื ืืฉืืืืฉ ืืืืจ, ืืืฆืื ืงืื C ืื ืืขืื ืช ืงืืืฆื XML ืืืื ืจืืฆื. ืืืืข ื ืืกืฃ ืืืชืจ.
ืืื ืืืช ืื ืืืืช
ืืืื'ืืื, ืกืื ืื ืืช, ืคืจืืกืืช ืืขืื
ืึพLVGL ืืื ืชืืืช ืืืฆืื ืืช, ืืืื ื ืืชื ืืงืืคื ืืืชื ืืงืืืช ืืื ืืชืงื. ืืื ืืืื ื ืื ืืื ืืื ืืืืืืช ืจืืื ืืืืขืจืืืช RTOS:
LVGL Pro ืืื ืืืจื ืืืื ืืื ืืื ืืื, ืืืืงื, ืฉืืชืืฃ ืืืคืฆื ืืขืืืื ืฉื UI ืืฉืืืฅ.
ืืื ืืืจืื ืืืจืืขื ืืืื ืืืฉืืืืื ืื ืืื:
ืืืื, ืืืืื ืืืคืฉืจืื ืืื ืืช UI ืืืขืืืืช, ืืืืืง ืืืืื ืืช ืืืฉืชืฃ ืคืขืืื ืขื ืฆืืืชืื ืืืงืืืืช.
ืืืืข ื ืืกืฃ: https://pro.lvgl.io
ืืืจืช LVGL LLC ืืกืคืงืช ืืืืื ืฉืืจืืชืื ืืกืืจืืื ืืกืืืข ืืคืืชืื UI. ืขื ืืืชืจ ืึพ15 ืฉื ืืช ื ืืกืืื ืืชืืื ืืืืฉืงืื ืืืืจืคืืงื, ื ืืื ืืงืื ืืช ืึพUI ืฉื ืืืืฆืจ ืฉืืื ืืจืื ืืืื.
ืขืืื ื ืืืืืืืืช ืฉืื ื ืืขๅ่. ืืืืืข ื ืืกืฃ ืจืื ืืช ืขืืื ืืฉืืจืืชืื.
ืฆืจื ืงืฉืจ ืืกืคืจื ืื ื ืืืฆื ื ืืื ืืขืืืจ.
ืฉืืืื LVGL ืคืฉืื ืืืื. ืืืกืืคื ืืืชื ืืคืจืืืงื ืืงืืืคืื ืืื ืงืืฆืื ืืืจืื.
ืืื ืืืืืืจ, ืืขืชืืงื ืืช lv_conf_template.h ืึพlv_conf.h, ืืคืขืืื ืืช ืึพ#if 0 ืืจืืฉืื ืืืชืืืื ืืช ืืืืืจืืช ืืคื ืืฆืืจื.
(ืืืจื ืืื ืืจืืจืช ืืืืื ืืกืคืงืช.) ื ืืชื ืื ืืืฉืชืืฉ ืึพLVGL ืขื Kconfig ืืฉืืืื.
ืืืืจ ืืื ืืคืฉืจ ืืืชืื ืืช LVGL ืืืืฆืืจ ืืชืงื ื ืชืฆืืื ืืงืื ืื:
#include "lvgl/lvgl.h" /*ืืืืืจื LV_LVGL_H_INCLUDE_SIMPLE ืืื ืืืืื ื-"lvgl.h"*/
#define TFT_HOR_RES 320
#define TFT_VER_RES 240
static uint32_t my_tick_cb(void)
{
return my_get_millisec();
}
static void my_flush_cb(lv_display_t * disp, const lv_area_t * area, uint8_t * px_map)
{
/*ืืชืื ืืช px_map ืืืืืจ ืืืชืืื ืืืืืจ ืืืกืืจืช ืื ืืืงืจ ืืชืฆืืื ืืืืฆืื ื*/
}
static void my_touch_read_cb(lv_indev_t * indev, lv_indev_data_t * data)
{
if(my_touch_is_pressed()) {
data->point.x = touchpad_x;
data->point.y = touchpad_y;
data->state = LV_INDEV_STATE_PRESSED;
} else {
data->state = LV_INDEV_STATE_RELEASED;
}
}
void main(void)
{
my_hardware_init();
/*ืืชืืื LVGL*/
lv_init();
/*ืืืืจืช ืืงืืจ ืืืง ืืืืืืฉื ืืืช ืืื ืฉืึพLVGL ืชืืื ืกืคืืจืช ืืื*/
lv_tick_set_cb(my_tick_cb);
/*ืืฆืืจืช ืชืฆืืื ืืืืกืคืช ืืกืืื ืืืืื'ืืื*/
lv_display_t * display = lv_display_create(TFT_HOR_RES, TFT_VER_RES);
/*ืืืกืคืช ืืืืจื ืจืื ืืืจ
*ืืื ืืืกืืคืื ืืืืจ ืืืงื ืงืื ืืื ืื ืฉื 16 ืกืืืืืช (RGB565)*/
static uint8_t buf[TFT_HOR_RES * TFT_VER_RES / 10 * 2]; /* x2 ืืืื ืขืืืง ืฆืืข 16 ืืื */
lv_display_set_buffers(display, buf, NULL, sizeof(buf), LV_DISPLAY_RENDER_MODE_PARTIAL);
/*ืงืืืืง ืืจืขื ืื ืืชืืื ืื ืืืืืจ ืื ืืชืฆืืื*/
lv_display_set_flush_cb(display, my_flush_cb);
/*ืืฆืืจืช ืืชืงื ืงืื ืืืืข*/
lv_indev_t * indev = lv_indev_create();
lv_indev_set_type(indev, LV_INDEV_TYPE_POINTER);
lv_indev_set_read_cb(indev, my_touch_read_cb);
/*ืืืจืืืืจืื ืืืื ืื, ืืืฆืจืื UI*/
lv_obj_t * label = lv_label_create(lv_screen_active());
lv_label_set_text(label, "Hello world");
lv_obj_center(label);
/*ืืืืืช ืืฉืืืืช ืฉื LVGL*/
while(1) {
lv_timer_handler();
my_sleep_ms(5); /*ืืฉืืื ืงืฆืจื ืืืืจืืช ืขืืืก ืืืขืจืืช*/
}
}
ืืขื 100 ืืืืืืืช ืืืื ืืช ืึพhttps://docs.lvgl.io/master/examples.html
ืืืฆืื ืืืงืืื ืืืื ืื ืืืจืืืื ืืืืืื XML: โhttps://viewer.lvgl.io/
static void button_clicked_cb(lv_event_t * e)
{
printf("Clicked\n");
}
[...]
lv_obj_t * button = lv_button_create(lv_screen_active());
lv_obj_center(button);
lv_obj_add_event_cb(button, button_clicked_cb, LV_EVENT_CLICKED, NULL);
lv_obj_t * label = lv_label_create(button);
lv_label_set_text(label, "Hello from LVGL!");
<screen>
<view>
<lv_button align="center">
<event_cb callback="button_clicked_cb" />
<lv_label text="Hello from LVGL!" />
</lv_button>
</view>
</screen>
static void my_observer_cb(lv_observer_t * observer, lv_subject_t * subject)
{
printf("Slider value: %d\n", lv_subject_get_int(subject));
}
[...]
static lv_subject_t subject_value;
lv_subject_init_int(&subject_value, 35);
lv_subject_add_observer(&subject_value, my_observer_cb, NULL);
lv_style_t style_base;
lv_style_init(&style_base);
lv_style_set_bg_color(&style_base, lv_color_hex(0xff8800));
lv_style_set_bg_opa(&style_base, 255);
lv_style_set_radius(&style_base, 4);
lv_obj_t * slider = lv_slider_create(lv_screen_active());
lv_obj_center(slider);
lv_obj_set_size(slider, lv_pct(80), 16);
lv_obj_add_style(slider, &style_base, LV_PART_INDICATOR);
lv_obj_add_style(slider, &style_base, LV_PART_KNOB);
lv_obj_add_style(slider, &style_base, 0);
lv_obj_set_style_bg_opa(slider, LV_OPA_50, 0);
lv_obj_set_style_border_width(slider, 3, LV_PART_KNOB);
lv_obj_set_style_border_color(slider, lv_color_hex3(0xfff), LV_PART_KNOB);
lv_slider_bind_value(slider, &subject_value);
lv_obj_t * label = lv_label_create(lv_screen_active());
lv_obj_align(label, LV_ALIGN_CENTER, 0, -30);
lv_label_bind_text(label, &subject_value, "Temperature: %d ยฐC");
<screen>
<styles>
<style name="style_base" bg_opa="100%" bg_color="0xff8800" radius="4" />
<style name="style_border" border_color="0xfff" border_width="3" />
</styles>
<view>
<lv_label bind_text="value" bind_text-fmt="Temperature: %d ยฐC" align="center" y="-30" />
<lv_slider align="center" bind_value="value" style_bg_opa="30%">
<style name="style_base" />
<style name="style_base" selector="knob" />
<style name="style_base" selector="indicator" />
<style name="style_border" selector="knob" />
</lv_slider>
</view>
</screen>
/* ืืฆืืจืช ืืกื ืืืฉ ืืืขืื ืชื */
lv_obj_t * scr = lv_obj_create(NULL);
lv_screen_load(scr);
/* ืืืืจืช ืคืจืืกืช ืขืืืื */
lv_obj_set_flex_flow(scr, LV_FLEX_FLOW_COLUMN);
lv_obj_set_flex_align(scr, LV_FLEX_ALIGN_SPACE_EVENLY, /*ืืืฉืืจ ืื ืื*/
LV_FLEX_ALIGN_START, /*ืืืฉืืจ ืืืคืงื ืืืกืืื*/
LV_FLEX_ALIGN_CENTER); /*ืืืฉืืจ ืืืกืืื*/
/* ืืฆืืจืช 5 ืชืืืืช ืกืืืื */
const char * texts[5] = {"Input 1", "Input 2", "Input 3", "Output 1", "Output 2"};
for(int i = 0; i < 5; i++) {
lv_obj_t * cb = lv_checkbox_create(scr);
lv_checkbox_set_text(cb, texts[i]);
}
/* ืฉืื ืื ืืฆืืื */
lv_obj_add_state(lv_obj_get_child(scr, 1), LV_STATE_CHECKED);
lv_obj_add_state(lv_obj_get_child(scr, 3), LV_STATE_DISABLED);
<screen>
<view
flex_flow="column"
style_flex_main_place="space_evenly"
style_flex_cross_place="start"
style_flex_track_place="center"
>
<lv_checkbox text="Input 1"/>
<lv_checkbox text="Input 2"/>
<lv_checkbox text="Input 3" checked="true"/>
<lv_checkbox text="Output 1"/>
<lv_checkbox text="Output 2" disabled="true"/>
</view>
</screen>
LVGL ืืื ืคืจืืืงื ืคืชืื ืืชืจืืืืช ืืชืงืืืืช ืืืจืื. ืืคืฉืจ ืืชืจืื ืืืจืืื ืจืืืช: ืืฉืชืฃ ืขื ืืคืจืืืงื ืฉืืื, ืืืชืื ืืืืืืืช, ืืฉืคืจ ืืช ืืชืืขืื, ืืชืงื ืชืงืืืช ืืืคืืื ืืืจื ืคืจืืืงื ืืฉืืื ืชืืช ืืจืืื LVGL.
ืืชืืืืจ ืืคืืจื ืฉื ืืคืฉืจืืืืช ืืชืจืืื, ืืงืจื ืืคืจืง Contributing ืืชืืขืื.
ืืืชืจ ืึพ600 ืื ืฉืื ืืืจ ืืืชืืจื ืืืชื ืขื LVGL. ืืฆืืจืคื ืืืื ื. ื ืชืจืื ืฉื ๐
<a href="https://github.com/lvgl/lvgl/graphs/contributors"> </a>
...ืืขืื ืจืืื.