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? - จะได้เรียนรู้อะไร
Bar Chart: เปรียบเทียบค่า X, Y, Z แบบ side-by-side ด้วย
LV_CHART_TYPE_BARArea Chart: แสดง trend พร้อม fill ด้านล่าง (Line + Opacity)
Scatter Chart: แสดงความสัมพันธ์ X vs Y ด้วย
LV_CHART_TYPE_SCATTERLine Chart: Multi-series time-series
2x2 Grid Layout: จัดวาง 4 charts ในหน้าเดียว
How? - จะทำอย่างไร
สร้าง 2x2 grid layout บนหน้าจอ (480x320)
มุมซ้ายบน: Bar Chart - เปรียบเทียบ Accel X/Y/Z
มุมขวาบน: Area Chart - Magnitude over time
มุมซ้ายล่าง: Scatter Chart - X vs Y correlation
มุมขวาล่าง: Line Chart - Gyroscope Roll/Pitch/Yaw
Single timer อัพเดททุก chart ทุก 100ms

2. ฟังก์ชันสำคัญ
2.1 Chart Type Constants
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
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
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
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 ที่เหมาะสม
เปรียบเทียบค่าหลาย ๆ ตัว ณ เวลาเดียว
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:
ซ้ายบน
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)สร้าง dropdownlv_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?