Chart Dashboard

Lab 6: Chart Dashboard (Multiple Chart Types)


1. โครงสร้างภาพรวมของ Lab

Why? - ทำไมต้องเรียนรู้เรื่องนี้

  • Data Visualization: ข้อมูลเดียวกันแสดงได้หลายรูปแบบ เลือก chart ที่เหมาะกับลักษณะข้อมูล

  • Chart Type Selection: Bar chart เหมาะกับเปรียบเทียบค่า, Line chart เหมาะกับ time-series, Scatter chart เหมาะกับดูความสัมพันธ์

  • Professional Dashboard: รูปแบบ multi-chart dashboard ใช้ในอุตสาหกรรม SCADA, Process Control

What? - จะได้เรียนรู้อะไร

  1. Bar Chart: เปรียบเทียบค่า X, Y, Z แบบ side-by-side ด้วย LV_CHART_TYPE_BAR

  2. Area Chart: แสดง trend พร้อม fill ด้านล่าง (Line + Opacity)

  3. Scatter Chart: แสดงความสัมพันธ์ X vs Y ด้วย LV_CHART_TYPE_SCATTER

  4. Line Chart: Multi-series time-series

  5. 2x2 Grid Layout: จัดวาง 4 charts ในหน้าเดียว

How? - จะทำอย่างไร

  1. สร้าง 2x2 grid layout บนหน้าจอ (480x320)

  2. มุมซ้ายบน: Bar Chart - เปรียบเทียบ Accel X/Y/Z

  3. มุมขวาบน: Area Chart - Magnitude over time

  4. มุมซ้ายล่าง: Scatter Chart - X vs Y correlation

  5. มุมขวาล่าง: Line Chart - Gyroscope Roll/Pitch/Yaw

  6. Single timer อัพเดททุก chart ทุก 100ms


2. ฟังก์ชันสำคัญ

2.1 Chart Type Constants

Constant
Description
Update Method

LV_CHART_TYPE_LINE

เส้นเชื่อมจุด (default)

lv_chart_set_next_value()

LV_CHART_TYPE_BAR

แท่ง bar graph

lv_chart_set_value_by_id() + refresh()

LV_CHART_TYPE_SCATTER

จุดกระจาย (x, y)

lv_chart_set_next_value2()

2.2 Bar Chart Functions

Function
Description

lv_chart_set_type(chart, LV_CHART_TYPE_BAR)

ตั้งเป็น Bar chart

lv_chart_set_point_count(chart, n)

จำนวน bars (เช่น 3 สำหรับ X/Y/Z)

lv_chart_set_value_by_id(chart, ser, id, val)

อัพเดทค่า bar ตาม index

lv_chart_refresh(chart)

REQUIRED - รีเฟรชหลังอัพเดท

lv_obj_set_style_pad_column(chart, px, 0)

ระยะห่างระหว่าง bars

2.3 Scatter Chart Functions

Function
Description

lv_chart_set_type(chart, LV_CHART_TYPE_SCATTER)

ตั้งเป็น Scatter chart

lv_chart_set_range(chart, LV_CHART_AXIS_PRIMARY_X, min, max)

ช่วงแกน X (ต้อง set)

lv_chart_set_range(chart, LV_CHART_AXIS_PRIMARY_Y, min, max)

ช่วงแกน Y

lv_chart_set_next_value2(chart, ser, x, y)

เพิ่มจุด (x, y)

2.4 Area Chart (Line + Fill)

2.5 Chart Styling Functions

Function
Description

lv_obj_set_style_size(chart, w, h, LV_PART_INDICATOR)

ขนาดจุด (0,0 = ซ่อน)

lv_obj_set_style_line_width(chart, px, LV_PART_ITEMS)

ความหนาเส้น

lv_chart_set_div_line_count(chart, h, v)

เส้น grid (horizontal, vertical)

lv_obj_set_style_bg_opa(chart, opa, LV_PART_ITEMS)

Area fill opacity


3. โค้ดตัวอย่าง

3.1 Global Variables

3.2 Simulation Helpers

3.3 Timer Callback - อัพเดททุก Chart

3.4 สร้าง Bar Chart (มุมซ้ายบน)

3.5 สร้าง Area Chart (มุมขวาบน)

3.6 สร้าง Scatter Chart (มุมซ้ายล่าง)

3.7 สร้าง Line Chart (มุมขวาล่าง)

3.8 Main Function


4. องค์ความรู้และเทคนิค

4.1 เลือก Chart Type ที่เหมาะสม

ลักษณะข้อมูล
Chart Type ที่เหมาะ
เหตุผล

เปรียบเทียบค่าหลาย ๆ ตัว ณ เวลาเดียว

Bar

เห็นความแตกต่างชัดเจน

ข้อมูลเปลี่ยนแปลงตามเวลา

Line

เห็น trend ชัด

ข้อมูลเปลี่ยนแปลงตามเวลา + ปริมาณ

Area (Line+Fill)

เห็นทั้ง trend และ volume

ความสัมพันธ์ระหว่าง 2 ตัวแปร

Scatter

เห็น correlation pattern

สัดส่วน/เปอร์เซ็นต์

Arc/Bar

เห็นสัดส่วนชัด

4.2 Bar Chart Gotchas

4.3 Scatter Chart Gotchas

4.4 Data Scaling Pattern

4.5 Grid Layout Tips


5. แบบฝึกหัด

Exercise 1: Weather Dashboard

โจทย์: สร้าง Weather Dashboard แบบ 2x2 grid แสดง 4 charts:

ตำแหน่ง
Chart Type
ข้อมูล
Range

ซ้ายบน

Line

Temperature (C)

20-40

ขวาบน

Area

Humidity (%)

40-100

ซ้ายล่าง

Bar

Pressure (hPa)

990-1030

ขวาล่าง

Scatter

Temp vs Humidity

correlation

  • จำลองข้อมูลให้สมจริง (อุณหภูมิสัมพันธ์กับความชื้น)

  • แต่ละ chart มี title และ value label

  • อัพเดททุก 200ms

การประยุกต์ใช้งานจริง:

  • สถานีตรวจอากาศ (Weather Station)

  • ระบบ HVAC ในอาคาร

  • Smart Agriculture - ตรวจสอบสภาพอากาศในฟาร์ม


Exercise 2: Chart Type Selector

โจทย์: เพิ่ม Dropdown ที่ด้านบนของหน้าจอ ให้ผู้ใช้เลือกประเภท Chart สำหรับ Accelerometer data:

  • ตัวเลือก: "Line\nBar\nScatter"

  • เมื่อเปลี่ยน dropdown จะทำลาย chart เก่าและสร้างใหม่ตาม type ที่เลือก

  • ข้อมูลที่แสดงเหมือนกัน (Accel X/Y/Z) แต่เปลี่ยนวิธีแสดงผล

การประยุกต์ใช้งานจริง:

  • Data Analytics Dashboard ที่ให้ผู้ใช้เลือกมุมมองข้อมูล

  • Lab Equipment Software ที่วิศวกรต้องวิเคราะห์ข้อมูลหลายมุมมอง

Hint:

  • lv_dropdown_create(parent) สร้าง dropdown

  • lv_dropdown_set_options(dd, "Line\nBar\nScatter")

  • Event callback: lv_dropdown_get_selected(dd) return 0, 1, 2

  • ลบ chart เก่า: lv_obj_delete(old_chart)


6. References


Last updated

Was this helpful?