首页 > 代码库 > 用普通PC主板的蜂鸣器给树莓派(RPI)加个报警器
用普通PC主板的蜂鸣器给树莓派(RPI)加个报警器
这两天有点时间,捣鼓了下那闲置好久的树莓派,把普通PC主板的蜂鸣器作为树莓派的报警器用。
Raspberry Pi有许多的GPIO(General Purpose Input Output:通用输入/输出),可以用来控制和读取数字电路中TTL电平的逻辑0和逻辑1。
我们要使用RPi的GPIO首先要知其GPIO的定义,常用的有两种编号定义:WiringPi Pin和BCM GPIO。
GPIO的驱动库我这里介绍两种给大家,一种为C语言的WiringPi,另一种为python的RPi.GPIO,本例使用的是WiringPi。
接线比较简单,把蜂鸣器的红线接GPIO1口(pin:12,即BCM_GPIO 18),黑线接GND(pin:6)。
至于为什么接GPIO1口,主要是因为树莓派只有这个口支持PWM输出。
pin编号如下图所示:
具体代码如下:
alarm.h
#include <wiringPi.h>#define PIN_NO 1int init();void alarm(int count, int value, int interval);void stopAlarm();
alarm.c
#include <stdio.h>#include <stdlib.h>#include "alarm.h"static short isok;int init(){ if(!isok){ if(wiringPiSetup() == -1){ printf("WiringPi setup failed!\n"); return 0; }else{ isok = 1; } } return 1;}void alarm(int count, int value, int interval){ if(!init()) return; //printf("Speaker pin: GPIO%d\n",PIN_NO); pinMode(PIN_NO,PWM_OUTPUT);//设置引脚模式,模式为INPUT、OUTPUT 或者 PWM_OUTPUT,注意:仅wiringPi引脚1(即BCM_GPIO 18)支持PWM输出 pwmSetMode(PWM_MODE_MS); //pwmSetRange(1024); int c; for(c = 0;c < count; c++){ pwmWrite(PIN_NO,value); //printf("%d\n",count - c); delay(interval); pwmWrite(PIN_NO,-1); delay(interval); } stopAlarm();}void stopAlarm(){ if(!init()) return; pwmWrite(PIN_NO,-1); //pwmSetMode(PWM_MODE_BAL);}
alarm_test.c
#include <stdio.h>#include <stdlib.h>#include "alarm.h"int main(int argc, char *argv[]){ if(argc < 4){ printf("arg error! At least 3 parameters!\n"); return 1; }else{ int count = atoi(argv[1]); int value = http://www.mamicode.com/atoi(argv[2]); int interval = atoi(argv[3]); printf("Count:%d\tValue:%d\tInterval:%d\n", count, value, interval); printf("Alarm start!\n"); alarm(count, value, interval); printf("Alarm complete!\n"); } return 0;}
编译:
gcc -c -o alarm.o alarm.c -lwiringPigcc -o alarm_test alarm_test.c alarm.o -lwiringPi
执行:
sudo ./alarm_test 10 1000 1000
用普通PC主板的蜂鸣器给树莓派(RPI)加个报警器
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。