左右两块圆形 GC9A01 负责显示缩小版 TRAE 表情,中间 128×64 I2C OLED 只负责显示足球飞行轨迹。整体用一个状态机驱动,按“左边顶球→飞行到右→右边顶球→飞行到左”循环。
实现上,左右圆屏每帧用 RGB565 FrameBuffer 画一个缩放后的 TRAE 头框与统一的钻石眼,并把原本张口嘴巴去掉,改成简单短横嘴,避免表情过度夸张。顶球动作通过在顶球窗口内对头部整体施加竖直位移(head_y_off)实现:用剩余时间计算动作进度 p,再用正弦曲线生成“抬头顶一下”的上抬动画,同时在头顶画一个小球做撞击提示,让动作更直观。为避免上抬时被屏幕裁切,对 head_y 做边界钳制,并进一步降低 FACE_SCALE 让表情整体更小、更有留白。
中间 OLED 端只渲染轨迹:飞行阶段按抛物线(sin(πu))生成球的 (x,y) 位置,把采样点写入 trail 队列;显示时清屏后将相邻点用线段连起来,并对最近几段做加亮/加粗,同时把当前球画成皮球圆圈(而不是单点),轨迹更醒目。通过调大 arc_amp 与 trail_n 增强弧线高度和尾迹长度,最终达到“左右顶球 + 中间清晰展示飞行过程”的效果。