基于Dragonboard 410c的声控灯(二)
来源:互联网 发布:zcash 挖矿 linux 编辑:程序博客网 时间:2024/04/27 17:42
之前在http://blog.csdn.net/weixin_40109283/article/details/78861380博客中已经对基于Dragonboard 410c的声控灯的硬件设计方案进行了介绍,现在给大家介绍一下实现该功能的软件编程设计.
通过GPIO口来实现声控灯的基本原理:
1) 导入所使用到的GPIO的节点,导入之后才能对GPIO口进行读写;
2) 对GPIO节点进行读写数据进而实现对声音传感器和LED的操作;
3) 完成GPIO节点的读写操作之后,须导出GPIO节点.
在Linux环境下建立sound_ctrl_led.c文件
具体代码实现如下:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#define GPIO_SOUND 13
#define GPIO_LED 69
#define NUM 100
int export_gpio(int gpio)
{
int fd;
char buf[NUM];
sprintf(buf, "%d", gpio);
fd = open("/sys/class/gpio/export", O_WRONLY);
if (fd < 0) {
printf("Open export file failed!\n");
return -1;
} else if (write(fd, buf, strlen(buf)) < 0) {
printf("Write export file failed!\n");
return -1;
}
close(fd);
return 0;
}
void unexport_gpio(int gpio)
{
int fd;
char buf[NUM];
sprintf(buf, "%d", gpio);
fd = open("/sys/class/gpio/unexport", O_WRONLY);
if (fd < 0) {
printf("Open unexport file failed!\n");
}
write(fd, buf, strlen(buf));
close(fd);
}
int get_gpio_value(int gpio)
{
int fd;
int value;
char val;
char buf[NUM];
sprintf(buf, "/sys/class/gpio/gpio%d/value", gpio);
fd = open(buf, O_RDONLY);
if (fd < 0) {
printf("Open value file failed!\n");
return -1;
}
read(fd, &val, 1);
value = atoi(&val);
return value;
}
int set_gpio_value(int gpio, int value)
{
int fd;
char val[1];
char buf[NUM];
sprintf(buf, "/sys/clas/gpio/gpio%d/direction", gpio);
fd = open(buf, O_WRONLY);
if (fd < 0) {
printf("Open dirction file faided!\n");
return -1;
}
write(fd, "out", 3);
close(fd);
sprintf(buf, "/sys/class/gpio/gpio%d/value", gpio);
fd = open(buf, O_WRONLY);
if (fd) {
printf("Open value file failed!\n");
return -1;
}
sprintf(val, "%d", value);
write(fd, val, 1);
close(fd);
return 0;
}
int main(void)
{
int sound_value;
int led_value;
if (!export_gpio(GPIO_SOUND)) {
printf("Export GPIO_%d failed!\n", GPIO_SOUND);
return -1;
}
if (!export_gpio(GPIO_LED)) {
printf("Export GPIO_%d failed!\n", GPIO_LED);
goto err1;
return -1;
}
while (1) {
sound_value = get_gpio_value(GPIO_SOUND);
if (!sound_value) {
set_gpio_value(GPIO_LED, 1);
printf("Open the LED\n");
sleep(1);
} else {
set_gpio_value(GPIO_LED, 0);
printf("Close the LED\n");
}
}
err1:
unexport_gpio(GPIO_SOUND);
return -1;
unexport_gpio(GPIO_SOUND);
unexport_gpio(GPIO_LED);
return 0;
}
有了以上的代码之后,在Linux环境下通过arm-linux-gcc交叉编译工具来编译代码,生成可执行文件.命令如下:
$ arm-linux-gcc sound_ctrl_led.c -o sound_ctrl_led
将sound_ctrl_led文件下载到410c开发板,修改权限并执行,命令如下:
# chmod 777 sound_ctrl_led
# ./sound_ctrl_led
这样就可以实现声控灯的功能了.
- 基于Dragonboard 410c的声控灯(二)
- 基于Dragonboard 410c的声控灯(一)
- 基于Dragonboard 410c的燃气烟雾检测器(二)
- 基于Dragonboard 410c的音乐储钱罐(二)
- 基于Dragonboard 410c的智能遥控器(二)
- 基于Dragonboard 410c的智能小车(二)
- 基于dragonboard 410c的机械手臂(二)
- 基于Dragonboard 410c的指纹锁(二)
- 基于Dragonboard 410c 的自动感应调色灯(二)
- 基于Dragonboard 410c 的自动感应调色灯
- 基于Dragonboard 410c的PMIC简介
- 基于Dragonboard 410c的触摸屏调试
- 基于Dragonboard 410c的智能开关
- 基于Dragonboard 410c的mipi了解
- 基于Dragonboard 410c的camera调试
- 基于Dragonboard 410c的启动分析
- 基于DragonBoard 410c的遥控炮台二之舵机驱动(下)
- 基于DragonBoard 410c的智能门铃系列二之软件总框架
- 2017.0720-2017.1128
- 导航下拉菜单被遮住或显示不全问题所在和解决办法
- linux-ubuntu 命令行安装jdk8
- 学shiro的分享
- STL — vector源代码剖析
- 基于Dragonboard 410c的声控灯(二)
- Badboy下载地址
- PriorityQueue 源码分析
- 【greenplum】greenplum 数据字典实践--通过sql脚本查询表结构,拼装建表语句
- java反射机制浅析
- Python 正则表达式 匹配邮箱地址
- 原生JS、CSS3 上拉刷新效果的实现。
- 【tf系列2】参数说明
- 模块获取工具