--[[ @module tsb_waveout_page @summary 波形输出页面 @version 1.0 @date 2026.03.18 @author 李一玮 @usage 本文件是波形输出页面,用于配置和控制波形输出。 ]] local tsb_waveout_page = {} -- 页面UI元素 local main_container = nil local common_ui = require("tsb_common_page") -- 配置参数 local wave_type = "正弦波" -- 波形类型 local amplitude = "5.0" -- 幅度(V) local frequency = "1000" -- 频率(Hz) local duty_cycle = "50" -- 占空比(%) local is_running = false -- 是否正在运行 -- 创建数字键盘 local function create_numeric_keyboard() return airui.keyboard({ x = 0, y = 0, w = 480, h = 160, mode = "numeric", auto_hide = true, bg_color = 0xf1f1f1, on_commit = function() log.info("keyboard", "commit") end }) end -- 创建UI function tsb_waveout_page.create_ui() main_container = airui.container({ x = 0, y = 0, w = 480, h = 320, color = 0xF5F5F5, }) --------------------- 标题栏 ------------------------ local title_bar = airui.container({ parent = main_container, x = 0, y = 0, w = 480, h = 30, color = 0x72DDF7, }) airui.label({ parent = title_bar, text = "波形输出", x = 200, y = 8, w = 80, h = 20, font_size = 16, color = 0xFFFFFF, }) -- 标题栏公共信息展示 common_ui.add_battery_display(title_bar) common_ui.create_back_button(title_bar, tsb_waveout_page.cleanup) --------------------------------------------------- -- 主容器 local scroll_container = airui.container({ parent = main_container, x = 0, y = 30, w = 480, h = 270, color = 0xF5F5F5, }) -- 配置容器 local config_container = airui.container({ parent = scroll_container, x = 20, y = 20, w = 440, h = 180, color = 0xFFFFFF, radius = 8, border_width = 1, border_color = 0xDDDDDD, }) local config_y = 20 -- 波形类型 airui.label({ parent = config_container, text = "波形类型", x = 20, y = config_y, w = 80, h = 25, font_size = 14, color = 0x333333, }) local wave_type_dropdown = airui.dropdown({ parent = config_container, x = 100, y = config_y-8, w = 100, h = 35, options = {"正弦波", "方波", "三角波", "锯齿波"}, default_index = 0, on_change = function(self, idx) local options = {"正弦波", "方波", "三角波", "锯齿波"} wave_type = options[idx + 1] log.info("waveout", "波形类型: " .. wave_type) end }) config_y = config_y + 40 -- 幅度(峰峰值) airui.label({ parent = config_container, text = "幅度 (V)", x = 20, y = config_y, w = 80, h = 35, font_size = 14, color = 0x333333, }) local amplitude_input = airui.textarea({ parent = config_container, x = 100, y = config_y-8, w = 100, h = 35, text = "5.0", max_len = 5, keyboard = create_numeric_keyboard() }) config_y = config_y + 40 -- 频率 airui.label({ parent = config_container, text = "频率 (Hz)", x = 20, y = config_y, w = 80, h = 25, font_size = 14, color = 0x333333, }) local frequency_input = airui.textarea({ parent = config_container, x = 100, y = config_y-8, w = 100, h = 35, text = "1000", max_len = 6, keyboard = create_numeric_keyboard() }) config_y = config_y + 40 -- 占空比(仅方波可用) airui.label({ parent = config_container, text = "占空比 (%)", x = 20, y = config_y, w = 80, h = 25, font_size = 14, color = 0x333333, }) local duty_cycle_input = airui.textarea({ parent = config_container, x = 100, y = config_y-8, w = 100, h = 35, text = "50", max_len = 3, keyboard = create_numeric_keyboard() }) -- 控制按钮区域 local button_container = airui.container({ parent = scroll_container, x = 20, y = 210, w = 440, h = 40, color = 0xF5F5F5, }) -- 开始按钮 local start_btn = airui.button({ parent = button_container, text = "开始", x = 100, y = 0, w = 100, h = 35, color = 0x4CAF50, text_color = 0xFFFFFF, stype = { bg_color = 0x2B6FF1,border_color = 0x2B6FF1, text_color = 0xFFFFFF, radius = 8 }, on_click = function(self) if not is_running then is_running = true self:set_text("运行中") self:set_color(0xFF9800) -- 获取配置参数 amplitude = amplitude_input:get_text() frequency = frequency_input:get_text() duty_cycle = duty_cycle_input:get_text() log.info("waveout", "开始输出波形", wave_type, amplitude, frequency, duty_cycle) -- 这里可以添加实际的波形输出代码 end end }) -- 停止按钮 local stop_btn = airui.button({ parent = button_container, text = "停止", x = 240, y = 0, w = 100, h = 35, color = 0xF44336, text_color = 0xFFFFFF, on_click = function(self) if is_running then is_running = false start_btn:set_text("开始") start_btn:set_color(0x4CAF50) log.info("waveout", "停止输出波形") -- 这里可以添加停止波形输出的代码 end end }) -- 底部信息 common_ui.create_status_bar(main_container) end -- 初始化页面 function tsb_waveout_page.init(params) tsb_waveout_page.create_ui() end -- 清理页面 function tsb_waveout_page.cleanup() if main_container then main_container:destroy() main_container = nil end end return tsb_waveout_page