37种传感器(十八)无源蜂鸣器模块+Stduino Nano&UNO4 J7 ^) W: ^3 Y2 b! z
( M, b" D0 C- i- @/ c# S7 Y8 X6 q4 {5 a. ^; N' D" d
关键词: 51、stm32、arduino、stduino单片机、stduino UNO&Nano、无源蜂鸣器模块
0 F* x; U0 k( J3 h* t! } 说明:
0 j' }% b N, L k- }我们已经在第十六讲介绍过有源蜂鸣器,因此这里只介绍无源蜂鸣器。
$ E$ O- ~6 `' @0 o# k
9 x$ M0 Y& y6 _无源蜂鸣器没有震荡源,因此需要通过脉宽调制(PWM)输入特定的方波电压信号来发声。PWM原理可在其他教程中查找,本系列主要介绍传感器。 演奏一首音乐,最重要的每个音的音调(频率)和节拍(时长)。 C调音符对应的音调频率如下图:(每两个音调频率相差 )
! b4 O' b9 { L5 i
* L+ f( [5 q) Y& @; c # M8 e! @2 d0 t0 G O: L# H5 c5 s& `
我们可以通过tone(pin,frequnce)函数来控制无源蜂鸣器的振动频率,利用delay()来控制节拍,利用noTone(pin)来终止振动。
# G( q$ j& T1 Q: u3 X
0 l3 H$ B. c. z |$ O1 ^
. G' W2 t/ w4 J* O7 ]" C2 q% V8 U2 p
9 _3 h$ B3 j: p& K0 u" Z$ u实验目的:( V+ ]) a) { R" \9 I
控制无源蜂鸣器演奏《天空之城》。天空之城是C调,一拍为四分之一音符长度,每一小节为四拍。 黑点在上为高音,在下为低音,没有为中音乐。而每两个竖杠之间为一小节,每一小节共有四个四分之一拍。下面如果画了一条横线,则是四分之一拍的二分之一,即八分之一拍;画了两条横线,则是四分之一的四分之一,即十六分之一拍。音符后面的横线则是前一音符的延续。
2 f C u! F6 A- R% q
; I2 T2 e* z9 Z9 `$ u, N ) M) `' J) t9 N# ]
器材:
8 W0 R; ^) Y. b( r: |9 i9 k: wStduino UNO/Nano;杜邦线;无源蜂鸣器模块# I) @" }+ R6 e$ l/ c
7 Y% M, F. O9 O! i }: ^4 s5 W* p$ w8 q# {* F
电路连接:! h; x z' J$ [2 q3 q0 B
, v9 _7 |) f( j) D8 X, w& E
% M8 c7 L( l5 F1 E6 o8 }- W" d
7 s0 |( n& L/ s) U. `
代码展示:
5 v4 j$ k& ~. p8 Q: h/ v- <font face="Arial" size="2">#define C0 (2)
c8 g X) l# T5 c
8 ?. V8 T0 y. A" B, A1 U- #define C1_LOW (262)
0 N" H/ P- l# t, } - #define C2_LOW (294)
" I1 Y$ [: M4 Y- f - #define C3_LOW (330)
# P+ W/ E/ ] W2 x6 c. C! K - #define C4_LOW (349)
4 _. S" [, r0 l! ~' Y - #define C5_LOW (392); `. H4 `" e; N
- #define C6_LOW (440)
% m8 ], D i9 z; | - #define C7_LOW (494)% M: `8 ~( E2 o; `- Z6 g' B+ B! u( E
1 q, X7 U4 Z) D- D( g- #define C1 (523)' d- K! Y- N/ `1 a& d
- #define C2 (587)
' j8 c8 K5 u6 y3 n( Z) n, A - #define C3 (659)$ [, C2 p3 b) g+ i2 o
- #define C4 (698)
5 K$ Z, G5 E/ D/ G9 ? - #define C4S (740)//C4## P9 \4 Q5 ^0 T T" \
- #define C5 (784)
$ ^& ` l0 E: U6 |1 _% H - #define C5S (831)//C5#
9 k: L" ~& F" Z0 a/ L5 B - #define C6 (880); {0 N9 Y" |1 F& d2 z8 G
- #define C7 (988)4 b V W! c1 w& ?( g! b7 M! k4 o# Y
. k _' y2 t: R% d$ y" T- #define C1_HIGH (1046)
2 n y& \! Y3 Z - #define C2_HIGH (1175)
) N. f, M2 o5 s/ d0 R/ S' K4 q - #define C3_HIGH (1318)7 B' ~+ z# z: H+ x8 B& f
- #define C4_HIGH (1397)
7 [) R3 J5 D# u4 [$ Y( W) j - #define C5_HIGH (1568)& L$ c$ t' N2 S/ h2 l3 V
- #define C6_HIGH (1760)5 N2 z+ \* b3 J7 h
- #define C7_HIGH (1976)6 Q8 z `6 b+ Z# `' ~1 V n
- . a5 M7 z$ n" }
- #define WHOLE (1)
4 d* X8 b0 H9 C5 L ? - #define HALF (0.5)
8 y) F5 M6 `# A" O9 R; d - #define QUARTER (0.25)
4 f% {) v( G+ T1 }* R - #define EIGHTH (0.125)
1 z; F' N3 G+ o7 ~! f5 y/ ~0 A - #define SIXTEENTH (0.0625)
) k! Y( R9 e4 D& S# n3 }( s - - a5 D ?' q! [& e
- int tune[]= //根据简谱列出各频率& {' ?5 S0 p3 M M- P4 C9 q
- {
! t( q0 t# l% f s% m - C6,C7,
7 _* p& c( S$ }$ w. Z! j. M -
, E( ]: Z$ u6 u$ f/ n! _( F! r/ L - C1_HIGH,C7,C1_HIGH,C3_HIGH,//7 }; R2 Y' `: g2 O
- C7,C3,C3,
% |& U! J2 { o - C6,C5,C6,C1_HIGH,
) ?. k) q& H- L2 V! i# H - C5,C0,C3,C3,) z% Q" y3 q- z3 J5 U/ z I9 q
- C4,C3,C4,C1_HIGH,7 b0 T8 m( q; \9 Z& G0 R; ^+ g
- C3,C0,C1_HIGH,C1_HIGH,C1_HIGH,
8 x6 z5 L. l5 x# H& d' l0 g0 L3 h' j - C7,C4S,C4S,C7,
: ~% k' k$ ~9 W1 ^' c( m - # R- h8 |( p. K8 c; `
- C7,C0,C6,C7,//
7 l8 b. Y2 h: H* }1 b - C1_HIGH,C7,C1_HIGH,C3_HIGH,
/ {" m4 n8 p4 M6 D; O d! B. f - C7,C0,C3,C3,; p3 F7 f' R/ ^% M
- C6,C5,C6,C1_HIGH,
4 q) k. d1 ]1 I% l - C5,C0,C3,
) Z/ x% l" _, w" h2 D X - C4,C1_HIGH,C7,C7,C1_HIGH,$ H7 ^6 L) t; a9 A# a% a8 S( P) r
- C2_HIGH,C2_HIGH,C3_HIGH,C1_HIGH,C0,1 R; B8 Q9 c5 c' [1 S' |$ p
- - O% {6 X7 f, y! w4 Q+ b$ d
- C1_HIGH,C7,C6,C6,C7,C5S,//
# u" g/ w2 r6 F" g - C6,C0,C1_HIGH,C2_HIGH,, n, `# r; {" y& A. c
- C3_HIGH,C2_HIGH,C3_HIGH,C5_HIGH,
" o: N7 c7 y( G - C2_HIGH,C0,C5,C5,
' M* G ]* Z% I% p - C1_HIGH,C7,C1_HIGH,C3_HIGH,C0,C0,
$ I! w; o* S9 Z - C6,C7,C1_HIGH,C7,C2_HIGH,C2_HIGH,
9 E7 ^/ B! ]! {! g" J9 U - C1,C5,C5,C0,
% S' P) W. L% q% K7 z -
& H1 n0 [& e m" c7 I% U0 d - C4_HIGH,C3_HIGH,C2_HIGH,C1_HIGH,// h& G& S3 [3 ^ j5 w4 J# \
- C3_HIGH,
7 m4 U6 s$ [( e - C3_HIGH,C0,C3_HIGH,
# p, `8 Q# u2 M - C6_HIGH,C5_HIGH,C5_HIGH,
, b2 {% p8 W: _. o" | - C3_HIGH,C2_HIGH,C1_HIGH,C0,C1_HIGH,/ b; U+ k% @' F9 M# e& G6 h
- C2_HIGH,C1_HIGH,C2_HIGH,C2_HIGH,C5_HIGH,
, U7 z* v! l" }5 g/ o - C3_HIGH,C0,C3_HIGH,- X' I. s' Z# R# |
- C6_HIGH,C5_HIGH,: u8 n! [) [5 U; @/ f
- C3_HIGH,C2_HIGH,C1_HIGH,C0,C1_HIGH,
" a5 E- c. P3 `0 \1 j - C2_HIGH,C1_HIGH,C2_HIGH,C2_HIGH,C7,
( z/ A& S r& ?0 Y; u- G" ] - 1 P9 t' t- j' X) ?
- C6,C0,C6,C7,
* x C8 @% ^3 ~& Q% ? - 8 Z/ o' y- P0 \- D3 B* {
- C6* q' E2 d: q2 b1 M/ H4 o
- };
; B% x: L/ O6 p. q3 ?& b5 ? - float durt[]= //根据简谱列出各节拍# L# Z7 `0 S; R+ o8 q5 E
- {
& w! H" T1 c/ R0 b( S - EIGHTH,EIGHTH,
$ I! V+ Z# {+ Y, n! ] - 1 j* I7 _$ e# w- n6 G% G( H+ j) y1 a
- QUARTER + EIGHTH,EIGHTH,QUARTER,QUARTER,9 j0 z9 d. N% h
- QUARTER + QUARTER + QUARTER,EIGHTH,EIGHTH, v0 W7 r; ]0 ^) m
- QUARTER + EIGHTH,EIGHTH,QUARTER,QUARTER,$ d& c( o0 C7 N7 E: n# ~$ B6 Z) ]
- QUARTER + QUARTER,QUARTER,EIGHTH,EIGHTH,. B- g0 A1 n6 g4 |+ Q
- QUARTER + EIGHTH,EIGHTH,EIGHTH,QUARTER+EIGHTH,5 r9 t, O' U' e
- QUARTER + QUARTER,QUARTER,EIGHTH,EIGHTH,EIGHTH,4 K3 S% |; O( U9 n% o
- QUARTER + EIGHTH,EIGHTH,QUARTER,QUARTER,* m ]) k& F0 x9 B* ?0 k
-
+ x: A) x# X! \4 W2 j) M - QUARTER+QUARTER,QUARTER,EIGHTH,EIGHTH,
- i0 H& L* M* ~( b - QUARTER+EIGHTH,EIGHTH,QUARTER,QUARTER,& Q/ {5 \. Z, E! c6 N' C
- QUARTER+QUARTER,QUARTER,EIGHTH,EIGHTH,/ h% k g3 N" u: J5 [" i5 V% q
- QUARTER+EIGHTH,EIGHTH,QUARTER,QUARTER,. u2 Z# o+ f6 q+ L: m/ R
- QUARTER+QUARTER+QUARTER,EIGHTH,EIGHTH,
. ^9 W* N9 j6 V0 Y% f - QUARTER,EIGHTH,EIGHTH,EIGHTH,QUARTER,0 [1 N# P+ @' s8 C
- EIGHTH,EIGHTH,EIGHTH,QUARTER,QUARTER,1 t- X; ~+ _. N8 G
- 1 u4 N, q* S4 k) q( D" b3 b. n% A1 {
- QUARTER,EIGHTH,EIGHTH,EIGHTH,QUARTER,QUARTER,
; y- G8 [+ H6 V4 J4 T5 s: W - QUARTER+QUARTER,QUARTER,EIGHTH,EIGHTH,
3 O. D" M$ k% E s - QUARTER+EIGHTH,QUARTER,QUARTER,QUARTER,2 a* M4 O R: s$ i+ v* ^
- QUARTER+QUARTER,QUARTER,EIGHTH,EIGHTH,6 {* U7 }. d' R0 @
- EIGHTH,EIGHTH,QUARTER,QUARTER,
6 v4 g7 X# m! {2 v, F! T - QUARTER+QUARTER,QUARTER,QUARTER,
4 j3 w# q& I0 `( W! @# K - EIGHTH,EIGHTH,QUARTER,QUARTER,EIGHTH,EIGHTH,
$ S, t7 t9 `, _1 I - QUARTER+EIGHTH,EIGHTH,QUARTER,QUARTER,
4 G$ ^3 `$ n4 ]6 G. z6 C -
2 E7 W' s5 v; P - QUARTER,QUARTER,QUARTER,QUARTER,
5 b2 [3 v2 ?- C# S; G# y4 ?" ] - QUARTER+QUARTER+QUARTER,
; @- t6 C; k* i+ i - QUARTER+QUARTER,QUARTER,QUARTER,
. W4 T" x% A. C; S' p$ A: ] - QUARTER+QUARTER,QUARTER,QUARTER,
$ Q: {6 H% C3 V) ` - EIGHTH,EIGHTH,QUARTER,EIGHTH,EIGHTH,
* b( P/ ~+ a8 H( |6 r4 y0 U! I - QUARTER,EIGHTH,EIGHTH,EIGHTH,QUARTER,/ z2 r2 i8 x% v9 {2 ^
- QUARTER+QUARTER,QUARTER,QUARTER,; o1 \( a) ]# u+ T5 R
- QUARTER+QUARTER,QUARTER+QUARTER," m8 T! C. c' N) O
- EIGHTH,EIGHTH,QUARTER+QUARTER,EIGHTH,EIGHTH,
$ s) q- s5 c' f2 l7 c3 u% \0 l - QUARTER,EIGHTH,EIGHTH,EIGHTH,QUARTER,$ o$ H& L7 K0 E$ E
- QUARTER+QUARTER,QUARTER,EIGHTH,EIGHTH,
" U$ H4 E, z5 E" f2 Y - 8 u2 G7 J3 I& f' W2 K6 S8 i7 H1 @9 z
- QUARTER+QUARTER+QUARTER
1 F; S4 y0 E+ r* w1 @* x4 i -
0 F0 Q: ^/ v- P, t0 p2 D) H; d - };* {! {* m+ a. B3 L
. P Z( o) N6 X: u' W: L- int Time = 2000;
* d, e, j; R; W v6 Q- A( ]5 t - int BUZZER = A0;1 E. n2 v2 J( H% d" l, |5 R" r
2 {$ x3 C& g1 B4 g3 C# P2 b0 N) b- int length;
3 E# r Q5 b. i, s9 P. P
" f, e; R& \7 f- I% v( L- void setup()' s, U! h% h9 W# l7 Q* v
- {) T$ `" Z/ A& V$ X1 E' X$ q. }
- // put your setup code here, to run once:
' q) N% U: U- D' e
K" O& Y2 M5 P* i7 [- length=sizeof(tune)/sizeof(tune[0]); //计算长度8 P6 U5 v2 g3 ]$ I# E9 K; {
- }1 W+ u: V+ L4 E4 N }/ }
! r# ~2 u2 Y& L& W# e8 k1 Q- void loop()# w, X4 T1 `' x" r! X! \5 D! H4 c
- {
0 I3 G/ Q! \) Z, m - // put your main code here, to run repeatedly:
" N) t {3 J2 e$ K; p - for(int i=0;i<length;i++)3 g: k$ t* P7 q; w. F+ J
- {3 Q2 G+ Q4 j v9 x O* e
- if(tune[i]!=0)
' ~2 n# N, x/ g - {
1 |4 j/ U/ ^; K' p# s1 R* |/ u - tone(BUZZER,tune[i]);! O+ U2 Q* H% F" s$ x
- }
" p( C& b2 o/ Y L5 ?0 n) R - else
x( ]4 {+ p# Z$ Q - {7 W N. Y! d* C& h# g
- noTone(BUZZER);
7 C! ]+ M* w" {. F - }: ]" X+ q) B6 G% R0 K' T- O) y
- delay(Time*durt[i]); //这里用来乐曲速度。
+ ^, [8 l7 T1 t" o. p5 b - }: m/ Q3 K7 O+ h
- delay(2000);/ a( r0 g* \9 p& j4 F" F) E
- }</font>
复制代码 & ]: K$ m5 J, h& H. p4 B; {8 w' z
- V# J H" f J9 O
. w- C/ t$ T$ v/ F" F& |/ l
1 k# Q: N' y6 ^# OStduino IDE是一款面向32位处理器快速入门学习的集成开发平台,目前已经支持Arduino_Core_STM32框架,集聚快捷、高效、免费、开源、易得于一身,软件还集成了GDB调试功能。# b0 A4 p6 x$ t' O3 U/ T: J$ w/ J
IDE当前支持的功能有: - GDB调试
- 封装库下载安装
- 代码自动补全提示
- 中英文模式
- UTF-8\GBK编码格式
- 代码快速格式化
- SWD\串口程序下载&调试(已验证)
- DFU程序下载方式(待验证)
- USB HID程序下载方式(待验证)
- maple DFU程序下载方式(待验证)
- maple DFU2程序下载方式(待验证)
- MassStorage程序下载方式(待验证)
3 \' R: {6 h- g% E' {; a
1 Z Z3 C$ W/ F. T l) E y( _5 s
更多功能细节请前往www.stduino.com进行了解 已经支持的芯片&板型列表: - Stduino UNO&Nano
- Nucleo 144 boards
- Nucleo 64 boards
- Nucleo 32 boards
- Discovery boards
- Eval boards
- STM32MP1 series coprocessor boards
- Generic STM32F0 boards
- Generic STM32F1 boards
- Generic STM32F3 boards
- Generic STM32F4 boards
- Generic STM32H7 boards
- Generic STM32L0 boards
- 3D printer boards
- LoRa boards
- Electronic Speed Controller boards
- Generic flight controllers
- Garatronics boards
- Midatronics boards, [# I( T# P# T5 a
( l1 q' I3 D! k% e; d
更多功能集成正在进行中~ 5 J9 K; X8 u" ~) I) Q8 u* H
|