《智能家居》培训第六天------2019-01-10

目录:

  一)摄像头

  二)照明

  三)所想

  四)总结

一)摄像头

  摄像头这块学了跟没学一样我觉得,摄像头给的api,yuyv转rgb24也是给的api,总而言之就是,直接给了两个源文件,这两个源文件已经实现了屏幕显示摄像头数据的这个功能,我们所做的就只是把这两个文件和main文件整合,摄像头是怎么获得数据怎么传输数据,数据如何通过什么方式显示在屏幕上这些重点的都没详细讲,只是粗略讲了一下这个过程,不过这也正常,看了一下老师的源码,涉及到的东西确实很多,不觉得这是几天可以搞定的东西,而这可以说是本次培训的最后一天了。

  那么这篇笔记该怎么写呢,如何实现的肯定是没法写的了,我也不懂,就只记录目前知道的东西吧

  1)老师的笔记图

  2)V4L2

  V4L2是linux系统中的一个关于处理视频这一块的一个开发框架,一个处理视频数据的机制,目前我还没有开始学习这个框架

  点击此链接学习V4L2

  3)过程遇到的问题

  ① 问题:显示摄像头界面与菜单栏的点击无法同时实现,就是希望进入摄像界面以后点击返回可以返回主界面,再进入摄像界面依然可以显示摄像头内容

  ② 解决方法:有了之前解决视频菜单栏无法显示的经验,容易想到这个问题也可以使用线程来解决

  ③ 实现:我希望我的main.c文件尽量简洁,其中代码尽量少尽量清晰,我整合了很久代码,希望最终可以只是在main里添加一个显示摄像头的子线程,而把其他什么打开设备、缓存帧、yuyv转rgb24等显示摄像头内容之前需要进行的操作独立成一个文件,但是无论我怎么尝试,都无法实现预期,几个小时后,我妥协了,直接把摄像这一块的代码全部移植到main里,yuyv转rgb24为单独一个文件,这就解决问题了,但是我的main.c也变得繁琐起来了。以下是摄像界面图,图一是摄像头打开前显示的画面:

二)照明

  其实就是点灯,这个就不详写了,直接给代码吧

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <fcntl.h>
 4 #include <linux/ioctl.h>
 5 
 6 #define GEC210_LED_ON    _IOW('A', 0x03, unsigned long) 
 7 #define GEC210_LED_OFF    _IOW('A', 0x04, unsigned long)
 8 int light(void)
 9 {
10     int fd_light;
11     fd_light = open("/dev/led_drv", O_RDONLY);//以只读的方式LED的驱动,这个驱动文件要先安装,用老师给的驱动文件led_drv.ko
12     if(fd_light < 0)
13     {
14         perror("open");
15         return -1;        
16     }
17     //在此基础上实现流水灯的效果
18     while(1)
19     {
20         ioctl(fd_light, GEC210_LED_ON, 4); //点亮第4个灯
21         sleep(1);
22         ioctl(fd_light, GEC210_LED_OFF, 4); //关闭第4个灯
23         sleep(1);        
24     }
25     close(fd_light);
26     return 0;    
27 }
led.c

三)所想

  1)没什么想的今天,就感觉没学到什么东西,希望自己可以抽空学习一下V4L2这个东西,如果学了的话到时候再补充这篇笔记

四)总结

   1)实现了摄像头的功能,解决的菜单栏的问题

  2)菜单栏的拍照拍摄功能没有实现

  3)学习了点灯

  4)第七天就不单独写笔记了,因为第七天没学新东西,项目验收而已,我在第七天尝试了实现拍照功能,但是失败了,的确可以生成一张jpg图片,但是这张图片没有数据,问了一下老师,说是在数据写入的时候出现了问题,测试了一下发现不是数据写入的问题,而是使用read函数读取屏幕信息的时候就失败了,尝试了半天,read依然返回-1,也就是依然失败,最后放弃了。

猜你喜欢

转载自www.cnblogs.com/lzemian-n/p/10259485.html