用普通PC主板的蜂鳴器給樹莓派(RPI)加個報警器

這兩天有點時間,搗鼓了下那閒置很久的樹莓派,把普通PC主板的蜂鳴器做爲樹莓派的報警器用。python

Raspberry Pi有許多的GPIO(General Purpose Input Output:通用輸入/輸出),能夠用來控制和讀取數字電路中TTL電平的邏輯0和邏輯1。c++

咱們要使用RPi的GPIO首先要知其GPIO的定義,經常使用的有兩種編號定義:WiringPi Pin和BCM GPIO。spa

GPIO的驅動庫我這裏介紹兩種給你們,一種爲C語言的WiringPi,另外一種爲python的RPi.GPIO,本例使用的是WiringPi。code

接線比較簡單,把蜂鳴器的紅線接GPIO1口(pin:12,即BCM_GPIO 18),黑線接GND(pin:6)。blog

至於爲何接GPIO1口,主要是由於樹莓派只有這個口支持PWM輸出。it

pin編號以下圖所示:io

 

 

具體代碼以下:編譯

alarm.hast

#include <wiringPi.h>

#define PIN_NO 1

int init();

void alarm(int count, int value, int interval);

void stopAlarm();

 

alarm.cclass

#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 = 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 -lwiringPi
gcc -o alarm_test alarm_test.c alarm.o -lwiringPi

執行:

sudo ./alarm_test 10 1000 1000
相關文章
相關標籤/搜索