【遼闊大地-開創不同】搞懂 Arduino 計時器中斷服務與開創物件技術新天地

ABC

運用變身手法逐步開發出自訂 Timer1 程式庫:

對於Arduino來說,PCM是個說大不大、說小不小的應用,它可以有很多種設計法,可以是軟體控制細膩活,或是大量暫存器設定的硬體活,本次演示屬於後者。本次演示的音效發聲程式同時用了 Timer1 和 Timer2 兩個計時器協同運作。發揮硬體效能雖然是件好事,但這將會有許多相關暫存器需要進行設定,這可是個繁瑣複雜且容易犯錯的苦差事,一般程式人員都怕碰這麻煩事。如果能把這些煩人事打包封裝起來,達到又要碼兒好(用),又要碼兒不苦惱,那麼程式人生從此不就幸福快樂了嗎,本範例就是朝著這個夢想邁進,開發當中活用了物件設計技術,從而開發出兩個筆者自訂的程式庫,並把程式物件技術換的變身過程逐步記錄下來,供需要者參考。首先要下載本範例所有相關壓縮檔(後續會介紹),在下載 zip 檔中所屬 CltTimer1CTC 程式庫所附範例資料夾 “examples” 資料夾內有五個演變範例程式(或點擊GitHub的五個演變範例),其中編號前四個範例是用Timer1閃耀LED燈這一主題下逐步演變的,每一步都用了物件技術變身手法,初學物件導向技術者請耐住性子慢慢來,不求快,一步一腳印,把每個變身前與變身後的來龍去脈都搞清楚,最終運用物件技術能從傳統設計轉化形成 CltTimer1CTC 程式庫,這是為了實作PCM應用設計前的熱身賽,目的就是打造屬於自己的Timer1的物件,以便後續就不用管那惱人的暫存器設定。

活用自訂 Timer1 程式庫支持 PCM 技術開發同時再用變身手法開發出自訂 Timer2 程式庫:

有了前項重要法寶之後,程式碼的話就可以參考下面幾行!! int LED_PIN=13; void setup () { pinMode (LED_PIN, OUTPUT); // 啟動PIN 13 } void loop () { digitalWrite (LED_PIN, HIGH); // 開啟LED delay (1000); // 等1秒 digitalWrite (LED_PIN, LOW); // 關閉LED delay (1000); // 等1秒 } 簡單來說就是兩部分! setup設定啟動、或是基本程序動作 在loop內寫執行後的動作 ,這樣的設計讓初學開發人員確實很簡單的就進到這領域, 然而這是傳統的程式設計,著重於流程導向,一點物件導向的概念都沒有!
就大膽地進入PCM應用設計主題,當然是從最開頭的傳統程式設計談起,經筆者整理網上現有相關程式與自己的補充程式,,,以下又是不錯的>四個範例,串聯起來就是物件技術轉換的變身過程,值得細細推敲,以下就是這四個範例,但簡單來說:,,,,,,,,,,
  1. PCMAudio原發文章
  2. 再變為GitHub的PCM專案
  3. 再變身為準類別範列GitHub的CltTimer1CTC-05Audio8KMono.ino 程式,也就是前面所提 CltTimer1CTC 程式庫裡的第五個範例
  4. 將準類別範列運用物件技術再變身為這裡主打的拍手音樂盒程式,其中會用到前面已經封裝好的 CltTimer1CTC 程式庫
現在以同樣變身手法,在這個PCM技術運用Timer2的前四次變身經驗中,我們又可以把Timer2的重點功能進行類別封裝 再將準類別 過程中得先把Timer2重點功能透過 將其變成第三方程式庫 GitHub的CltTimer2PWM程式庫 之後會有一個成功化蛹為蝶的變身 於是再次變身產生了PCM技術的終極版本 5. GitHub的CltTimer1CTC-07PCMTimer2PWM.ino程式 這個終極版本同是用了有關Timer1與Timer2且自建的兩個第三方程式庫(CltTimer1CTC 與/CltTimer2PWM),
Comments