特雷門琴 (Theremin) 是 tone() 函數的應用, 它只需要一個蜂鳴器, 一個光敏電阻, 以及一個 10K 電阻就可以進行測試了. 實際電路接線如下 :光敏電阻與 10 K 電阻串聯, 光敏電阻一端接 5V, 與電阻串接處接Arduino 的 A0 腳, 電阻另一端接地. 而蜂鳴器則 + 端接 Arduino 的 D9, - 端接地. void setup() { Serial.begin(9600); } void loop() { int value=analogRead(A0); //return 0~1023 Serial.println(value); int f=map(value, 400, 1000, 120, 1500); //mapping 400~1000 to 120~1500 tone(9, f, 10); //make sounds delay(1); //delay for stable response }
電子合成樂器 此程式從 A0 讀取光敏電阻與 10K 電阻的分壓電壓值 (0~5V), AnalogRead() 會經 A/D 轉換後傳回 0~1023 的數值, 然後呼叫 map() 函數將其對應至 120 Hz~1500 Hz 頻率丟給 tone() 函數發音. 用燈光照射光敏電阻會讓頻率變高亢, 用手遮住光線就變低沉, 實際測試感覺聲音好難聽., 此琴為俄國發明家 Leon Theremin 所發明的電子合成樂器, 具有一個狀似天線的金屬桿以及一個環狀金屬圈, 前者控制發聲頻率, 後者控制音量強度. 透過演奏者的手與金屬桿與金屬圈之距離變化, 改變電容量之大小, 使內部震盪電路之頻率改變而發出不同頻率之聲音. 參考 : # https://zh.wikipedia.org/wiki/特雷門 在此實驗中我們是利用光敏電阻的阻值變化來模擬真正特雷門琴的電容變化以改變發聲頻率, 但沒辦法模擬音量變化.
特雷門琴 int buzzerPin=9; void setup() { Serial.begin(9600); pinMode(buzzerPin, OUTPUT); } void loop() { int value=analogRead(A0); //return 0~1023 Serial.print("A0="); Serial.print(value); Serial.print(" "); int f=C5 + value/4; Serial.print("f="); tone(buzzerPin, f); //make sounds Serial.println(f); } 此程式計算發聲頻率的方式與上面測試 1 不同, 它以中央 C (低音 Do) 為基準頻率, 將自 A0 獨到的 0~1024 數值除以 4 後加上此基準頻率為發音頻率. 此程式發出之頻率範圍為 523 Hz ~ 779 Hz 之間變動. 因 tone() 沒有指定持續時間, 因此會持續發聲. 真正的特雷門琴據說不好演奏, 需要極高的技巧, 如下影片所示 : 演奏者看起來就像在摸著空氣演奏一樣, 它沒有小提琴那樣實質的弦, 所以抓音階位置全憑演奏者的演練經驗.