iT邦幫忙

2024 iThome 鐵人賽

DAY 25
0
自我挑戰組

硬體學習日記系列 第 25

Day-25 arduino介紹-7 元件 蜂鳴器

  • 分享至 

  • xImage
  •  

今天要來介紹的是arduino裡會發出聲音的元件-蜂鳴器!

buzzer

https://ithelp.ithome.com.tw/upload/images/20240902/20168362qnJ5cZEMpc.png

蜂鳴器在模擬器中的模樣是這樣~有兩個引腳,黑色是Negative,紅色是Positive。

雖然說顏色有分正負,感覺好像正的要接電、負的要接地,我把紅色接3號腳位、黑色接GND後蜂鳴器會叫,但反過來接的話蜂鳴器依舊會叫XD可能這裡還需要再研究一下。

那與蜂鳴器有關的function主要有兩個~tone()及noTone()。

tone()

他的結構是tone(pin,frequency,duration),第三個參數可有可無,他也可以是tone(pin,frequency)。

pin就是寫入使用幾號腳位來連接蜂鳴器,frequency是聲音的頻率,duration是蜂鳴器要持續叫多久,單位跟delay一樣都是microsecond。

先來介紹frequency的部分~音符Do~Si相信不是陌生的東西,那每一個音都有各自的頻率,底下列個表格:

音符 Do Re Mi Fa So La Si
低音 262 294 330 349 392 440 494
中音 523 587 659 698 784 880 988
高音 1047 1175 1319 1397 1568 1760 1976

所以想要蜂鳴器發出哪個音,就把他的頻率寫入第二個參數位子就好!

接著是duration的部分,tone如果有使用duration的話,會很神奇(自己覺得XD)!

在tone裡的duration,是不會讓整個程式停下來等待的。如果今天是使用delay(1000),則執行到此時,整個程式會維持當前狀態1秒後再繼續往下執行;但在tone,即使duration參數寫1000,程式依舊會繼續往下執行,不會維持當前狀態1秒再往下。

舉例來說明:

int buzzer_pin = 3;

void setup()
{
	pinMode(buzzer_pin,OUTPUT);
}

void loop()
{
	tone(buzzer_pin,523,500);
	delay(1000);
}

在這個程式中,蜂鳴器會持續叫0.5秒,這0.5秒的同時會一起執行底下的delay(1000),所以當tone叫了0.5秒後,下一行的delay(1000)就只剩0.5秒(1000-500)要執行。所以這裡會呈現蜂鳴器連續叫0.5秒後,停頓0.5秒,再繼續叫0.5秒、停頓0.5秒、不斷輪迴直到關閉執行。

所以假如改寫成:

void loop()
{
	tone(buzzer_pin,523,2000);
	delay(1000);
}

那蜂鳴器就會一直叫,因為他的duration大於delay時間,delay都結束了但duration還沒。

另一種寫法就是不在tone裡寫入duration,延遲時間靠delay決定,就可以避免時間平行的狀態發生。

不過,如果不在tone裡寫duration,就必須靠noTone來關掉蜂鳴器!接著要來介紹的就是noTone這個function。

noTone()

他的結構是noTone(pin),只要寫入要關掉的蜂鳴器的連接腳位就可以了。

如果想要指定關閉的時間,可以用delay來幫忙。

舉個例子:

void loop()
{
	tone(buzzer_pin,523);
	delay(1000);
	noTone(buzzer_pin);
	delay(1000);
}

這樣的結果就會是,蜂鳴器發出Do的聲音1秒、然後關掉1秒,再發出1秒、關掉1秒,這樣重複執行。

那目前的狀況是蜂鳴器一次只能發出一個音,所以如果要讓蜂鳴器改發出其他音,就要先使用noTone關掉蜂鳴器、再使用tone使蜂鳴器發出想要的下一個聲音。

今天就先到這邊~


上一篇
Day-24 arduino介紹-6 LCD元件
下一篇
Day-26 arduino介紹-8 keypad
系列文
硬體學習日記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言