New file |
| | |
| | | /********************************************************************************* |
| | | * Copyright: (C) 2018 LingYun IoT System Studio |
| | | * All rights reserved. |
| | | * |
| | | * Filename: led.c |
| | | * Description: This file is used to control Passive buzzer or Active buzzer |
| | | * |
| | | * pi@raspberrypi:~ $ gpio readall show BCM and wPi pinmap |
| | | * |
| | | * VCC ---- 5V/3.3V |
| | | * GND ---- GND |
| | | * I/O ---- GPIO.18 ---- GPIO.1 |
| | | * BCM wPi |
| | | * |
| | | * Version: 1.0.0(2018/10/14) |
| | | * Author: Guo Wenxue <guowenxue@gmail.com> |
| | | * ChangeLog: 1, Release initial version on "2018/10/14 12:13:26" |
| | | * |
| | | ********************************************************************************/ |
| | | |
| | | #include <stdio.h> |
| | | #include <stdlib.h> |
| | | #include <unistd.h> |
| | | #include <fcntl.h> |
| | | #include <dirent.h> |
| | | #include <string.h> |
| | | #include <time.h> |
| | | #include <errno.h> |
| | | |
| | | #include <wiringPi.h> |
| | | #include "beep.h" |
| | | |
| | | //#define CONFIG_ACTV_BEEP |
| | | |
| | | int main(int argc, char *argv[]) |
| | | { |
| | | wiringPiSetup(); |
| | | |
| | | while(1) |
| | | { |
| | | #ifdef CONFIG_ACTV_BEEP |
| | | turn_active_beep(ON); |
| | | #else |
| | | turn_passive_beep(ON, BEEP_FREQ); |
| | | #endif |
| | | sleep(1); |
| | | |
| | | #ifdef CONFIG_ACTV_BEEP |
| | | turn_active_beep(OFF); |
| | | #else |
| | | turn_passive_beep(OFF, BEEP_FREQ); |
| | | #endif |
| | | sleep(1); |
| | | } |
| | | |
| | | return 0; |
| | | } |
| | | |
| | | |
| | | int turn_passive_beep(int cmd, int freq) |
| | | { |
| | | int range; |
| | | |
| | | if(freq<2000 || freq>2500) |
| | | { |
| | | printf("Beep set invalid PWM frequency!\n"); |
| | | return -1; |
| | | } |
| | | |
| | | if(OFF == cmd) |
| | | { |
| | | pwmWrite(PWM_PIN, 0); |
| | | pinMode(PWM_PIN, INPUT) ; |
| | | } |
| | | else |
| | | { |
| | | /* Set GPIO as PWM output mode */ |
| | | pinMode(PWM_PIN, PWM_OUTPUT) ; |
| | | |
| | | /* Set PWM mode as ms mode */ |
| | | pwmSetMode(PWM_MODE_MS); |
| | | |
| | | /* Set PWM clock: 19.2MHz/32=600KHz */ |
| | | pwmSetClock(32); |
| | | |
| | | /* Set PWM frequency */ |
| | | range=600000/freq; |
| | | pwmSetRange(range); |
| | | |
| | | /* Set PWM duty 50% */ |
| | | pwmWrite(PWM_PIN, range/2); |
| | | } |
| | | } |
| | | |
| | | /* Turn ON/OFF buzzer, Active Buzzer can not set frequency */ |
| | | int turn_active_beep(int cmd) |
| | | { |
| | | |
| | | /* Active buzzer VCC connect to: |
| | | 5V: Both high and low level will be on |
| | | 3.3V: Low level be on and High level be off |
| | | |
| | | So we use INPUT or OUTPUT to control the Beeper |
| | | */ |
| | | if(OFF == cmd) |
| | | { |
| | | pinMode(PWM_PIN, INPUT); |
| | | } |
| | | else |
| | | { |
| | | pinMode(PWM_PIN, OUTPUT); |
| | | digitalWrite(PWM_PIN, LOW); |
| | | } |
| | | |
| | | return 0; |
| | | } |
| | | |
| | | |