简易有源蜂鸣器——树莓派基于C语言编程
蜂鸣器模块功能实现
-
驱动方式:
惯用驱动蜂鸣器的方式有两种:一种是 PWM 输出口直接驱动,另一种是利用I/O 定时翻转电平产生驱动波形对蜂鸣器进行驱动。
PWM 输出口直接驱动是利用 PWM 输出口本身可以输出一定的方波来直接驱动蜂鸣器。在单片机的软件设置中有几个系统寄存器是用来设置 PWM 口的输出的,可以设置占空比、周期等等,通过设置这些寄存器产生符合蜂鸣器要求的频率的波形之后,只要打开 PWM 输出, PWM 输出口就能输出该频率的方波,这个时候利用这个波形就可以驱动蜂鸣器了。比如频率为 2000Hz的蜂鸣器的驱动,可以知道周期为 500μs,这样只需要把 PWM 的周期设置为 500μs,占空比电平设置为 250μs,就能产生一个频率为 2000Hz 的方波,通过这个方波再利用三极管就可以去驱动这个蜂鸣器了。
而利用 I/O 定时翻转电平来产生驱动波形的方式会比较麻烦一点,必须利用定时器来做定时,通过定时翻转电平产生符合蜂鸣器要求的频率的波形,这个波形就可以用来驱动蜂鸣器了。比如为 2500Hz 的蜂鸣器的驱动,可以知道周期为 400μs,这样只需要驱动蜂鸣器的 I/O 口,每 200μs 翻转一次电平就可以产生一个频率为2500Hz,占空比为 1/2duty 的方波,再通过三极管放大就可以驱动这个蜂鸣器了。
-
简易有源蜂鸣器实现功能:每100ms响一下而后停100ms蜂鸣器
-
程序头文件和引脚宏定义
-
对于main函数,需先调用int wiringPiSetup (void)函数来初始化树莓派引脚,若该函数返回值为-1则说明初始化失败
-
引脚配置使用pinMode (int pin, int mode)
Pin:配置的引脚
Mode:指定引脚的IO模式,可取的值:INPUT、OUTPUT、PWM_OUTPUT,GPIO_CLOCK
-
使用void digitalWrite (int pin, int value)
Value:引脚输出的电平值,可取值:HIGH代表输出高电平,LOW代表输出低电平
-
程序编写完成后,接下来就是编译问题,若使用c++编写的代码则使用第一条语句,若使用c编写则使用第二条语句
g++ -Wall -o test test.cpp -lwiringPi
//使用C++编程 , -Wall 是为了使能所有警告,以便发现程序中的问题
gcc -Wall -o test test.c -lwiringPi
//使用C语言编程, -lwiringPi是链接wiringPi库, -lpthread是链接softPwm
8、 编译完之后,并将模块相应引脚接到树莓派上,执行命令./test,则可以实现程序中相应功能
1 #include <stdio.h> 2 #include <wiringPi.h> 3 4 #define voice_pin 1 //定义蜂鸣器引脚 5 6 int main() 7 { 8 if(wiringPiSetup() == -1) //初始化树莓派引脚 9 { 10 printf("Error!\n"); 11 return 1; 12 } 13 pinMode(voice_pin, OUTPUT); //配置引脚为输出模式 14 while(1) 15 { 16 digitalWrite(voice_pin, HIGH); //高电平 17 delay(100); 18 digitalWrite(voice_pin, LOW); //低电平 19 delay(100); 20 } 21 }