加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
button.c 1.99 KB
一键复制 编辑 原始数据 按行查看 历史
刘煜 提交于 2024-05-08 09:36 . 第一次提交
#include <gpiod.h>
#include <stdio.h>
#include <unistd.h>
#include <linux/input.h>
//控制蜂鸣器发出指定频率的声音
void tone(int hz)
{
FILE* fp = fopen("/dev/input/event0", "w");
if (fp == NULL)
{
perror("fopen");
return;
}
struct input_event event;
event.type = EV_SND; //声音事件
event.code = SND_TONE; //设置声音音高
//atoi函数将字符串转为整数
event.value = hz; //发出指定频率的声音
//向文件中写入二进制数据
//参数1:写入数据的起始地址
//参数2:写入数据大小
//参数3:写入次数
//参数4:写入的文件
fwrite(&event, sizeof event, 1, fp);
fclose(fp);
}
int main()
{
//打开GPIO控制器
struct gpiod_chip* gpiof = gpiod_chip_open_by_label("GPIOF");
if (gpiof == NULL)
{
perror("GPIOF");
return 1;
}
//获取GPIO引脚
struct gpiod_line* key2 = gpiod_chip_get_line(gpiof, 7);
if (key2 == NULL)
{
perror("PF7");
return 1;
}
//获取火焰传感器引脚
struct gpiod_line* flame = gpiod_chip_get_line(gpiof, 5);
if (flame == NULL)
{
perror("PF5");
return 1;
}
//占用GPIO引脚,并将GPIO引脚设置为输入模式
int error = gpiod_line_request_input(key2, "button");
if (error)
{
perror("key2");
return 1;
}
error = gpiod_line_request_input(flame, "button");
if (error)
{
perror("flame");
return 1;
}
while (1)
{
if (gpiod_line_get_value(flame) == 1)
{
printf("发现火情\n");
tone(1000);
}
if (gpiod_line_get_value(key2) == 0)
{
printf("按键按下,停止报警\n");
tone(0);
}
sleep(1);
}
//释放GPIO引脚
gpiod_line_release(key2);
gpiod_line_release(flame);
//关闭GPIO控制器
gpiod_chip_close(gpiof);
return 0;
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化