/********************************************************************************* * 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 * ChangeLog: 1, Release initial version on "2018/10/14 12:13:26" * ********************************************************************************/ #include #include #include #include #include #include #include #include #include #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; }