简易有源蜂鸣器——树莓派基于C语言编程

蜂鸣器模块功能实现
  1. 驱动方式:
惯用驱动蜂鸣器的方式有两种:一种是 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 的方波,再通过三极管放大就可以驱动这个蜂鸣器了。
  1. 简易有源蜂鸣器实现功能:每100ms响一下而后停100ms蜂鸣器
  1. 程序头文件和引脚宏定义
  1. 对于main函数,需先调用int wiringPiSetup (void)函数来初始化树莓派引脚,若该函数返回值为-1则说明初始化失败
  1. 引脚配置使用pinMode (int pin, int mode)
Pin:配置的引脚
Mode:指定引脚的IO模式,可取的值:INPUT、OUTPUT、PWM_OUTPUT,GPIO_CLOCK
  1. 使用void digitalWrite (int pin, int value)
Value:引脚输出的电平值,可取值:HIGH代表输出高电平,LOW代表输出低电平
  1. 程序编写完成后,接下来就是编译问题,若使用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 }

 

posted @ 2020-11-22 13:34  .ivan  阅读(954)  评论(0编辑  收藏  举报