第1步:電話部分
電話部分
貝爾模型202電話(或1930年至1970年的任何撥號電話)
仿古木制雪茄盒
DF Robot Bluno Nano
Deek-Robot Nano終端適配器
SPI Micro SD讀卡器
Micro SD卡
220歐姆電阻器(連接到耳機揚聲器)
2x 10K歐姆電阻(連接到電話撥號)
母電源插孔
5V(或高達12V)電源
第2步:名稱標簽部件
這是要制作的項目列表一個名牌。我做了10個。
(注意:我將其中的一個短路,使其部分功能失調。提前計劃:可能會額外訂購一兩個布魯諾斯或者提出一個計劃“B”以防萬一!)
DF機器人Bluno甲殼蟲
4x 100歐姆電阻器
藍色可穿戴LED
紅色可穿戴設備LED
黃色可穿戴LED
綠色可穿戴LED
9V雙容量(1200mAh)鋰電池
9V電池連接器
微型開關
2cmx8cm原型板(切成兩半)
名稱帶剪輯的標簽夾(亞馬遜)
Avery 5141“您好我的名字是”名稱標簽(亞馬遜)
第3步:連接電話
手機內的arduino需要執行以下所有操作任務。本節介紹如何將所有內容連接在一起。
當有人拿起耳機時打開Arduino
撥打電話
抓住聲音SD卡
在耳機揚聲器上播放聲音
原理圖
附圖是原始圖像和Fritzing格式。您可以在此處下載Fritzing應用程序:fritzing.org
撥號和電源開關
手機內部有三個需要連接的開關。
“掛機”開關,為Bluno Nano上的Vin供電。
當接收器掛在掛鉤上時,此開關斷開。
“主動撥號”開關,表示車輪不在其家中位置。這是有線的,使D8在激活時為+ 5v,在激活時為0v。
當手機處于靜止位置時,我的手機上此開關正常連接 。一旦用戶開始移動撥號盤,開關就會斷開連接。我把一端貼在Arduino上。我把另一端連接到arduino上的D8。 D8還連接到10K歐姆電阻到+5。這種配置產生一個“高”使能信號,告訴Sketch程序是時候開始計數脈沖了。
(在其他一些手機上,當撥號“休息”時,此開關正常斷開。如果您有這種類型的手機,則需要將其與我的電話對接:結束到+5,另一端接到D8和一個接地的10K電阻。)
“脈沖”開關每次撥號時產生一個脈沖在從釋放返回原位時傳遞一個數字。這用于在引腳D7上產生+ 5V脈沖。
在我的手機上,當撥盤“休息”時,此開關正常連接。用戶松開方向盤后,每次通過號碼時,此開關斷開連接。我把一端貼在Arduino上。我將另一端連接到arduino上的D7。 D7還連接到一個10K歐姆電阻,該電阻導致+5導致引腳在斷開時被拉高。此配置為Sketch程序生成“高”脈沖以進行計數。
(在其他一些手機上,當撥號“休息”時,此開關正常斷開。如果您有這種類型的手機,則需要將其連接到我的對面:一端為+5,另一端為D7,另一端為10K接地電阻。)
我沒有添加任何特殊電路,如電容器進行去抖動。我用軟件處理了這個。每次開關打開或關閉時,你都會得到一堆電力尖峰(++++ - + - + - + - + - + -------)直到它結束。在決定狀態實際發生變化之前,軟件只等待輸入引腳上的值穩定到一個電壓或另一個電壓一段足夠長的時間。
聽筒揚聲器
用于產生聲音的輸出引腳需要是具有PWM功能的引腳。此外,根據您使用的Arduino,您可能需要注意運行PWM所需的定時器并可能啟用它。 Arduino Nano上的針腳D9(在我的情況下是Bluno Nano)是一個很好的默認選擇,因為默認配置正確。
耳機有三條線。簡化,這些是:地面,耳機和吹嘴。由于耳機和吹嘴松散連接,因此并不那么簡單。我將電壓表置于“接通”位置以測量電阻。在這種模式下,當您探測正確的兩個端子時,電壓表會產生少量的電,從而在聽筒中產生“靜態”的沙啞聲。
將一個端子連接到地。將另一個端子連接到一個220歐姆的電阻,該電阻通向D9 PWM引腳。這非常適合我在標準電話耳機揚聲器中所需的聲級。
(如果你想創建一個“揚聲器電話”,你需要添加一些額外的電路來將聲音放大到一個外部揚聲器供所有人聽。我沒有在我的實現中這樣做但是本來不錯增強。)
(如果要添加音量控制,可以將電位器連接到其中一個模擬輸入引腳,并根據輸入電壓讀數調整聲級。)
Micro SD卡SPI
SPI可以直接連接到Arduino Nano。 GND至GND,+ 5至+5,MISO至MISO,MOSI至MOSI,以及SCK至SCK。我使用引腳D4作為我的選擇引腳,所以:D4到CS。 (如果您使用的是5v Arduino,例如Nano,請確保使用5v SD卡控制器。)
電線
我剪了一段cat-5以太網電纜和從電話上的連接器通過一個鉆入基座的孔向下延伸到安裝在雪茄盒下面的Arduino。以太網電纜中的8根電線對我的連接來說已經足夠了,對于任何標準的撥號電話都應該足夠了。因為我將所有地面連接在一起,只有一個地面連接到Arduino,因此8根電線對我來說是過度殺死的。我不需要在手機上運行+5線,但如果你使用不同類型的手機,你可能會發現有必要這樣做。無論哪種方式,對于幾乎任何項目來說,8根電線應該足夠了。
我還在雪茄盒后面鉆了一個小洞,讓我在切斷電源線后將電源線插入。端部在盒子內拼接在一起,然后連接到電源。
我用電工膠帶完全包裹Nano,只留下USB連接器暴露并可以進行編程。如果您決定將USB電纜留在盒子內,即使您沒有編程,也必須確保電纜末端與所有電氣部件隔離。靜電會弄亂電子設備,導致奇怪的事情發生如此意外的重置或更糟。
模擬引腳A0
注意:不連接任何東西針腳A0。該引腳用于為隨機數發生器播種,因此它需要浮動未連接。
可選:兩個Arduinos卸載聲音
如果您需要卸載聲音我提供了原理圖到了第二個Arduino。如果RAM耗盡或需要更快啟動,請執行此操作。標準的Arduino Nano處理聲音。 Bluno Beetle處理撥號和藍牙連接。
將兩個Arduinos連接在一起:D2到D2,D3到D3。
步驟4:連接名稱標簽
名稱標簽內電子設備的接線圖是公平的簡單:只需幾個LED,一個開關和一個電池。 “可穿戴”LED有點難以使用。我的繞線工具在這里派上用場了。
開始之前
在布線Bluno Beetle名稱標簽之前,我建議對每一個進行預編程,這樣他們就可以了啟動時依次閃爍所有數字引腳(D2,D3,D4,D5)。 (在提供的草圖中定義START_WITH_BLINK,或編寫您自己的簡單草圖來執行此操作。)這將允許您在組裝后立即測試不良焊接連接。
繞線和焊接LED
將所有四個電阻焊接到引腳D2,D3,D4和D5
從電路板背面夾住引線。
將電阻器導線留下約1英寸(2厘米)
將裸露的導線焊接到地面,留下1.5到2英寸(3-4厘米)。
使用繞線工具,將綠色LED的紅色線纏繞到D2電阻上并將其焊接到位。
將黑色引線繞線連接到接地引腳。
對藍色LED,黃色LED和紅色LED重復步驟5和6。
確認沒有引腳意外觸及鄰居。
再次驗證。
將USB電纜插入充電器電源插座,確認所有四個LED在啟動時按正確順序閃爍。
如果一切似乎都連接正確,請將一根熱縮管滑過每個暴露的針腳(包括接地針)并將其縮小,使其貼合。我用烙鐵來完成這個任務。如果你有一個熱縮槍(又名熱“吹風機”),那將是更好的選擇。
焊接開關和電池
將面包板切成大約3“x .5”(5cm x 1cm)(大約是Bluno Beetle抵達盒子高度的一半。
將面包板頂部三個孔中的開關焊接。
焊接一端針。
確保開關的兩端都貼著面包板,如果需要,可能會重新焊接第一根針。
焊接另一端兩個開關銷到面包板。
在電路板背面:焊接正極端(紅線)電池連接器連接到開關的頂部引腳。(焊接到面包板,使其連接到頂部引腳。)
將電池的負極(黑線)焊接到電池的接地孔上。 Bluno。
將紅線切割,剝離并焊接到開關的中間引腳上(焊接到面包板的背面)與開關的電氣連接。)
將電線穿過幾個孔以消除應力。
將紅線的另一端焊接到Bluno上的VIN孔,這樣當開關打開時,9伏將施加到VIN。
確認沒有交叉線。
連接電池并進行測試,確保Bluno開啟并在開關打開時閃爍。
纏繞電工膠帶以覆蓋整個面包板。
用電工膠帶包裹Bluno,直到您對電線應變消除和隔離連接感到滿意為止。
留出一個用于連接USB電纜的開口,以便將來進行編程。
將其打開并再次測試。
步驟5:打包名稱標簽
這些是步驟將可穿戴名稱標簽包裝在Bluno Beetle進來的盒子里面。
用鋒利的手術刀切開開關的矩形孔Exacto刀
將開關和電路板放入盒子中并將其按壓在側面以找到合適的步伐來切割孔。/li》
使用泡沫和電池將卡紙切換到位。
將電池放在電路板旁邊的盒子里
Bluno來了用一塊泡沫。將其卷起并粘貼,然后將其塞入盒子中,使開關牢固地固定到位。
為前面的LED線切一個洞因此它在關閉時不會干擾翻蓋,距離頂部大約0.75英寸(1.5厘米)。尺寸無關緊要。稍后會隱藏。我的洞大約1.5英寸x .25英寸(1厘米x) .5厘米。
通過孔進給LED
使用透明膠帶將LED指示燈朝外。透明膠帶確保LED安全并面向全世界以獲得全亮度。
將Bluno推入USB接口的盒子中,可以進行編程。
將Avery 5141名稱標簽剝離并粘貼在白紙上,然后將其剪成形狀。最好不要將名稱標簽直接粘貼到盒子上,因為將來某個時候您需要將其刪除。
覆蓋LED并將“Hello my name is”名稱標記為帶。
切割塑料名牌固定器,使其牢固地固定在盒子背面。
附上剪輯。
第6步:Arduino草圖
我已經提供了在這個項目中配置和運行Bluno Arduinos所需的全部四個草圖。
如果您還沒有下載Arduino IDE。這里:arduino.cc
解壓縮包含草圖的zip文件,并從Arduino IDE中打開它們。這些是草圖:
blunoBasic:用于初始化所有Blunos
blunoPhone:在手機上的Bluno Nano上運行
blunoPhoneSounds(可選) :播放手機上的聲音
blunoNameTag:在“可穿戴”名稱標簽上運行
步驟7:在中央電話上準備BLE
將草圖 BlunoBasic 加載到手機內的Arduino Bluno Nano中并執行以下操作:
打開串口監視器
設置“無行結束”類型“+++”并發送
應說“進入AT模式”
現在我們處于“AT”模式,用于在電路板上配置BLE藍牙。
設置“兩個NL& CR”
AT + MAC =?
復制MAC地址
打開 blunoNameTag 草圖。
找到正確的“centralMAC”
粘貼MAC以指定正確連接。
全部輸入要完成配置,請執行以下命令:
AT + ROLE = ROLE_CENTRAL
AT + CMODE = UNIQUE
AT + IBEACONS = OFF
AT + BLUNODEBUG = OFF
AT + USBDEBUG = OFF
AT + EXIT
現在用草圖重新編程bluno blunoPhone 用于正常操作。
步驟8:在名稱標簽上準備BLE
加載草圖 BlunoBasic 將放置在名稱標簽內的每個Bluno Beetle上并執行以下操作:
打開串行監視器
設置“無行結束”
輸入“+++”并發送
應該說“進入AT模式”
現在我們處于“AT”模式,用于配置主板上的BLE藍牙。
設置“兩個NL& CR”
AT + MAC =?
復制MAC地址
打開 blunoPhone 草圖。
查找“phoneLookup_t phoneBook [] = {”
將MAC粘貼到陣列中的適當位置,可能會創建一個新條目。
刪除最重要的4位數字,從而創建一個32位十六進制數字。
確保MAC_PREFIX與上一步中刪除的最重要的4位數匹配。
(步驟5和6實現優化以在手機Sketch上保存珍貴的RAM。)
綁定到bluno手機的MAC。例如,如果Bluno中央MAC是0xB4994C50236A,那么您可以在外設名稱標簽上執行此操作:
AT + BIND = 0xB4994C50236A
確定一個數字作為名稱的ID標簽。例如“8”。將該數字插入上面討論的phoneBook []數組條目,并在外圍名稱標簽bluno上執行此操作:
AT + NAME = 8
輸入以下所有命令以完成配置:
AT + ROLE = ROLE_PERIPHERAL
AT + CMODE = UNIQUE
AT + IBEACONS = OFF
AT + BLUNODEBUG = OFF
AT + USBDEBUG = OFF
AT + EXIT
現在使用Sketch blunoNameTag 重新編程bluno以進行正常操作。
步驟9:創建聲音
《我附上了一個包含我在SDCard上安裝的所有聲音的zip文件。聲音來自各種網站:
來自freesound.org的有趣聲音
電話錄音來自:http://stuff.gigo.com/phone/
如果您想要一組不同的聲音,可以生成一些或從各種網站下載。但它們需要轉換為簡單的單聲道8位16KHz WAV格式。我是這樣做的:
轉到:https://audio.online-convert.com/convert-to-wav
更改位分辨率:8位
更改采樣率:16000 Hz
更改音頻通道:單聲道
高級:
PCM格式:PCM無符號8位
開始轉換
下載
如果需要,請重命名文件,文件名中有8個或更少的字符,擴展名為“.wav”(又名8.3格式)。
將SD卡插入計算機
將所有文件復制到micro SD卡上最頂層的目錄中
彈出
插入通過SPI接口將micro SD卡連接到Arduino控制器中。
blunoPhone Sketch負責安裝SD卡并使用庫播放聲音文件:SD.h,SPI.h和TMRpcm .H
步驟10:Arduino手機草圖軟件
在手機內部的Bluno Nano上運行的Sketch blunoPhone 旨在使用BLE進行通信藍牙與另一個草圖 blunoNameTag 在電池供電的“可穿戴式”Bluno Beetles上執行,其中包含分散在房間內的人們的“名牌”。
可選擇手機聲音可以播放一個單獨的Arduino,也將被安置在手機內。這樣做的原因有很多,稍后將在評論中進行描述。如果您希望其他Arduino使用Sketch nanoPhoneSounds 播放聲音,請定義OFFLOAD_SOUND。我用一個內置的Bluno Nano制作了一部手機。我制造了第二部手機,其中包含用于通信的Bluno Beetle,以及用于播放聲音的標準Arduino Nano。在大多數情況下,我用單個Bluno Nano記錄手機,但知道還有其他選擇。
這個程序適用于Arduino。 RAM最大化因此,如果添加更多功能或增加變量數量,您可能會遇到一些奇怪的行為,例如程序重置和意外重啟。該程序使用一些先進的技術來節省RAM(以及一些黑客來節省RAM)。 (如果你有RAM問題,你應該認真考慮將聲音功能卸載到另一個Arduino。)
Bluno BLE似乎只用于兩個藍牙永不改變端點之間的通信:一個中心端口和一個外圍設備。似乎我正在使用它的目的不是專門設計的。通過一些努力,我得到了它的工作 - 主要是。有時需要多次嘗試才能建立連接。
該程序的設計有一個中央Bluno和許多外圍設備。在任何給定時間只連接一個外圍設備,但中央Bluno從已知外圍設備列表中動態選擇。通常連接速度相當快(在15秒內),但有時需要更長時間(幾分鐘)。外圍設備(名稱標簽)在代碼中內置了一個看門狗,以便偶爾強制重啟。這種“黑客”似乎有所幫助,但并不完美。手動關閉/打開所有外圍設備以及中央電話似乎有時可以幫助建立穩固的連接。
此草圖動態運行“AT + BIND”命令,然后“AT + RESTART”連接期望的外圍設備。那個序列并不總是有效。如果在一個循環中調用兩次而不是一次,它似乎更穩定。不幸的是,每次通過循環都會增加額外的延遲時間。如果您不擔心額外的延遲,請考慮調整程序調用AT + BIND三次以獲得更好的穩定性。
當通過USB電纜將Sketch編程到Bluno中心或任何外圍設備時,我發現它如果我關掉房間里所有其他的Blunos,那么最穩定。由于通過藍牙從一個Bluno到另一個Bluno的串行連接,程序員似乎對Bluno的目標編程感到困惑。
這使用PlainProtocol庫來格式化通過藍牙發送的命令。這可以在GitHub上找到:
git clone https://github.com/DFRobot/BlunoAccessoryShieldDe.。.
當在串行監視器上手動弄亂AT命令時,我發現最好運行Sketch blunoBasic 。
正常程序流程
軟件具有各種不同功能的狀態。正常的軟件路徑如下所示:
當手機放在開關掛鉤上時,電流不會流動并且Bluno電源關閉。
當有人拿起聽筒時,接通電源并且Bluno開始啟動,調用功能設置()。
在初始化期間安裝SD卡,初始化藍牙BLE,并初始化相關的數字引腳。這需要幾秒鐘。
一旦所有內容都初始化,就會播放撥號音。與所有聲音一樣,此聲音來自SD卡上的文件。撥號音實際上是一個相對較短的聲音文件,一旦完成就會重復。
一旦手機上的滾輪開始移動,軟件就會檢測到引腳D8上的更改并停止撥號音。
電話號碼中的每個數字都是根據D7針腳上檢測到的脈沖數計算出來的。
撥打全部6位數后,程序將啟動鈴聲,在phoneBook []數組中找到該號碼,并綁定到列出的名稱標簽的MAC地址。
只要完成簡單的握手以驗證MAC地址是否與預期的名稱標簽ID匹配,就會在耳機揚聲器上播放一長串(有些愚蠢)的“你好”聲音(當時草圖上的名稱標簽開始快速閃爍顏色瘋狂)。
通常此人會自動掛斷電話并觀看有人打開禮物。電源關閉,因此Bluno什么都不做。
特殊情況導致特殊情況
如果有人撥打手機上寫的號碼(869-869)或“TMW-TMW”)然后播放隨機應答消息。另外,The Mad Wrapper在圣誕樹深處隱藏了一個額外的Bluno Beetle“名牌”。布魯諾開始快速地眨眼。在樹上有一個特別的禮物供所有人享用!
各種標準的AT& T錯誤信息都是針對諸如未知號碼之類的內容而播放的,并且在沒有答案的情況下響鈴太長。
如果手機處于摘機狀態4分鐘,則摘機AT& T“blat-blat-blat 。..”聲音表示掛斷電話。
很多計時器
每次循環時,程序都會檢查時間并查看是否有任何“計時器”已過期。定時器用于一系列事情,包括正常操作和錯誤測試:
有一個看門狗定時器,用于重置和重新綁定到所需的名稱標簽。
有一個定時器用于去除“撥號移動”引腳D8。在宣布狀態發生變化之前,我們等待嘈雜的信號穩定下來。
有一個定時器用于消除引腳D7上的脈沖。
在開始同步時,有一個定時器用于限制與名稱標記的握手通信。
沒有足夠的RAM用于變量和數組
程序完全超出RAM使用量,導致以下警告
可用內存不足,可能會出現穩定性問題。
如果添加任何新內容,則可能出現錯誤功能,程序將開始表現得非常奇怪,包括重啟。我實現了一些技巧來最小化RAM使用:
諸如聲音文件名之類的字符串作為常量存儲在ROM中。函數pgm_read_word()用于檢索ROM的常量。
MAC地址是48位十六進制數。我的原始實現將MAC地址存儲為52個字符的字符串。當我只有三個名稱標簽與之通信時,這很好。一旦我啟用了10個遠程Blunos,我就用光了。我能夠通過存儲10個32位長整數來恢復程序。所有Bluno Beetle MAC地址中最重要的16位對于我所擁有的設備始終是相同的,因此我只是將16位添加到唯一的32位數字進行綁定。
另一種節省RAM的方法(可能是最好的方法)是在兩個Arduinos之間拆分任務。如果定義了OFFLOAD_SOUND,則刪除聲音產生功能。這被替換為使用SoftwareSerial庫與另一個連接到D3和D4的Arduino進行通信的功能。這樣做可以在RAM中留出足夠的空間來支持許多新功能或更多名稱標簽。
步驟11:消除嘈雜的電話交換機
當手機內的開關打開或關閉時,它不會干凈利落。電壓將反彈+ 5,0,+ 5,0,+ 5,0 。..。..一段時間,直到它穩定在一個或另一個上。這可以用一些電子設備來處理,例如電容器。我用軟件處理它。 blunoPhone 草圖會檢查該值是否發生變化,然后等待一段時間來驗證該值是否再次發生變化。
延遲10毫秒效果很好!
#define DEBOUNCE_DELAY 10 // wait 10ms for the circuit to settle during puls transition
用于跟蹤時間的變量:
long timeOfPulsePinStateChange = 0; // save the time for debouncing
去抖動的一些代碼:
if (pulseInputLastState != pulseInputPinState) {
timeOfPulsePinStateChange = millis();
}
if ((millis() - timeOfPulsePinStateChange) 》 DEBOUNCE_DELAY) {
// debounce - this happens once it‘s stabilized
if (pulseInputTrueState != pulseInputPinState) {
// this means that the switch has either just gone from closed-》open or vice versa.
pulseInputTrueState = pulseInputPinState;
}
步驟12 :Arduino名稱標記草圖軟件
草圖 blunoNameTag 實現在DFRobot上運行的可穿戴“名稱標記” Bluno Beetle。
它使用BLE藍牙連接與隱藏在古董電話中的中央Bluno進行通信。
在空閑狀態 - 當沒有連接到手機時 - - 藍色LED輕輕地發出更亮的光,然后變暗。
隨著通信握手開始,一些不同顏色的LED亮起,藍色LED發出全亮度不再發出脈沖。
握手需要使用名稱標簽的ID進行回復。這是從AT + NAME =?返回的結果。有關使用適當編號配置AT + NAME的重要說明,請參閱本Instructable的另一部分。
一旦通信完全建立,所有顏色的LED都開始瘋狂地閃爍。
很多計時器
每次循環時,程序都會檢查時間并查看是否有任何“定時器”已過期。
有一個計時器可以更新藍色LED的亮度。 (我真的很喜歡這個簡單的細微特征。在空閑狀態下輕柔的平靜脈沖為項目增添了一點“自然”的人性。)
每個彩色LED都有一個定時器告訴它閃爍一定時間。每個LED的閃爍速率不同,導致輕微隨機的光圖案。
有一個計時器可以檢查來自手機的消息。
有一個看門狗定時器可以重置整個Bluno Beetle。有時,完全開始是與嘗試接觸的中央Bluno同步的唯一方法。
步驟13:輕輕地點亮LED以獲得良好的平靜效果
我盡可能嘗試為我的應用添加一些微妙的“自然”效果。如果做得好,這將增加一定程度的舒適度并獲得用戶的一點信任。它讓人感覺很好。這是一個很好的設計。
如果您只是需要向用戶顯示您的小工具已啟動,那么簡單的事情就是在啟動過程中點亮LED并忘記它。
咩。
使用Arduino PWM功能并做一些有趣的事情。做吧!這并不難(特別是因為我已經提供了一些代碼供您復制/粘貼到您的應用程序中)。
我喜歡以下代碼的效果,它實現了藍色LED輕輕發光以平靜的“呼吸”速度變得更加明亮和暗淡。感覺很棒!
我將藍色LED連接到一個支持PWM的引腳(Bluno Beetle上的引腳D3)。
#define BLUE_LED 3 // blue LED
我設置了一些參數LED發光的速度和亮度有多快
#define GLOW_MIN 15 //15 // min brightness of glow
#define GLOW_MAX 100 //120 // max brightness of glow
#define GLOW_UPDATE_DELAY 40 // when to increment
#define GLOW_STEP_SIZE 2
及相關變量
long timeOfLastPulseUpdate = 0;
int glowValue = 0; // led brightness 0-255
int glowIncrement = GLOW_STEP_SIZE; // Either + or - depending on up/down glow
我創建了一個實用程序函數來幫助確定是否需要調整LED的亮度:
// gently glow bright/dim when not connected
bool timeToUpdateGlow () {
long now = millis();
if ((now - timeOfLastPulseUpdate) 》 GLOW_UPDATE_DELAY) {
timeOfLastPulseUpdate = now;
return true;
} else {
return false;
}
}
然后,每次通過循環,如果是時候改變亮度,改變它。如果 glowIncrement 為正數,則LED會略微變亮。如果 glowIncrement 是負數,則藍色LED稍微變暗。
void loop() {
。..
if (timeToUpdateGlow()) {
glowValue += glowIncrement;
if (glowValue 《= GLOW_MIN) {
glowValue = GLOW_MIN;
glowIncrement = GLOW_STEP_SIZE; // +1 so start glowing brighter
} else if (glowValue 》= GLOW_MAX) {
glowValue = GLOW_MAX;
glowIncrement = -GLOW_STEP_SIZE; // start dimming now
}
analogWrite(BLUE_LED, glowValue);
}
。..
}
步驟14:瘋狂的浮華色彩吸引注意力
引起人們對小工具的關注的一個好方法是使用幾個LED“隨機”潑灑閃亮的顏色。我對我使用的效果感到滿意。每個LED以不同的快速閃爍,以創建一個有趣的色彩管弦樂隊。
定義閃爍率和變量:
// blink rates when connected spaced to look like random orchestrated splatter
#define BLUE_BLINK_DELAY 300 // blink rate 0.3 seconds
#define YELLOW_BLINK_DELAY 500 // blink rate 0.5 seconds
#define RED_BLINK_DELAY 800 // blink rate 0.8 seconds
#define GREEN_BLINK_DELAY 1300 // blink rate 1.3 seconds
long timeOfLastBlueBlink = 0;
long timeOfLastGreenBlink = 0;
long timeOfLastYellowBlink = 0;
long timeOfLastRedBlink = 0;
確定何時閃爍LED的一些實用程序功能
// after connected we wildly blink the blue LED
bool timeForBlueBlink () {
long now = millis();
if ((now - timeOfLastBlueBlink) 》 BLUE_BLINK_DELAY) {
timeOfLastBlueBlink = now;
return true;
} else {
return false;
}
}
// after connected we wildly blink the green LED
bool timeForGreenBlink () {
long now = millis();
if ((now - timeOfLastGreenBlink) 》 GREEN_BLINK_DELAY) {
timeOfLastGreenBlink = now;
return true;
} else {
return false;
}
}
// after connected we wildly blink the yellow LED
bool timeForYellowBlink () {
long now = millis();
if ((now - timeOfLastYellowBlink) 》 YELLOW_BLINK_DELAY) {
timeOfLastYellowBlink = now;
return true;
} else {
return false;
}
}
// after connected we wildly blink the red LED
bool timeForRedBlink () {
long now = millis();
if ((now - timeOfLastRedBlink) 》 RED_BLINK_DELAY) {
timeOfLastRedBlink = now;
return true;
} else {
return false;
}
}
以及閃爍的功能。
void blink (int pin) {
digitalWrite(pin, HIGH);
delay(100);
digitalWrite(pin, LOW);
}
并且,如果處于正確的狀態,每個循環一次,檢查時間并使LED閃爍
void loop() {
。..
if (timeForBlueBlink()) {
blink (BLUE_LED);
}
if (timeForGreenBlink()) {
blink (GREEN_LED);
}
if (timeForYellowBlink()) {
blink (YELLOW_LED);
}
if (timeForRedBlink()) {
blink (RED_LED);
}
。..
}
-
藍牙
+關注
關注
114文章
5863瀏覽量
170951 -
電話
+關注
關注
0文章
135瀏覽量
25857
發布評論請先 登錄
相關推薦
評論