这两天有点时间,捣鼓了下那闲置好久的树莓派,把普通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 1

int 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() == -){
printf("WiringPi setup failed!\n");
return ;
}else{
isok = ;
}
}
return ;
} 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 = ;c < count; c++){
pwmWrite(PIN_NO,value);
//printf("%d\n",count - c);
delay(interval);
pwmWrite(PIN_NO,-);
delay(interval);
} stopAlarm();
} void stopAlarm(){
if(!init())
return; pwmWrite(PIN_NO,-);
//pwmSetMode(PWM_MODE_BAL);
}

alarm_test.c

#include <stdio.h>
#include <stdlib.h>
#include "alarm.h" int main(int argc, char *argv[])
{
if(argc < ){
printf("arg error! At least 3 parameters!\n");
return ;
}else{
int count = atoi(argv[]);
int value = atoi(argv[]);
int interval = atoi(argv[]);
printf("Count:%d\tValue:%d\tInterval:%d\n", count, value, interval);
printf("Alarm start!\n");
alarm(count, value, interval);
printf("Alarm complete!\n");
}
return ;
}

编译:

gcc -c -o alarm.o alarm.c -lwiringPi
gcc -o alarm_test alarm_test.c alarm.o -lwiringPi

执行:

sudo ./alarm_test   

用普通PC主板的蜂鸣器给树莓派(RPI)加个报警器的更多相关文章

  1. 树莓派 Learning 002 装机后必要的操作 --- 08 实现PC端 远程登入 树莓派 --- 法2 远程登录树莓派的图形桌面

    树莓派 装机后必要的操作 - 实现PC端 远程登入 树莓派 我的树莓派型号:Raspberry Pi 2 Model B V1.1 装机系统:NOOBS v1.9.2 PC端系统:win10 x64 ...

  2. 树莓派 Learning 002 必备的操作 --- 08 实现PC端 远程登入 树莓派 --- 法1 远程登入树莓派的命令行状态

    树莓派 必备的操作 - 实现PC端 远程登入 树莓派 - 法1 远程登入树莓派的命令行状态 我的树莓派型号:Raspberry Pi 2 Model B V1.1 装机系统:NOOBS v1.9.2 ...

  3. PC远程传文件到树莓派(PSCP详细版)

    1.下载pscp软件 下载地址:http://www.pc6.com/softview/SoftView_456976.html 百度云下载地址:https://pan.baidu.com/s/1bZ ...

  4. 树莓派 - RPi.GPIO

    RPi.GPIO是通过Python/C API实现的,C代码操作底层寄存器, python通过Python/C API调用这些C接口. 这是关于RPi.GPIO项目的介绍. 其中提到了有python ...

  5. pc网页到移动端怎么自动加载适应移动端的css。

    1.通过link标签判断加入 以前听说过在link标签中加media = "handheld",但这个用到安卓或苹果都不管用,后来尝试以下方法,是管用的. <link hre ...

  6. 树莓派RPi.GPIO+Flask构建WebApi实现远程控制

    #!/usr/bin/env python3 # -*- coding: utf-8 -*- import RPi.GPIO as GPIO from flask import Flask, requ ...

  7. Linux主机上实现树莓派的交叉编译及文件传输,远程登陆

    0.环境 Linux主机OS:Ubuntu14.04 64位,运行在wmware workstation 10虚拟机 树莓派版本:raspberry pi 2 B型. 树莓派OS:官网下的的raspb ...

  8. 树莓派之web服务器搭建

    树莓派之web服务器搭建 (一)使用ufw创建防火墙 设置目的:可以完全阻止对树莓派的访问也可以用来配置通过防火墙对特点程序的访问.使用防火墙更好的保护树莓派. 准备工作 1.带有5V电源的树莓派 2 ...

  9. 树莓派安装FLASK服务;并在端网页读取 GPIO状态和系统时间

    做过一些物联网的作品:因为不想一直做APP来控制,因为不能每个人都去下载你自己做的APP,浏览器大家都是有的:那么每个人通过浏览器WEB来访问我们服务器,岂不是很简单和方便,采用flask+pytho ...

随机推荐

  1. CDQ分治题目小结

    CDQ分治属于比较特殊的一类分治,许多问题转化为这类分治的时候,时空方面都会有很大节省,而且写起来没有这么麻烦. 这类分治的特殊性在于分治的左右两部分的合并,作用两部分在合并的时候作用是不同的,比如, ...

  2. 李洪强实现横向滚动的View<一>

    今天做一个小的view的效果(纯代码),虽然这个view做起来 并不是很难,但是他是为后面我要实现的功能做一个铺垫. 01 创建CFTyreView,继承自UIView 02 来到.m文件. 2.1 ...

  3. *[codility]StoneWall

    https://codility.com/demo/take-sample-test/stone_wall 拼石块.用最少的方块.一开始想了想用贪心,是可行的,就是尽量每次把当前的高度往右延伸到最多, ...

  4. asp.net 框架初接触

    1. 在web层的Default.aspx里只有最基本的UI代码 2. 在web层的Default.aspx.cs里第一行创建一个用户业务对象UserBO (注意添加引用,下同) protected ...

  5. SPRING IN ACTION 第4版笔记-第三章ADVANCING WIRING-006-给bean运行时注入值(Environment,Property文件)

    一. 直观的给bean注入值如下: @Bean public CompactDisc sgtPeppers() { return new BlankDisc( "Sgt. Pepper's ...

  6. WPF 3D 小小小小引擎 - ·WPF 3D变换应用

    原文:WPF 3D 小小小小引擎 - ·WPF 3D变换应用 WPF可以提供的3D模型使我们可以轻松地创建3D实体,虽然目前来看还很有一些性能上的问题,不过对于一些简单的3D应用应该是可取的,毕竟其开 ...

  7. bzoj2298

    不难发现必然是两个人之间话产生矛盾或自身话有问题很显然,当ai>aj时,若ai<n-bj时i,j两人话矛盾ai<ai<n-bj,这东西有没有数轴上的线段的既视感?我们只要求出做 ...

  8. [HDU POJ] 逆序数

    HDU 1394 Minimum Inversion Number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/3276 ...

  9. 调试MSBuild脚本

    http://blogs.msdn.com/b/visualstudio/archive/2010/07/06/debugging-msbuild-script-with-visual-studio. ...

  10. javascript中的 && 与 || 的运用

    a && b : 将a, b转换为Boolean类型, 再执行逻辑与, true返回b, false返回a a || b : 将a, b转换为Boolean类型, 再执行逻辑或, tr ...