Flipper Zero 番茄钟应用(Pomodoro Timer)完整指南:三种模式、交互逻辑与源码实现解析
Flipper Zero 番茄钟应用Pomodoro Timer完整指南三种模式、交互逻辑与源码实现解析【免费下载链接】FlipperPlayground (and dump) of stuff I make or modify for the Flipper Zero项目地址: https://gitcode.com/GitHub_Trending/fl/Flipper导读本文基于 Flipper 仓库中 xMasterX 出品的番茄钟应用Pomodoro Timer完整展开介绍番茄工作法在 Flipper Zero 上的落地实现。你将了解三种内置计时模式经典 25/5、长时 50/10、冲刺 10/2的使用方法、开始/暂停/继续/重置的按键操作、番茄计数器与内置时钟的界面逻辑以及声音震动LED 通知机制背后的源码级原理还可直接复现 FAP 应用的构建配置。提示本应用属于旧固件时代的独立应用源码README 注明兼容 2022-10-14 的固件版本 F81999EA存放于仓库的 Applications/Official/source-OLDER/xMasterX/pomodoro 目录适合开发者学习 Flipper GUIViewDispatcher / Submenu / DialogEx / 自定义 View的完整应用编写范式。一、番茄工作法与应用的定位番茄工作法Pomodoro Technique由 Francesco Cirillo 于 1980 年代末提出用厨房定时器把工作切分为通常 25 分钟一个的番茄区间pomodoro意大利语番茄源于 Cirillo 学生时代使用的番茄形厨房定时器区间之间穿插短暂休息从而提升专注度与节奏感。Flipper Zero 则是一款便携式、类似电子宠物的多功能设备用于与门禁系统交互可读取、复制和模拟 RFID 标签、射频遥控器与数字门禁钥匙。本应用正是利用这块 128×64 单色屏、五向按键、蜂鸣器、震动马达与 RGB LED 这些硬件资源实现一个随身携带的时间管理工具。二、三种内置计时模式应用在主菜单Submenu中提供三种预置模式对应不同工作/休息时长组合模式菜单文案工作时长休息时长源码常量经典 ClassicClassic: 25 work 5 rest25 分钟5 分钟60 * 25/60 * 5长时 LongLong: 50 work 10 rest50 分钟10 分钟60 * 50/60 * 10冲刺 SprintSprint: 10 work 2 rest10 分钟2 分钟60 * 10/60 * 2三种模式的差异完全由各自的绘制回调决定在 pomodoro_25.c、pomodoro_50.c、pomodoro_10.c 中每个视图只计算max_seconds与max_seconds_rest然后统一调用共享的 pomodoro_draw_callback。也就是说界面绘制、计时与输入处理代码只有一份模式间仅靠两个时长参数区分这是很好的复用设计。菜单项的注册在 pomodoro.csubmenu_add_item依次加入三条菜单项回调统一指向pomodoro_submenu_callback通过index区分并切换到对应视图。三、使用与操作指南3.1 启动与选择模式启动应用后进入主菜单用方向键选择上述三种模式之一按 OK 进入对应计时界面。应用入口为pomodoro_app通过view_dispatcher_run驱动整个事件循环退出时执行pomodoro_app_free释放资源见 pomodoro.c。3.2 工作区按键交互计时界面工作区的按键逻辑集中在 pomodoro_timer.c 的pomodoro_timer_process中OK短按开始 / 暂停 / 继续的切换开关。逻辑依据当前状态分三种情况计时进行中timer_running true记录已流逝秒数切换为暂停初始状态time_passed 0记录当前时间戳作为起点切换为运行暂停后time_passed 0用current_timestamp - timer_stopped_seconds补偿已流逝时间实现继续而不是从头开始。 每次按下后统一执行timer_running !timer_running翻转状态。左键短按仅当计时处于暂停状态时生效将时间戳、已流逝秒数、运行标志全部清零实现重置运行中按下则被忽略避免误触。Back长按在三个视图的输入回调中被特殊处理——InputTypeLong InputKeyBack时返回false放行触发退出确认对话框见各视图*_input_callback短按 Back 仅记录按下标志不产生动作。屏幕上的按钮图标与按下高亮反馈同步OK 区域在按下时绘制反色圆角框重置按钮只在已计时且未运行时出现!timer_running time_passed避免空计时时出现无效的重置入口。3.3 退出确认对话框工作区长按 Back 后进入退出确认视图PomodoroViewExitConfirm基于DialogEx模块见 pomodoro.c提供三个按键分支pomodoro_dialog_callbackExit左停止视图分发器直接退出应用Stay右切回长按前所在的工作视图继续计时Menu中返回主菜单Submenu可在三种模式间重新选择。3.4 界面元素布局由 pomodoro_timer.c 的绘制回调可见完整 UI 结构顶部标题栏左侧Pomodoro字样右侧 Back 箭头图标与Hold to exit提示第二行实时时钟格式HH:MM:SS由 RTC 时间戳换算% (60*60*24)等取模运算得出中部Start / Pause / Continue 状态按钮与倒计时数字FontBigNumbers大号字体格式MM:SS下方仅在工作结束后显示休息倒计时与Have a rest提示右上角番茄计数器用实心圆点canvas_draw_disc表示已完成的番茄数。四、番茄计数器与内置时钟番茄计数器每个完整工作区间结束后model-counter 1累加一次计数器上限为 5超过后自动回绕为 1见 pomodoro_timer.c。屏幕上以最多 5 个圆点横向排列展示当前进度。内置时钟界面常驻显示基于 Flipper RTC 的系统时间furi_hal_rtc_get_datetimefuri_hal_rtc_datetime_to_timestamp并以此为计时基准。倒计时的推进不依赖中断计数而是每次绘制时用当前时间戳 − 起始时间戳计算已流逝秒数因此暂停/恢复也能精确衔接不受渲染频率影响。五、声音、震动与 LED 提醒休息/工作区间结束时会触发通知序列NotificationSequence通过 notification_message 播放定义在 pomodoro_timer.c工作结束sequence_finish点亮背光与绿色 LED以 C5 → E5 → G5 → B5 → C6 的上行音阶配合连续震动提示该休息了。休息结束sequence_rest点亮背光与红色 LED以 C6 → B5 → G5 → E5 → C5 的下行音阶配合震动提示该继续工作了。两个序列交替使用音阶的升/降方向让用户在无需看屏的情况下也能凭听觉区分是进入休息还是恢复工作。声音播放在倒计时归零时触发一次通过sound_playing标志去重并在应用退出时发送sequence_reset_blue复位 LED 状态见 pomodoro.c。六、状态机工作、休息与暂停的流转PomodoroTimerModel见 pomodoro_timer.h用一组布尔标志描述运行状态字段含义timer_running工作计时是否在进行rest_running休息计时是否在进行time_passed工作已流逝秒数用于暂停续接timer_start_timestamp/rest_start_timestamp工作/休息的起始时间戳timer_stopped_seconds暂停时记录的中断点counter已完成番茄数sound_playing防止声音重复触发的去重标志完整流转如下初始态 → OK 开始工作 → 工作倒计时归零total_time_left 0时自动清零工作状态、进入休息态并累加番茄数 → 休息归零后复位回初始态期间 OK 可在任意时刻暂停/继续左键在暂停态可重置。七、构建与应用配置application.fam应用以 FAPFlipper Application Package外部应用形式组织清单文件 application.fam 关键字段如下App( appidPomodoro_Timer, namePomodoro Timer, apptypeFlipperAppType.EXTERNAL, entry_pointpomodoro_app, stack_size1 * 1024, cdefines[APP_POMODORO], requires[gui], order10, fap_iconpomodoro_timer.png, fap_categoryMisc_Extra, fap_icon_assetsicons, )apptypeEXTERNAL编译为独立 FAP 文件可放入 SD 卡apps/Misc_Extra目录加载无需烧录进固件entry_pointpomodoro_app对应 pomodoro.c 中的入口函数requires[gui]声明依赖 GUI 子系统fap_icon_assetsicons引用icons/目录下的 4 张界面图标资源返回箭头、OK 按钮、空格键区等均为 XBM 风格小尺寸位图。应用资源目录中还包括 5 张运行截图misc/1.png 至 misc/5.png展示主菜单、计时、休息、重置与退出确认等界面实态。八、源码阅读建议与限制说明兼容性README 明确标注兼容固件版本 F81999EA2022-10-14目录路径source-OLDER也说明其属于旧版固件源码。若在新版固件如 RogueMaster、Unleashed、官方最新版上使用建议优先在对应发行版的应用商店中查找更新维护的番茄钟 FAP本文源码仅作学习与迁移参考。阅读顺序建议按pomodoro.c应用装配与视图注册→views/*.c三种模式的参数注入→pomodoro_timer.c计时状态机与绘制的顺序阅读可以完整串起 Flipper GUI 应用中菜单 → 视图 → 事件 → 绘制 → 通知的典型链路。扩展点若需自定义时长只需仿照现有三个视图新建一个视图并修改max_seconds/max_seconds_rest再在pomodoro_app_alloc中注册到 ViewDispatcher 即可无需改动任何计时逻辑。结语这款番茄钟应用虽然体量不大却完整覆盖了 Flipper Zero 应用开发的全部基础要素GUI 模块组合Submenu、DialogEx、自定义 View、基于 RTC 的精确计时、带去重的多模态通知序列以及状态机的规范拆解。无论是日常用 Flipper 管理专注节奏还是作为学习 Flipper 应用开发的入门源码它都是一份轻量而完整的参考实现。【免费下载链接】FlipperPlayground (and dump) of stuff I make or modify for the Flipper Zero项目地址: https://gitcode.com/GitHub_Trending/fl/Flipper创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考