迪文科技论坛

 找回密码
 立即注册
搜索
查看: 137|回复: 2

【2023.4.15获奖项目】基于迪文圆形屏的雷达扫描装置方案

[复制链接]

567

主题

167

回帖

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
11978
发表于 2024-1-11 09:48:46 | 显示全部楼层 |阅读模式
【开源】基于迪文圆形屏的雷达扫描装置方案

该方案基于迪文圆形屏设计的雷达扫描装置方案,可用于定位、信号检测和无线信号可视化。该方案旨在提高整体感官效果,圆形屏幕相较于方形屏幕,具有更好的整体感官效果。


一、介绍

第一次使用迪文屏的圆形屏幕,其实在想做一些什么Demo呢,后面突然想到,可以做一个雷达扫描装置,这个雷达扫描装置,可以用在定位,信号检测,让无线信号可视化,由于是圆形屏幕,整体感官会比方形屏幕更好。那我们就开始设计吧!


二、设计

首先就是找素材和设计素材,下面是我自己设计的关于雷达扫描的素材。


其中雷达信号是一个动态的闪烁光点,这里设计了动图。

同时在代码中设计了动画函数,直接调用即可。

  1. //点动画
  2. void point_animat(u8 point_value)
  3. {
  4.     if(point_list[point_value].increase_flag == 0)
  5.     {
  6.         point_list[point_value].animat_cnt++;
  7.         if(point_list[point_value].animat_cnt >= 4)
  8.         {
  9.             point_list[point_value].increase_flag = 1;
  10.         }
  11.     }
  12.     else
  13.     {
  14.         point_list[point_value].animat_cnt--;
  15.         if(point_list[point_value].animat_cnt <= 0)
  16.         {
  17.             point_list[point_value].increase_flag = 0;
  18.         }
  19.     }
  20.    
  21.     write_dgus_vp(0x2000, (u8 *)&point_list[point_value].animat_cnt, 2);
  22. }
复制代码

之后就是扫描的动画,定义好圆心,然后让图片进行旋转。

  1. //雷达扫描旋转
  2. void radar_scan()
  3. {
  4.     static u16 angle = 0;
  5.     static u16 timer_cnt = 0;

  6.     if(display_status == 0)     //扫描状态才进行扫描
  7.     {
  8.         timer_cnt++;
  9.         if(timer_cnt >= 2000)
  10.         {
  11.             timer_cnt = 0;
  12.             angle++;
  13.             if(angle >= 360)
  14.             {
  15.                 angle = 0;
  16.             }
  17.             write_dgus_vp(0x1000, (u8 *)&angle, 2);
  18.         }
  19.     }
  20. }
复制代码

之后就是串口数据的定义了,这里代码太长,我就不贴了,后面可以自己去源码里面看,都写着注释呢,协议内容如下。

  1. /*协议
  2. byte0 0添加 1删除
  3. byte1 rssi
  4. byte2~14 addr
  5. byte15 名字长度
  6. byte16~+ 名字
  7. */
复制代码

最后的逻辑就是,接收到添加信号点的协议,就显示一个信号点,每个信号点都有自己相应的向心轴线,然后通过RSSI调整和中心点的位置,使得每个信号点不会进行太多的叠加。

根据三角函数,然后设置对应的位置,代码如下:

  1.         #define POINT_CENTRE  210
  2.         #define PI 3.14159265
  3.         #define TRIGONOMETRIC 3.14159265 / 180

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

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

  9.             set_pos[0] = point_list[point_value].pos_x / 256;
  10.             set_pos[1] = point_list[point_value].pos_x % 256;
  11.             set_pos[2] = point_list[point_value].pos_y / 256;
  12.             set_pos[3] = point_list[point_value].pos_y % 256;

  13.             write_dgus_vp(point_value * 0x100 + 0x2100 + 1, set_pos, 2);
  14.             UART2_Sendbyte(set_pos[0]);
  15.             UART2_Sendbyte(set_pos[1]);
  16.             UART2_Sendbyte(set_pos[2]);
  17.             UART2_Sendbyte(set_pos[3]);
  18.         }
复制代码

上面都是逻辑的设计,接下来就是界面的设计了,首先设计一个开机界面,为了给开机界面加上一定的动画,我拿基本控件给盖住背景,让其有一定的动画效果。

这里有一个小窍门,就是我本来一开始不准备设计开机动画的,之后设计开机动画,但是已经有个0号界面了,用开机动画替换0号界面有点问题,后面我就在开机的时候,直接切换界面,这样开机的时候默认就是切换后的那个界面了。

之后就是设计蓝牙扫描界面,和显示详细信息弹窗了,这一部分调试主要调试显示信号点位置和弹窗显示,具体设计界面如下图3所示。

设计完成之后,结合C51的程序,就可以让屏幕动起来了,具体效果,大家可以看下面的视频。


三、总结

第一次接触迪文的圆形屏幕,一开始使用还有点不熟悉,后面多踩几次坑就熟悉了,对于圆形屏的Demo这只是刚刚开始,后面还会有更多有趣的Demo分享给大家的~

效果展示视频链接:https://www.bilibili.com/video/BV1No4y1h78a



备注说明:如需源码,请参考此链接:http://inforum.dwin.com.cn:20080/forum.php?mod=viewthread&tid=7927&_dsign=d6b27f9e


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0

主题

9

回帖

61

积分

注册会员

Rank: 2

积分
61
发表于 2024-5-15 08:23:33 | 显示全部楼层
需要源码3181338441@qq.com
回复

使用道具 举报

0

主题

452

回帖

1万

积分

论坛元老

Rank: 8Rank: 8

积分
11070
发表于 2024-5-15 09:15:59 | 显示全部楼层
源码参考这个链接
【开源】圆形屏雷达DEMO
http://inforum.dwin.com.cn:20080 ... 7&fromuid=14580
(出处: 迪文科技论坛)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|迪文科技论坛 ( 京ICP备05033781号-1 )

GMT+8, 2024-11-24 08:51 , Processed in 0.089368 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表