今天要來介紹的是arduino裡會發出聲音的元件-蜂鳴器!
蜂鳴器在模擬器中的模樣是這樣~有兩個引腳,黑色是Negative,紅色是Positive。
雖然說顏色有分正負,感覺好像正的要接電、負的要接地,我把紅色接3號腳位、黑色接GND後蜂鳴器會叫,但反過來接的話蜂鳴器依舊會叫XD可能這裡還需要再研究一下。
那與蜂鳴器有關的function主要有兩個~tone()及noTone()。
他的結構是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(pin),只要寫入要關掉的蜂鳴器的連接腳位就可以了。
如果想要指定關閉的時間,可以用delay來幫忙。
舉個例子:
void loop()
{
tone(buzzer_pin,523);
delay(1000);
noTone(buzzer_pin);
delay(1000);
}
這樣的結果就會是,蜂鳴器發出Do的聲音1秒、然後關掉1秒,再發出1秒、關掉1秒,這樣重複執行。
那目前的狀況是蜂鳴器一次只能發出一個音,所以如果要讓蜂鳴器改發出其他音,就要先使用noTone關掉蜂鳴器、再使用tone使蜂鳴器發出想要的下一個聲音。
今天就先到這邊~