这里我们通过设置按钮 完成长按三秒 重启树莓派的功能。
代码解析:
首先我们连接硬件:
按钮G接 GND S接GPIO端口 V接5V
根据引脚图连接硬件
#define KEY 23 设置引脚号
wiringPiSetupGpio() 初始化wiringPi 这里使用wiringPi编号
alarm(n) 表示 n 秒后 发送 一个 SIGALRM信号
alarm(0) 取消之前的alarm指令 即 取消n秒后的指令
signal(SIGALRM,handler) 设置收到SIGALRM信号后的处理函数
处理函数handler:接收到对应信号便重启树莓派,reboot为树莓派重启指令。
void handler(int signo)
{
printf("执行reboot\n");
system("sudo reboot");
}
按键抖动通过usleep(int n) 规避抖动时间
睡眠 n 微秒 1秒 = 1 000 000 微秒
代码:
#include <stdio.h>
#include <wiringPi.h>
#include <unistd.h>
#include <stdlib.h>
#include <signal.h>
//指定引脚接口
#define KEY 23
void handler(int signo)
{
printf("执行reboot\n");
system("sudo reboot");
}
int main(int arg,char** argv)
{
if(-1==wiringPiSetupGpio())
{
return -1;
}
signal(SIGALRM,handler);
pinMode(KEY,INPUT);
//该按钮为低电平按钮 按下为低
while(1)
{
if(digitalRead(KEY)==LOW)
{
//跳过前沿抖动
usleep(20000);
//确认按下
if(digitalRead(KEY)==LOW)
{
alarm(3);
while(digitalRead(KEY)==LOW);
usleep(20000);//跳过后沿抖动
if(digitalRead(KEY)==HIGH)
{
alarm(0);
}
}
}
}
return 0;
}
网友评论