把遇到錯誤的、學習到的前端筆記在這邊

總瀏覽量

Copyright © Tzeng Ying-chi. 技術提供:Blogger.

2019/09/06

[2019鐵人賽] - 8.筆記IoT初練習-Johnny Five - LED Level 2練習!來點變化吧之PWM


人生短短幾個秋~來點變化吧~(  ̄ 3 ̄)y▂ξ 


上篇提到LED的簡單用法,這篇要來說還有什麼方法可以使用~

首先要提到PWM這個名詞,
PWM全名為「脈波寬度調變」英語:Pulse Width Modulation,簡稱脈寬調變

>將類比訊號轉換為脈波的一種技術,一般轉換後脈波的週期固定,但脈波的工作週期會依類比訊號的大小而改變。

在類比電路中,類比訊號的值可以連續進行變化,在時間和值的幅度上都幾乎沒有限制,基本上可以取任何實數值,輸入與輸出也呈線性變化。PWM技術是一種對類比訊號電位的數位編碼方法,通過使用高解析度計數器(調變頻率)調變方波的占空比,從而實現對一個類比訊號的電位進行編碼。其最大的優點是從處理器到被控對象之間的所有訊號都是數位形式的,無需再進行數位類比轉換過程;而且對雜訊的抗干擾能力也大大增強,這也是PWM在通訊等訊號傳輸行業得到大量應用的主要原因。

> wiki-脈波寬度調變:https://w.wiki/7ox

恩...(ㆆᴗㆆ)  看完PWM維基百科之後和天書一樣沒有看懂....(汗

簡單的說就是「把類比訊號透過脈衝方波的方式編碼,來獲得數位電路的優點!」

我做了一張解說圖來說明~
第一個波形圖,紅色部分為原始類比訊號藍色為鋸齒波
在之前的文章提到過類比訊號的特性是連續且不斷變化,現在有一個類比訊號(紅色波型)為一個正旋波,我們加入一個簡單的鋸齒波後把其相比之後,在任意時間點假設類比訊號比我們給予的鋸齒波來的大,那麼其產生出來的PWM波形為High狀態,反之類比訊號比鋸齒波來的小,那麼產出來的PWM訊號為Low狀態。

PWM通常使用在類比控制上,生活中譬如螢幕亮度的調光、LED 連續亮度的調整、喇叭音量大小的控制等等....這些都是使用到PWM這項技術~

> 圖為潛入通訊行田野調查各家手機的螢幕ψ(`∇´)ψ

而Arduino的pin腳也有提供PWM輸出的功能!( ~'ω')~
仔細看板子上digital pin有一些腳位有(~)的記號,就代表這個是有PWM的pin腳可以輸出數位類比訊號~


為什麼要介紹PWM呢?
因為接下來要介紹Johnny-five LED function brightness( )、fadeIn( )、fadeOut( )、pulse( ) 訊號需要經由PWM輸出 ( • ̀ω•́ )

> Johnny Five LED-http://johnny-five.io/api/led/#api

那開始介紹這些功能吧!d(`・∀・)b

*特別注意操作這個功能只能在PWM Pin腳上輸出,所以官方文件上的範例才會宣告LED腳位連接板子第11隻腳輸出。如果使用PWM輸出但宣告的腳位錯誤的話,執行node後會有錯誤訊息跑出

. brightness(0-255)
 - 設定LED的亮度,亮度有255階,0是最暗,255則是最亮。



.fade(brightness, ms, callback)
 - LED從當前亮度在設定的週期時間 漸亮或是漸暗。
brightness 亮度 0-255 ;ms毫秒 1000毫秒(ms)為一秒(s)



. fadeIn(ms, callback)
 - LED從當前亮度在設定的週期時間漸亮。
ms參數為必需,若沒有設定ms LED會直接亮,不會有漸亮的效果!
PS:但ms沒有設定,程式也不會報錯╮(╯_╰)╭




.fadeOut(ms, callback)
 - LED從當前亮度在設定的週期時間漸暗。
fadeIn()。




~題外話~
在我無聊的測試下(魯宅工程師的好奇心
fadeIn和fadeOut實在很神奇,怎麼說呢?
同樣在連線啟動後直接執行該函式下,fadeIn() LED會漸亮,但fadeOut()卻不會從亮到滅?





我猜想應該是初始狀態下 LED 都是滅的,執行fadeIn()的時候亮度是0→255,但換執行fadeOut()時亮度是0→0,所以fadeOut()不會有漸滅的現象.....
一定要LED初始狀態為On,才看得出效果。( ˘•ω•˘ )

. pulse(ms, callback)
 - LED在一個週期內會漸亮到漸滅在繼續下一個週期動作,一直持續下去。
pulse 有點像 fadeIn + fadeOut 的連續動作....
如blink()一樣,如果要停止動作需要使用stop()停止,stop()一樣也是停止計數器的動作,並不會把LED滅掉,如果要完整的關閉LED 需要呼叫stop()和off(),即 led.stop().off();



耶~LED終於講完了(இдஇ )

天啊......我以為可以輕鬆寫LED的文章.....
這最基本的東西....沒想到比想像中的還辛苦一百倍(果然鐵人賽很痛苦...Orz

本文到這邊先下台一鞠躬了~
有錯敬請留言改正,感謝您的閱讀 <(_ _)>

0 留言:

張貼留言