今天的這篇要來介紹arduino的類比讀取與PWM輸出
事不宜遲,馬上進入主題
首先是PWM輸出,有些人可能不知道PWM是甚麼,可以參考之前的這篇(或是自己去google)
這個函式的功能有點類似那種耳機音響的DAC的感覺,不過又不太一樣,DAC出來的是真正的類比訊號,PWM只是用調整1跟0的時間比例來模擬出類似的感覺
上面這就是arduino的PWM輸出函式,需要注意的是,只有接腳編號前面有波浪符的才能輸出PWM訊號喔~像是Arduino Uno就是3、5、6、9、10、11這幾支接腳
而PWM輸出的範圍是0~255,0對應到0V,255則對應到5V,在這個範圍內的值接可任意選擇(不過只能是整數,甚麼3.14或是根號2之類的都不行)
下面是實際的例子:
輸出0:
輸出50:
輸出255:
可以看的出來,輸出50時雖然燈有亮,但亮度還是不及輸出為255時
接著來看類比讀取的部分
這個函式跟前面數位讀取其實滿像的,不過digitalRead()只會讀到0跟1,而analogRead()讀出來的值則會從0到1023(對應到0V~5V)
(透過程式也能讓最大值1023對應的電壓變為內建電壓或是AREF讀到的電壓,不過因為很少用所以這裡就沒特別提了)
還有另一點就是,能使用analogRead()的接腳只有A開頭的那些而已(像Arduino Uno就是A0~A5)
直接來看例子吧,這裡是直接將A0讀到的值輸出到9號腳的LED,不過因為analogRead()讀到的值是0~1023,需要將讀到的值除以4才能符合PWM的輸出範圍0~255
在電路的部分,LED照舊,不過我們加入了一顆可變電阻作為類比輸入,在可變電阻的左右兩端各接上5V與GND,然後中間那隻腳就接上A0,這樣就利用了分壓定理做出了簡易的類比輸入源
這是實作的影片連結,可以看的出來,當可變電阻轉向左邊,LED就變暗甚至暗掉,轉向越右邊LED就越亮
那麼這篇就到這裡啦(好快!)
下一篇就來講序列埠傳輸吧!