基于IOT背景下,嵌入式电子相册的设计
前言:随着物联网技术的不断发展,物联网技术在城市管理、智能交通系统、以及之能家居等领域的应用十分广泛,本文就智慧生活领域中的电子相册展开分享。
一、设计目的
随着文娱活动越来越受年轻人所关注,对美好时光的记录成为当下年轻人的一大生活方式。作为追求个性化、独特化广大年轻人中的一员,对于私人定制电子相册的期望度也十分高。笔者通过设计一项嵌入式电子相册旨在满足当下需求。
二、整体设计
本项目使用粤嵌GC6818试验机及VM虚拟机中的Ubuntu操作系统完成整个流程,系统整体设计思路如图1。
图1系统整体设计图
(1)硬件清单:粤嵌GC6818试验机整套
(2)软件清单:VM虚拟机、Ubuntu操作系统、Secure CRT7.3(比较稳定)
三、软件设计
1、主函数
#include "color.h" //显示颜色的头文件
#include "bmp.h" //显示bmp图片的头文件
#include "ts.h" //触摸屏的头文件
#include "music.h" //音乐的头文件
#include "movie.h" //视频的头文件
int main(int argc, char const *argv[])
{
int ts_x, ts_y;
char music_path[4][32]={"./1.mp3","./2.mp3","./3.mp3","./4.mp3"};//音乐目录
char music_pitc[4][32]={"./1.bmp","./2.bmp","./3.bmp","./4.bmp"};//音乐图片目录
char video_path[2][16]={"./1.mp4","./2.mp4"}; //视频目录
char bmp_path[5][32]={"./p1.bmp","./p2.bmp","./p3.bmp","./p4.bmp","./p5.bmp"};//相册目录
int i=0;
int j=0;
int k=0;
open_lcd_color(); //1、打开显示屏(color)
open_lcd_bmp(); //1、打开显示屏(bmp)
open_ts(); //1、打开触摸屏
show_bmp("./init.bmp"); //2、显示音乐界面图片
//show_color(0x00ff0000); //2、显示颜色
while(1)
{
get_ts_xy(&ts_x, &ts_y);
show_bmp("./main.bmp"); //2、获取触摸屏坐标
if(ts_x>0 && ts_x<80 && ts_y>0 && ts_y <50) // 显示菜单页
{
show_bmp("./init.bmp");
}
//===============一、音乐播放器================//
if(ts_x>280 && ts_x<410 && ts_y>190 && ts_y <310)//===================点击音乐播放器
{
printf("=============1、音乐播放器==============\n");
show_bmp("./music.bmp");
while(1)
{
get_ts_xy(&ts_x, &ts_y); //2、获取触摸屏坐标
if(ts_x>310 && ts_x<480 && ts_y>400 && ts_y <480)//============开始音乐
{
exit_music();
show_bmp("./1.bmp");
start_music("./1.mp3");
}
//=================================列表播放========================================//
if(ts_x>640 && ts_x<800 && ts_y>0 && ts_y <60)//============第一首
{
exit_music();
show_bmp("./1.bmp");
start_music("./1.mp3");
}
if(ts_x>640 && ts_x<800 && ts_y>61 && ts_y <120)//============第二首
{
exit_music();
show_bmp("./2.bmp");
start_music("./2.mp3");
}
if(ts_x>640 && ts_x<800 && ts_y>121 && ts_y <180)//============第三首
{
exit_music();
show_bmp("./3.bmp");
start_music("./3.mp3");
}
if(ts_x>640 && ts_x<800 && ts_y>181 && ts_y <240)//============第四首
{
exit_music();
show_bmp("./4.bmp");
start_music("./4.mp3");
}
//=====================================上一首,下一首====================//
if(ts_x>500 && ts_x<550 && ts_y>400 && ts_y <480)//=============上一首
{
exit_music();
printf("上一首 \n");
i--;
if(i==-1)
{
i=3;
}
start_music(music_path[i]);
show_bmp(music_pitc[i]);
}
if(ts_x>580 && ts_x<630 && ts_y>400 && ts_y <480)//=============下一首
{
exit_music();
printf("下一首 \n");
i++;
if(i==4)
{
i=0;
}
start_music(music_path[i]);
show_bmp(music_pitc[i]);
}
if(ts_x>650 && ts_x<800 && ts_y>400 && ts_y <480)//=============退出音乐,回到主菜单
{
exit_music();
printf("=============主界面==============\n");
show_bmp("./main.bmp");
ts_x = 0;
ts_y = 0;
break;
}
if(ts_x>0 && ts_x<150 && ts_y>400 && ts_y <480)//=============停止音乐
{
printf("停止音乐 \n");
stop_music();
}
if(ts_x>160 && ts_x<300 && ts_y>400 && ts_y <480)//===========继续音乐
{
printf("继续音乐 \n");
cont_music();
}
}
}
//==============二、视频播放器=================//
if(ts_x>480 && ts_x<620 && ts_y>190 && ts_y <310) //=====================到视频播放器
{
printf("=============2、视频播放器==============\n");
show_bmp("./video.bmp");
while(1)
{
get_ts_xy(&ts_x, &ts_y); //2、获取触摸屏坐标
//1、指定打开视频
if(ts_x>0 && ts_x<150 && ts_y>400 && ts_y <480)//=================开始播放视频
{
printf("开始播放视频 \n");
start_movie("./1.mp4", 150, 100, 493, 250);
}
//2、退出视频
if(ts_x>0 && ts_x<80 && ts_y>0 && ts_y <50)//=================退出视频播放,回到主菜单
{
send_cmd_pipe(1);
printf("=============主界面==============\n");
show_bmp("./main.bmp");
ts_x = 0;
ts_y = 0;
break;
}
//3、视频暂停/继续
if(ts_x>350 && ts_x<450 && ts_y>400 && ts_y <480)//=================停止视频/继续视频
{
send_cmd_pipe(2);
printf("视频暂停/继续\n");
}
if(ts_x>650 && ts_x<725 && ts_y>400 && ts_y <480)//==============调大音量
{
send_cmd_pipe(3);
printf("音量加10\n");
}
if(ts_x>725 && ts_x<800 && ts_y>400 && ts_y <480)//===============调小音量
{
send_cmd_pipe(4);
printf("音量减10\n");
}
if(ts_x>250 && ts_x<350 && ts_y>400 && ts_y <480)//=============快退5s
{
send_cmd_pipe(5);
printf("快退5秒\n");
}
if(ts_x>450 && ts_x<550 && ts_y>400 && ts_y <480)//=============快进5s
{
send_cmd_pipe(6);
printf("快进5秒\n");
}
if(ts_x>150 && ts_x<250 && ts_y>400 && ts_y <480)//=============上一个视频
{
send_cmd_pipe(1);
usleep(500000);
printf("上一个视频 \n");
j--;
if(j==-1)
{
j=1;
}
start_movie(video_path[j], 150, 100, 493, 250);
}
if(ts_x>550 && ts_x<650 && ts_y>400 && ts_y <480)//=============下一个视频
{
send_cmd_pipe(1);
usleep(500000);
printf("下一个视频 \n");
j++;
if(j==2)
{
j=0;
}
start_movie(video_path[j], 150, 100, 493, 250);
}
}
}
if(ts_x>90 && ts_x<210 && ts_y>190 && ts_y <310)//======================进入电子相册
{
printf("=============3、电子相册==============\n");
show_bmp("./p1.bmp");
while(1){
get_ts_xy(&ts_x, &ts_y);
if(ts_x>0 && ts_x<400 && ts_y>50 && ts_y <480 )//点击左半边 ,切换上一张图片
{
printf("切换上一张 \n");
k--;
if (k==-1)
{
k=4;
}
show_bmp(bmp_path[k]);
}
if(ts_x>400 && ts_x<800 && ts_y>0 && ts_y <480)//点击右半边 ,切换下一张图片
{
printf("切换下一张 \n");
k++;
if (k==5)
{
k=0;
}
show_bmp(bmp_path[k]);
}
if(ts_x>0 && ts_x<80 && ts_y>0 && ts_y <50)//点击左上角,退出,回到主界面
{
printf("=============主界面==============\n");
show_bmp("./main.bmp");
ts_x = 0;
ts_y = 0;
break;
}
}
}
}
close_lcd_color(); //3、关闭显示屏(color)
close_lcd_bmp(); //3、关闭显示屏(bmp)
close_ts(); //3、关闭触摸屏
return 0;
}
tips:在主函数中,定义了#include “color.h”,显示颜色的头文件定义#include “bmp.h” ,显示bmp图片的头文件;定义include “ts.h” ,作为触摸屏的头文件;定义include “music.h” ,作为音乐的头文件,定义#include “movie.h” ,作为视频的头文件。整体实现主菜单的设计,进入主菜单实现对相册、音乐播放器、视频播放器的选择。此外,在相册中可以实现照片触摸更换;在音乐播放器中实现歌曲轮询,切换和暂停;在视频播放器中实现视频轮询,切换和暂停。**
四、测试视频
项目整体运行效果如下视频所示。
五、总结
以上就是今天要分享的内容,本文仅仅简单介绍了基于IOT背景下,嵌入式电子相册的设计,具体代码已经在gitee仓库开源(https://gitee.com/nqqdz/electonic-picture.git),旨在与各位同学一起交流,提升技术。作为一位死磕嵌入式的小白,希望大家能在此过程中不吝赐教,如有问题,请大家批评指正。