本发明涉及室内的三维立体显示器技术领域,是一种基于物联网的led三维立体显示器的驱动方法。
背景技术:
led显示装置拥有强大的展示能力,可以立体展现汉字、图形和动画等动态效果。结合音乐和所在建筑空间布局,led显示装置可以实现各种美妙绝伦的梦幻动态造型,在立体面营造出各种主题场景的艺术空间,具有通透性好、立体感强、创意丰富且沟通空间大、可视距离远、规格品种多等优点,可以满足各种不同应用场景的需求。
同时实现了动态显示时钟、日期、天气信息的功能,与商业广告有机结合,能够达到良好的推广效果。3d显示由于存在深度信息,能够给人以更高的画面层次感和视觉冲击力,非常适用于商场、公司、橱窗、展馆、酒吧、ktv等需要营造视觉氛围的场所,同时适合放置在高大的建筑物、标志物等醒目的位置。由于焊接工艺复杂、程序编写难度大、价格昂贵,使得其目前市场占有率极低,日常生活中更是很难遇到。
目前的led产品灯光效果不能够跟随音乐节奏智能变化。
人们在听音乐时,容易与音乐节奏产生共鸣,会不自觉地跟着一起打节拍,产生身心的愉悦。当前大部分配合音乐的led声光效果有以下两种:一种是固定效果,使用者根据音乐素材和现场气氛,设定不同主题模式下的灯光闪烁变化效果,例如婚礼现场、酒吧等,这种灯光模式单一枯燥、离不开操作人员的控制;第二种是让灯光效果跟着音乐的声强进行变化,多用于广场音乐喷泉,虽然好看,但是与音乐的融合度低,难引起人们的共鸣。
目前的led产品没有真正实现物联网控制。
目前led产品修改显示内容和效果的功能主要通过外接u盘、外接网线的计算机、手机app蓝牙通讯、局域网wifi通讯这几种简单的方式来实现,如果led立方体放置于与控制人员相距较高、较远的位置时,则很难实现对显示内容和效果的修改;同时产品孤立,不成体系,无法与其他的led产品、电子电气控制系统、互联网平台或者软件实现同步、联动、个性化及智能化控制。
技术实现要素:
本发明为实现智能化控制,解决灯光效果不能够跟随音乐节奏智能变化的问题,同时实现物联网控制。本发明提供了一种基于物联网的led三维立体显示器的驱动方法,本发明提供了以下技术方案:
一种基于物联网的led三维立体显示器的驱动方法,包括以下步骤:
步骤1:通过音频输入接口采集声音信号,通过音乐节奏识别模块进行识别,筛选声音信号;
步骤2:通过mcu接收筛选的声音信号,将所述声音信号转换为频域信号,将频域信号输出至nbiot物联网模块;通过层选和行选控制电路进行筛选,并输出至led光立方体;
步骤3:所述mcu将现场状态信息打包成数据帧传输至nbiot物联网模块,所述nbiot物联网模块将数据帧发送至socket网络通信模块,所述socket网络通信模块将数据帧拆封传输至用户、状态和控制信息数据库,所述用户、状态和控制信息数据库将现场状态信息传输至web端用户控制平台;所述web端用户控制平台通过html界面传输至安卓手机端、苹果手机端、pc用户端、其它系统用户接入平台;
步骤4:所述安卓手机端、苹果手机端、pc用户端、其它系统用户接入平台将表单数据传输至web端用户控制平台,所述web端用户控制平台将用户控制信息传输至用户、状态和控制信息数据库,所述用户、状态和控制信息数据库将数据帧封装并传输至socket网络通信模块,所述socket网络通信模块将数据帧发送至nbiot物联网模块,所述nbiot物联网模块将数据帧拆包成用户控制信息传输至mcu,
步骤5:mcu将用户控制信息传输至层选和行选控制电路,进行筛选,并输出至led光立方体,对led状态进行控制。
优选地,层选和行选控制电路采用核心芯片为74hc573,每个74hc573可控制8路数据输出锁存,主控芯片通过74hc154层选控制芯片,控制给某一层led供电,层选第一层,通过行选控制函数和写数据函数点亮第一层的led;延时层约100微秒;层选第二层,点亮第二层;依此类推,直至点亮第z_dim层,循环往复;
执行该函数前必须先熄灭前一层所有led,即设置所有的74hc573输出为0,防止后层虚亮前一层的内容;
led阵列的显示方式是按显示编码的顺序,一层一层地显示,在任意时刻只有一层发光二极管是处于被点亮的状态,剩余行都处于熄灭状态,每一层的显示时间为4ms,到z_dim层led是在同时显示的;
优选地,层选和行选控制电路进行第一层层选:将第一层x_dim*y_dim个led状态数据,共x_dim行y_dim列,依次通过行选,传入x_dim*y_dim/8个74hc573中,控制74hc154层选控制芯片打开第一层led开关,使第一层led得电;
第一层点亮延时:第一层led按照指定图案点亮一段时间t,t的时间范围为1至500微秒;
第二层层选:向74hc573中传输第二层led的数据,断开第一层,通过74hc154层选控制芯片开启第二层总控制开关,使第二层得电;
第二层点亮延时:第二层led按照指定图案点亮一段时间t,每一层间隔点亮的时长要保持一致;
当扫描到第z_dim层led,实现了一帧立体画面的显示。
优选地,扫描频率高于24hz。
优选地,音乐节奏识别模块识别强音咚与次强音哒之间的时间间隔约0.5–1秒,采样时间选取4个拍子的时间,约2–4秒,设置采样总时长t为2秒,采样点数n为128点,计算得采样时间隔t=t/n=2秒/128=15.625毫秒,即每隔15.625毫秒进行一次音乐声强采样,共采样128次。
优选地,音频输入接口测得环境声音数据,通过单片机转换为频域数据,通过nbiot物联网模块将频域数据打包能数据帧,使用tcp/ip协议,通过蜂窝移动通信网络发送至云服务器,通过云服务器socket网络通信模块将数据写入数据库,用户通过web端用户控制平台访问数据库查看到现场环境音乐数据。
优选地,用户通过web端用户控制平台点击复选框,修改云服务器中数据库,socket网络通信模块将新的数据库内容打包成数据帧,使用tcp/ip协议,发送至nbiot物联网模块,通过单片机控制led光立方体。
本发明具有以下有益效果:
本发明的客户端是用户实现对系统控制的web,采用html5自适应网页设计,用户无论使用安卓手机、苹果手机、pc机,都可以实现现场端查看和控制现场led光立方体显示内容和动画效果。使用ajax技术在不重新加载网页的情况下,对网页的数据显示部分实时更新,同时可以使用智能控制方案,实现在指定时间、条件,显示指定内容和动画效果。
附图说明
图1为基于物联网的led三维立体显示器结构原理图;
图2为displayframe算法流程图;
图3为sfc_level2算法流程图;
图4为sfc_level3算法流程图。
具体实施方式
以下结合具体实施例,对本发明进行了详细说明。
具体实施例一:
本发明提供一种基于物联网的led三维立体显示器的驱动方法,包括以下步骤:
步骤1:通过音频输入接口采集声音信号,通过音乐节奏识别模块进行识别,筛选声音信号;
音乐节奏识别模块识别强音咚与次强音哒之间的时间间隔约0.5–1秒,采样时间选取4个拍子的时间,约2–4秒,设置采样总时长t为2秒,采样点数n为128点,计算得采样时间隔t=t/n=2秒/128=15.625毫秒,即每隔15.625毫秒进行一次音乐声强采样,共采样128次。
步骤2:通过mcu接收筛选的声音信号,将所述声音信号转换为频域信号,将频域信号输出至nbiot物联网模块;层选和行选控制电路,进行筛选,并输出至led光立方体;
层选和行选控制电路采用核心芯片为74hc573,每个74hc573可控制8路数据输出锁存,主控芯片通过74hc154层选控制芯片,控制给某一层led供电,层选第一层,通过行选控制函数和写数据函数点亮第一层的led;延时层约100微秒;层选第二层,点亮第二层;依此类推,直至点亮第z_dim层,循环往复;
执行该函数前必须先熄灭前一层所有led,即设置所有的74hc573输出为0,防止后层虚亮前一层的内容;
led阵列的显示方式是按显示编码的顺序,一层一层地显示,在任意时刻只有一层发光二极管是处于被点亮的状态,剩余行都处于熄灭状态,每一层的显示时间为4ms,到z_dim层led是在同时显示的;
优选地,层选和行选控制电路进行第一层层选:将第一层x_dim*y_dim个led状态数据,共x_dim行y_dim列,依次通过行选,传入x_dim*y_dim/8个74hc573中(,控制74hc154层选控制芯片打开第一层led开关,使第一层led得电;
第一层点亮延时:第一层led按照指定图案点亮一段时间t,t的时间范围为1至500微秒;
第二层层选:向74hc573中传输第二层led的数据,断开第一层,通过74hc154层选控制芯片开启第二层总控制开关,使第二层得电;
第二层点亮延时:第二层led按照指定图案点亮一段时间t,每一层间隔点亮的时长要保持一致;
当扫描到第z_dim层led,实现了一帧立体画面的显示。
扫描频率高于24hz,否则会产生闪烁现象。
步骤3:所述mcu将现场状态信息打包成数据帧传输至nbiot物联网模块,所述nbiot物联网模块将数据帧发送至socket网络通信模块,所述socket网络通信模块将数据帧拆封传输至用户、状态和控制信息数据库,所述用户、状态和控制信息数据库将现场状态信息传输至web端用户控制平台;所述web端用户控制平台通过html界面传输至安卓手机端、苹果手机端、pc用户端、其它系统用户接入平台;
音频输入接口测得环境声音数据,通过单片机转换为频域数据,通过nbiot物联网模块将频域数据打包能数据帧,使用tcp/ip协议,通过蜂窝移动通信网络发送至云服务器,通过云服务器socket网络通信模块将数据写入数据库,用户通过web端用户控制平台访问数据库查看到现场环境音乐数据。
步骤4:所述安卓手机端、苹果手机端、pc用户端、其它系统用户接入平台将表单数据传输至web端用户控制平台,所述web端用户控制平台将用户控制信息传输至用户、状态和控制信息数据库,所述用户、状态和控制信息数据库将数据帧封装并传输至socket网络通信模块,所述socket网络通信模块将数据帧发送至nbiot物联网模块,所述nbiot物联网模块将数据帧拆包成用户控制信息传输至mcu,
步骤5:mcu将用户控制信息传输至层选和行选控制电路,进行筛选,并输出至led光立方体,对led状态进行控制。
用户通过web端用户控制平台点击复选框,修改云服务器中数据库,socket网络通信模块将新的数据库内容打包成数据帧,使用tcp/ip协议,发送至nbiot物联网模块,通过单片机控制led光立方体。
其中,x_dim*y_dim/8中x_dim*y_dim的含义是一层的led总数,一块74hc573芯片可以控制8个led,所以采用这种表述方式。
mcu是指微控制单元(microcontrollerunit;mcu)。
nbiot是指窄带物联网(narrowbandinternetofthings,nb-iot)。
所述方法基于一种如图1所示的基于物联网的led三维立体显示器,所述led三维立体显示器包括led光立方体现场端、云服务端和用户web控制端;
所述led光立方体现场端包括音频输入接口、音乐节奏识别模块、mcu、层选和行选控制电路、led光立方体和nbiot物联网模块,所述音频输入接口连接音乐节奏识别模块,所述音乐节奏识别模块和mcu连接,所述mcu连接层选和行选控制电路,所述层选和行选控制电路连接led光立方体,所述mcu连接nbiot物联网模块;
所述云服务端包括socket网络通信模块和用户、状态和控制信息数据库,所述nbiot物联网模块连接socket网络通信模块,所述socket网络通信模块连接用户、状态和控制信息数据库;
所述用户web控制端包括web端用户控制平台、安卓手机端、苹果手机端、pc用户端、其它系统用户接入平台,用户、状态和控制信息数据库连接web端用户控制平台,所述web端用户控制平台连接其它系统用户接入平台,所述其它系统用户接入平台包括微信、二维码和小程序接入平台。所述mcu采用stm32h743i,所述led光立方体采用4096只led组成。所述nbiot物联网模块采用中国移动nbsim卡。
层选和行选控制电路采用核心芯片为74hc573,每个74hc573可控制8路数据输出锁存,主控芯片通过74hc154层选控制芯片,控制给某一层led供电,层选第一层,通过行选控制函数和写数据函数点亮第一层的led;延时层约100微秒;层选第二层,点亮第二层;依此类推,直至点亮第z_dim层,循环往复;
执行该函数前必须先熄灭前一层所有led,即设置所有的74hc573输出为0,防止后层虚亮前一层的内容;
led阵列的显示方式是按显示编码的顺序,一层一层地显示,在任意时刻只有一层发光二极管是处于被点亮的状态,剩余行都处于熄灭状态,每一层的显示时间为4ms,到z_dim层led是在同时显示的”
具体程序设计实现的驱动方法:
硬件驱动函数displayframe
该函数的作用是点亮一幅完整的立体图案,使其显示指定时间,为整个硬件驱动最基础、最重要的函数,他由以下几个函数有机结合调用。结构与工程流程图如图2所示。
74hc573锁存芯片写数据函数writewordto573
将指定的数据通过主控芯片的data数据端口传输到74hc573锁存芯片。
74hc573行选控制函数chipselectto573_le
主控芯片通过控制74hc154行选控制芯片,将数据写入至哪一组74hc573锁存芯片,该函数与writewordto573函数配合使用,实现点亮led立方体某一层led。
执行该函数之前必须要注意以下两点:
1、先不使能74hc154行选控制芯片,将其g角设置成高电平(对应的io引脚置1),否则在修改行选时,会使该锁存的74hc573不锁存,造成led乱蹦(该亮的没有亮,不该亮的乱亮)。
2、先写数据函数输出0,否则在行选后、写数据之前,该块74hc573锁存芯片所控制的led内容将短暂的持续上一块74hc573的led内容,经过整体显示之后会形成微弱的虚亮现象。
层选控制函数scanthelayer
主控芯片通过74hc154层选控制芯片,控制给某一层led供电。一般的执行过程如下:层选第一层,通过行选控制函数和写数据函数点亮第一层的led;延时层约100微秒;层选第二层,点亮第二层;依此类推,直至点亮第z_dim层,循环往复。
执行该函数时必须要注意以下两点:
1、必须先将不使能行选控制芯片74hc154芯片,再修改层选,否则会造成别的层led有微弱虚亮。
2、执行该函数前必须先熄灭前一层所有led,即设置所有的74hc573输出为0,防止后层虚亮前一层的内容。
g_display数组
定义如下:dimg_display[y_dim*z_dim]={0};
其中,dim为自定义数据类型,根据led立方体的x_dim确定,目前最多支持到64位,(x_dim=64)。如表1所示:
表1.自定义数据类型表
y_dim*z_dim为数组元素个数。
因为显示一个常见汉字所需要的点数为16*16,所以一般的x_dim>=16。下面针对x_dim=16,x_dim=32两种情况进行阐述。
x_dim=16
由于stm32主控芯片每一组io的个数为16,g_display元素类型为16位的unsignedshort,所以直接调用io端口批量写入函数即可:gpio_write_a_set(data0_15_port,data);
x_dim=32
g_display元素类型为32位的unsignedlong,将元素的低16位传输至data0_15_port,将高16位传输至data16_31_port。具体实现如下:
gpio_write_a_set(data0_15_port,data);
gpio_write_a_set(data16_31_port,data>>16);
具体实施例二:
本实施方式是一种基于物联网的led三维立体显示器中显示点、线、平面、三角形、圆形、位图、立方体、球形、柱形等图形的显示、平移、旋转等效果的驱动方法的说明。
一维矢量图形
矢量图形的特点:
只有基本矢量图形的结构体定义中是直接指定显示坐标的,复杂矢量图形和位图都是初始定义在立方体的0点上(x、y、z坐标值均为0)
点point
立方体中的一个点,其成员由x、y、z坐标值,和是否可见组成
线line
结构体成员由两个点结构体(point),和是否可见组成。
一维位图linebmp
即一条线(line)上点亮指定的点,设置该结构体主要是为了二维和三维位图的效果算法提供基础,一般不做为单独显示。位图不能通过函数直接对其进行放大、缩小。
二维矢量图形
其结体成员主要为point(点),通过点间连线、填充,形成不同形状。
矢量图、位图,都显示在指定的plane中(plane需为rectangle,即矩形,不可以是不规则形状),后序的效果开发时只需要指定plane的位置,即可方便地实现图形的定位和大小设置。并且,plane可以在立方体中指定区域,即实现了在指定区域显示指定图形,打破了不同图形在不同坐标、角度显示存在不同标准的问题;并且,plane对象中已经定义了丰富的旋转、移动、缩放、plane复制、镜像,这些效果可以直接加载到planebmp和planevector对象当中。
注意,对一个结构体实例的赋值,可以直接让它等于另外一个结构体;对结构体指针指向的实例赋值,则需要对其成员逐项赋值。例如:
pointp1,p2,p3;
point*ppoint=&p3;
p1=p2;//正确
ppoint->x=p2.x;
ppoint->y=p2.y;
ppoint->z=p2.z;
面plane
这里的plane指的是方形(包括正方形和长方形)。
二维位图planebmp
其结构体成员由以下组成:1、plane,指定该位图所在的区域,同时对plane的效果变化即可直接复用到二维位图,例如自转、公转、移动等;2、指向显示内容的数组指针。
0-9数字位图
共有小、中、大、特大4个尺寸的位图。
字母位图
三角形triangle
圆形circle
圆形为简易版,为更加对称的圆角矩形,这样便于定义和绘制。
圆角矩形roundplane
在矩形的基础上,加上指定长度的圆边。特殊的圆角矩形可以形成菱形,例如,边长为4,圆角半径为2的圆角矩形即为边长为2的菱形。
五角星
三维矢量图形
其结体成员仍然主要为point(点),通过多次绘制点、线、面的形式,即可形成三维图形。
体box
这里的box指的是方体(包括正方体和长方体)。
2:四圈填充,上下不填充;3:外圈都填充,空心
}box;
三维位图boxbmp
圆球体ball_3d
移动、旋转、放大缩小、转换效果如下:
graphic的effect效果函数
其特点是对graphic对象进行规则变化,该层函数特点是只对graphic对象做变化,不做显示。对graphic结构体的动画效果,尽可能用效果函数实现,即通过函数改变graphic结构体成员的值,从而改变图形的形状和位置,连续的、有规律的变化即形成了炫目的动画效果。这样的目的是:1、多个graphic变化效果完全独立:可以同时显示、按照不同效果、不同的速度变化;2、effect完成的都是矢量变化,有很强的复用性、修改性;3、每次effect都会返回graphic变化后的实时状态,这样在调用函数中不必做过多的判断,程序结构更加清晰。
只需要完成point的效果集,即可方便地实现line、plane、box的效果,因为其它的graphic都是由点组成的矢量,点变化,图形即发生变化。
常见的效果有以下几种
移动move
改变graphic对象在led立方体中的位置,其形状、方向不变。可选的方向属性定义如下:
旋转roll
将graphic对象延某个方向旋转,形状不变,显示图形;熄灭原图形,效果变换后显示新图形。包括公转、自转等效果,旋转方向可选如下:
effect_roll_arround_clockwise:四周顺时针,自转
effect_roll_arround_anticlockwise:四周逆时针,自转
effect_roll_top_bottom_clockwise:上下顺时针,自转
effect_roll_top_bottom_anticlockwise:上下逆时针,自转
effect_roll_arround_clockwise_lowline:四周顺时针,以低边转动为准
effect_roll_arround_anticlockwise_lowline:四周逆时针,以低边转动为准
effect_roll_arround_clockwise_highline:四周顺时针,以高边转动为准
effect_roll_arround_anticlockwise_highline:四周逆时针,以高边转动为准
effect_roll_top_bottom_clockwise_lowline:上下顺时针,以低边转动为准
effect_roll_top_bottom_anticlockwise_lowline:上下逆时针,以低边转动为准
effect_roll_top_bottom_clockwise_highline:上下顺时针,以高边转动为准
effect_roll_top_bottom_anticlockwise_highline:上下逆时针,以高边转动为准
放大缩小zoom
将graphic对象延dir方向放大或者缩小。
切入切出cut
将graphic对象延dir方向切入或者切出。
变形distort
放大、缩小、拉宽、拉高、简单变形(例如正方形转成梯形、菱形、平行四边形、不规则四边形等)
转换convert
点、线、面、体的互相转换,例如:point延固定的方向拉伸即成line;line延固定的方向拉伸即成plane;line或者plane拉伸、旋转、移位,即成box。例如:平面拉伸成体,plane转成box,二维矢量图和二维位图均可适用。
g_display效果
其特点是对立方体显示数组_display进行规则变化,只做变化,不做显示。效果有:
effect_define_line_fromchar:
指定某一条线的显示内容,该函数可以对立方体中任意一条水平或者垂直线段显示内容进行赋值。
effect_move_2d
将指定平面延指定方向,移动指定距离。
effect_move_arround
将四周的4个平面或者垂直4个平面进行绕圈移动。
display_spin90effect_bystep
将立方体以垂直中心为轴,自转一个格。
display_plane_laydown_effect_bystep
将指定的平面将指定的边、指定的方向,旋转45度。
采用面向对象编程设计思想,提高了程序的重用性、灵活性和扩展性对象是一种具有自身属性和功能的构件,具有封装特性,将其属性和操作的一部分对外界开放,将大部分实现细节封装起来,不让外界了解他的详细内情,实现对数据和行为的包装和信息的隐藏。外界只能通过对象提供的接口来与对象交互。打破传统面向过程的、函数指令集合集合式单片机程序设计思想。程序中将各种独立而又互相调用的graphic(点、线、面、体等图形)对象作为程序的基本单元,将数据(长、宽、高、是否填充、样式等属性信息)和动作(移动、旋转等)封装其中,每一个对象都应该能够接受数据、处理数据并将数据传达给其它对象,程序效果由多个图形对象组成,复杂的图形可由简单的图形对象组成,成为聚合。加强代码复用,而非代码复制。
创新在定时器中断处理函数中调用effect动画效果函数。
中断服务程序的设计对系统的成败有至关重要的作用,需要十分谨慎处理各中断之间的关系和每个中断执行的时间。一般说来,单片机要求中断函数尽可能简短,主要原因有二:一是让中断服务程序做最少量的工作,这样系统对中断的反应面更宽,有充足的时间及时响应中断;二是中断程序中放入的内容越多,中断之间越容易起冲突。
在打破了传统的单片机以主程序为主要数据计算的方式,颠覆了传统的动画在主函数中display函数堆积的方式。
ram资源分配
单片机ram内存的合理使用对于一个大型软件项目的稳定运行是至关重要的。单片机程序中最为致命、最难发觉的bug也是内存的使用不当造成的。
单片机常用的内存分配方式有三种:
一是占用ram中“堆区”的malloc指令,动态内存分配方式,优点是灵活、节省内存,但是在没有操作系统的单片机环境下,很容易造成内存泄漏,如果分配的空间较大,又非常容易覆盖了栈区的内存,有很高的不稳定因素。
二是占用ram中“栈区”的局部变量,静态内存分配方式,大数组这种非常容易造成全局变量区的内存被覆盖。
三是占用“静态数据区”的static变量和全局变量,静态内存分配方式。静态分配是编译器完成的,且一旦分配好,其内存地址和大小就固定下来不会改变。为保证程序的可靠性和稳定性,项目中对于大存储空间的数组,采用稳定的静态的内存分配方式,不使用危险的动态分配内存方式。因为stm32h743单片机具有高达1mb的ram存储空间,在ram充足的前提下,牺牲掉部分ram资源作为固定的内存。
“两头小中间大”的效果函数编写原则
两头指的是底层函数和顶层函数,中间指的中间层函数,是实现动画效果的各级函数。
底层函数小
指的是底层函数体的长度要尽量短小,函数实现的功能尽量单一,形成一个完整的效果体系,便于各种效果的调用,而不是单为某一效果服务;
顶层函数小
指的是顶层的效果调用函数实现功能简单,只是几个函数的顺序调用,而不存在条件判断、循环语句。
下述为图形效果的显示函数的几个层级及其调用关系的介绍:
level1:graphic对象定义和操作
set、draw(定义、绘制)函数,move、roll、get、judge(移动、旋转、比较、判断)等基本函数。该层级的函数均为可重入函数
level2:initgraphics_bysfcstruct函数
以onestepsfcstruct结构体指针为数据中心(参数传递)。根据欲实现的效果,初始化一组(或者一个)graphic对象,它为下一层级的onestep函数做铺垫准备,同样为可重入函数。
该层级函数在一个onestep动画效果中,不是一定存在的,在sfc_level2层级函数中一样可以做简单的图形初始化工作。
level3:onestep函数
以onestepsfcstruct结构体指针为数据中心(参数传递)。为动画效果的基本处理单元,其根据经过graphicinit函数初始化的graphic,和graphic参数的位置信息,判断下一步执行效果。循环执行此函数,即可实现一个基本动画效果。该层函数的不断积累,是实现更多动画视觉效果的基础。它以onestepsfcstruct结构体指针为数据中心(参数传递)。
其区别于更高层次函数的最大特征是:它为可重入类型函数,函数体中不包括静态变量、全局变量。
level4:sfc_level1_basic,基本顺序功能图函数
以fullstepsfcstruct结构体指针为数据中心(参数传递),该层函数是sfc的基础函数。通过定时器控制,完成一个完整的fullstep,依次执行每一个onestep中的每一个效果步骤,形成一个完整的fullstep动画效果。
sfc(sequentialfunctionchart顺序功能图)源自plc梯型图设计思想,它将一个完整的控制过程分为若干个onestep阶段,各阶段具有不同的效果动作,每一个onestep之间有转换条件(最常见的转换条件是达到了指定步数),转换条件满足就会进入下一阶段的onestep。
从该层开始的函数均为不可重入类型函数,即函数在执行的过程中不可以被其他主体再调用(不可以在主函数和中断函数,或者中断函数和中断函数同时调用运行),因为该层函数有static静态变量去控制函数顺序执行fullstepsfcstruct的每一个步骤。
该层次有三个函数,分别是sfc_level1_basic_for_flash、sfc_level1_basic_for_datetime、sfc_level1_basic_for_planebmpcharmovearround,内容几乎完全相同,只有函数名不同,供不同的定时器使用,如果不同定时器调用相同sfc_level1_basic函数,则会使效果函数互相干扰,发生混乱,最常见的是效果在未执行完指定步数后提前结束。
level5:sfc_level2函数
以fullstepsfcstruct结构体指针为参数传递,完成一次包括若干onestep在内的fullstep完整动画效果的fullstepsfcstruct结构体赋初值(包括该结构体成员onestepsfcstruct数组,为每一个onestep效果设置相应参数、执行initgraphics_bysfcstruct函数),之后便循环执行sfc_level1函数,依次实现该fullstep中的每一个onestep效果。
它只接受sfc_level3函数的调用。sfc_level2和sfc_level1是多对一的关系,确定不会在同一时间执行的sfc_level2函数可以指定同一个sfc_level1函数。
当该完整动画效果在某阶段需要重复执行时,需要对fullstepsfcstruct结构体重新赋初值,因为其onestepsfcstruct数组成员存储空间可能会被处于同一sfc_level3级别的其它的sfc_level2函数占用。
该层的每一个函数都实现了一个完整的动画效果,但是几乎不占用静态存储空间,重要的、大块的存储空间分配全部安排到level6:sfc_level3进行,如图3所示。
该层函数为顶层动画函数,直接被主函数或者定时器函数调用,功能是依次执行若干个用户指定的sfc_level2函数指针(fullstep),形成一个动画集合,该层函数一共只有三个,分别是sfc_level3_flash、sfc_level3_datetime、sfc_level3_char,用于显示动画、时间日期、显示文字,通过系统运行参数的控制,可以指定他们单独执行或者并行执行(例如在显示当前时间的同时,显示滚动字幕)。虽然单处理器单片机只能实现同一时刻执行一个函数,但是可以通过单片机定时器错开每个函数的运行时间,实现同一时间同时显示多个动画效果。
如图4所示,虽然该层的功能是执行多个fullstep,系统只分配一个fullstep所需要的所有资源,供多个fullstep共用。资源包括一个fullstepsfcstruct实例、一个onestepsfcstruct一维数组实例、一个graphicstruct一维数组实例、不同类型的graphic图形对象二维数组实例各一个,只有在该层下对以上类型对象生成实例,在所有其它层次都是以指针形式传递,实现了对ram空间的统一分配管理。
资源分配需要注意以下两个问题:
1、onestepsfcstruct一维数组元素数量需满足要求
由于每个fullstep的onestep个数不同,每个onestep所需的graphic对象也不同,所以在分配资源时,需要满足如下公式:
numofonestepsfcstructarray>=max(onestepnuminfullstep1,onestepnuminfullstep2...,onestepnuminfullstepn)
onestepsfcstruct一维数组元素个数需大于等于含有onestep数量最多的fullstep中onestep个数。
2、graphic图形对象元素数量需满足要求
由于不同fullstep中不同的onestep所需要的graphic资源可能不相同,例如linecurve效果用到的是line对象,planeeffect效果用到的是plane对象,并且不同效果使用到的对象个数也可能不相同,所以要求各个类型的graphic图形对象元素数量必须能够满足不同的onestep的需要。
在函数初次执行时(上电只执行一次),指定各个对象的对应关系。
每次执行完一个sfc_level2函数之后,都需要对fullstepsfcstruct、onestepsfcstruct内容清零,以默认所有成员内容为0的初始状态进行。
函数参数为效果方案,一个效果方案里面是sfc_level2函数指针的数组,sfc_level2函数库是不断更新完善的,从中部分抽取,并按不同的顺序排列会呈现出不同的效果。
定时器中断处理函数执行内容
只能够执行某效果函数,效果函数的每次执行是没有连续性、接续性的,从而在定时器中断函数中执行效果函数,实现动画效果连续变化。效果变化在定时器函数中调用的目的是:
结构清晰
便于在同一时间同时显示多个graphic对象、调用多个效果:多个定时函数同时运行,方便同时调用。
主函数可以实时监控系统变量值,响应速度快,避免了长时间display而无法及时读取系统变量。
主函数执行内容
1、循环执行displayframe函数,不间断地刷新立方体的显示内容(显示内容由g_display数组指定)。该函数必须在主函数中不间断执行,如果动画效果函数计算用时较长,或者被其他计算中断,则会出现动画闪烁的现象。
2、监控系统参数变化,与系统中第二个单片机通讯数据,达到根据用户需要,实时监测、调整系统参数,第二个单片机负责通信。
采用get函数调用系统变量值,而不采用全局变量,这样提高了程序的模块化程度和封装程度。
以上所述仅是一种基于物联网的led三维立体显示器的驱动方法的优选实施方式,一种基于物联网的led三维立体显示器的驱动方法的保护范围并不仅局限于上述实施例,凡属于该思路下的技术方案均属于本发明的保护范围。应当指出,对于本领域的技术人员来说,在不脱离本发明原理前提下的若干改进和变化,这些改进和变化也应视为本发明的保护范围。
1.一种基于物联网的led三维立体显示器的驱动方法,所述方法一种基于物联网的led三维立体显示器,其特征是:包括以下步骤:
步骤1:通过音频输入接口采集声音信号,通过音乐节奏识别模块进行识别,筛选声音信号;
步骤2:通过mcu接收筛选的声音信号,将所述声音信号转换为频域信号,将频域信号输出至nbiot物联网模块;通过层选和行选控制电路进行筛选,并输出至led光立方体;
步骤3:所述mcu将现场状态信息打包成数据帧传输至nbiot物联网模块,所述nbiot物联网模块将数据帧发送至socket网络通信模块,所述socket网络通信模块将数据帧拆封传输至用户、状态和控制信息数据库,所述用户、状态和控制信息数据库将现场状态信息传输至web端用户控制平台;所述web端用户控制平台通过html界面传输至安卓手机端、苹果手机端、pc用户端、其它系统用户接入平台;
步骤4:所述安卓手机端、苹果手机端、pc用户端、其它系统用户接入平台将表单数据传输至web端用户控制平台,所述web端用户控制平台将用户控制信息传输至用户、状态和控制信息数据库,所述用户、状态和控制信息数据库将数据帧封装并传输至socket网络通信模块,所述socket网络通信模块将数据帧发送至nbiot物联网模块,所述nbiot物联网模块将数据帧拆包成用户控制信息传输至mcu;
步骤5:mcu将用户控制信息传输至层选和行选控制电路,进行筛选,并输出至led光立方体,对led状态进行控制。
2.根据权利要求1所述的一种基于物联网的led三维立体显示器的驱动方法,其特征是:层选和行选控制电路采用核心芯片为74hc573,每个74hc573可控制8路数据输出锁存,主控芯片通过74hc154层选控制芯片,控制给某一层led供电,层选第一层,通过行选控制函数和写数据函数点亮第一层的led;延时层约100微秒;层选第二层,点亮第二层;依此类推,直至点亮第z_dim层,循环往复;
执行该函数前必须先熄灭前一层所有led,即设置所有的74hc573输出为0,防止后层虚亮前一层的内容;
led阵列的显示方式是按显示编码的顺序,一层一层地显示,在任意时刻只有一层发光二极管是处于被点亮的状态,剩余行都处于熄灭状态,每一层的显示时间为4ms,到z_dim层led是在同时显示的。
3.根据权利要求1所述的一种基于物联网的led三维立体显示器的驱动方法,其特征是:层选和行选控制电路进行第一层层选:将第一层x_dim*y_dim个led状态数据,共x_dim行y_dim列,依次通过行选,传入x_dim*y_dim/8个74hc573中,控制74hc154层选控制芯片打开第一层led开关,使第一层led得电;
第一层点亮延时:第一层led按照指定图案点亮一段时间t,t的时间范围为1至500微秒;
第二层层选:向74hc573中传输第二层led的数据,断开第一层,通过74hc154层选控制芯片开启第二层总控制开关,使第二层得电;
第二层点亮延时:第二层led按照指定图案点亮一段时间t,每一层间隔点亮的时长要保持一致;
当扫描到第z_dim层led,实现了一帧立体画面的显示。
4.根据权利要求51所述的一种基于物联网的led三维立体显示器的驱动方法,其特征是:扫描频率高于24hz。
5.根据权利要求1所述的一种基于物联网的led三维立体显示器的驱动方法,其特征是:音乐节奏识别模块识别强音咚与次强音哒之间的时间间隔约0.5–1秒,采样时间选取4个拍子的时间,约2–4秒,设置采样总时长t为2秒,采样点数n为128点,计算得采样时间隔t=t/n=2秒/128=15.625毫秒,即每隔15.625毫秒进行一次音乐声强采样,共采样128次。
6.根据权利要求1所述的一种基于物联网的led三维立体显示器的驱动方法,其特征是:音频输入接口测得环境声音数据,通过单片机转换为频域数据,通过nbiot物联网模块将频域数据打包能数据帧,使用tcp/ip协议,通过蜂窝移动通信网络发送至云服务器,通过云服务器socket网络通信模块将数据写入数据库,用户通过web端用户控制平台访问数据库查看到现场环境音乐数据。
7.根据权利要求1所述的一种基于物联网的led三维立体显示器的驱动方法,其特征是:用户通过web端用户控制平台点击复选框,修改云服务器中数据库,socket网络通信模块将新的数据库内容打包成数据帧,使用tcp/ip协议,发送至nbiot物联网模块,通过单片机控制led光立方体。
技术总结