代码拉取完成,页面将自动刷新
同步操作将从 刘煜/FSMP1A开发板示例代码 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
#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;
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。