二哲科技 发表于 2023-4-15 15:53:19

【开源】圆形屏雷达DEMO

1.介绍
第一次使用迪文屏的圆形屏幕,其实在想做一些什么Demo呢,后面突然想到,可以做一个雷达扫描装置,这个雷达扫描装置,可以用在定位,信号检测,让无线信号可视化,由于是圆形屏幕,整体感官会比方形屏幕更好。那我们就开始设计吧!
2.设计
首先就是找素材和设计素材,下面是我自己设计的关于雷达扫描的素材。
图1
其中雷达信号是一个动态的闪烁光点,这里设计了动图。同时在代码中设计了动画函数,直接调用即可。//点动画
void point_animat(u8 point_value)
{
    if(point_list.increase_flag == 0)
    {
      point_list.animat_cnt++;
      if(point_list.animat_cnt >= 4)
      {
            point_list.increase_flag = 1;
      }
    }
    else
    {
      point_list.animat_cnt--;
      if(point_list.animat_cnt <= 0)
      {
            point_list.increase_flag = 0;
      }
    }
   
    write_dgus_vp(0x2000, (u8 *)&point_list.animat_cnt, 2);
}之后就是扫描的动画,定义好圆心,然后让图片进行旋转。//雷达扫描旋转
void radar_scan()
{
    static u16 angle = 0;
    static u16 timer_cnt = 0;

    if(display_status == 0)   //扫描状态才进行扫描
    {
      timer_cnt++;
      if(timer_cnt >= 2000)
      {
            timer_cnt = 0;
            angle++;
            if(angle >= 360)
            {
                angle = 0;
            }
            write_dgus_vp(0x1000, (u8 *)&angle, 2);
      }
    }
}之后就是串口数据的定义了,这里代码太长,我就不贴了,后面可以自己去源码里面看,都写着注释呢,协议内容如下。/*协议
byte0 0添加 1删除
byte1 rssi
byte2~14 addr
byte15 名字长度
byte16~+ 名字
*/最后的逻辑就是,接收到添加信号点的协议,就显示一个信号点,每个信号点都有自己相应的向心轴线,然后通过RSSI调整和中心点的位置,使得每个信号点不会进行太多的叠加。根据三角函数,然后设置对应的位置,代码如下:      #define POINT_CENTRE210
      #define PI 3.14159265
      #define TRIGONOMETRIC 3.14159265 / 180

      void point_pos_set(u8 point_value, u8 rssi_value)
      {
            u8 set_pos[] = {0x00, 0x00, 0x00, 0x00};

            point_list.pos_x = sin((float)(point_value * 45) * TRIGONOMETRIC) * (210 * (float)(rssi_value / 100.0f)) + POINT_CENTRE;
            point_list.pos_y = cos((float)(point_value * 45) * TRIGONOMETRIC) * (210 * (float)(rssi_value / 100.0f)) + POINT_CENTRE;

            set_pos = point_list.pos_x / 256;
            set_pos = point_list.pos_x % 256;
            set_pos = point_list.pos_y / 256;
            set_pos = point_list.pos_y % 256;

            write_dgus_vp(point_value * 0x100 + 0x2100 + 1, set_pos, 2);
            UART2_Sendbyte(set_pos);
            UART2_Sendbyte(set_pos);
            UART2_Sendbyte(set_pos);
            UART2_Sendbyte(set_pos);
      }上面都是逻辑的设计,接下来就是界面的设计了,首先设计一个开机界面,为了给开机界面加上一定的动画,我拿基本控件给盖住背景,让其有一定的动画效果。这里有一个小窍门,就是我本来一开始不准备设计开机动画的,之后设计开机动画,但是已经有个0号界面了,用开机动画替换0号界面有点问题,后面我就在开机的时候,直接切换界面,这样开机的时候默认就是切换后的那个界面了。

图2
之后就是设计蓝牙扫描界面,和显示详细信息弹窗了,这一部分调试主要调试显示信号点位置和弹窗显示,具体设计界面如下图3所示。
图3
设计完成之后,结合C51的程序,就可以让屏幕动起来了,具体效果,大家可以看下面的视频。3.总结第一次接触迪文的圆形屏幕,一开始使用还有点不熟悉,后面多踩几次坑就熟悉了,对于圆形屏的Demo这只是刚刚开始,后面还会有更多有趣的Demo分享给大家的~演示视频:https://www.bilibili.com/video/BV1No4y1h78ahttps://www.bilibili.com/video/BV1No4y1h78a项目源码和工程:

dingyu000111 发表于 2023-4-21 16:54:18

:lol
做的很不错,厉害
动态图形可以用矩形来实现, 区域触摸控制,做的很有想法

二哲科技 发表于 2023-4-22 07:59:30

dingyu000111 发表于 2023-4-21 16:54
做的很不错,厉害
动态图形可以用矩形来实现, 区域触摸控制,做的很有想法 ...

:lol还有更多有意思的设计在后面呢~

1715605760 发表于 2023-10-16 10:17:30

不错不错,不愧是练习两年半;P
页: [1]
查看完整版本: 【开源】圆形屏雷达DEMO