99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

怎樣使用Arduino制作Buzz Wire游戲

454398 ? 來(lái)源:網(wǎng)絡(luò)整理 ? 作者:網(wǎng)絡(luò)整理 ? 2019-12-03 16:57 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

在這個(gè)有趣的項(xiàng)目中,我們將學(xué)習(xí)如何使用Arduino制作嗡嗡聲有線(xiàn)游戲。您可以在入門(mén)工具包(入門(mén)工具包中有什么?)和房屋周?chē)业皆S多所需的零件。該項(xiàng)目使用Arduino,盡管您幾乎可以使用周?chē)娜魏?a target="_blank">微控制器(以下是5美元的微控制器之間的比較,以獲取一些啟發(fā))。

查看最終結(jié)果-它甚至可以播放音樂(lè):

您需要什么

以下是完成此項(xiàng)目所需的核心部分:

1 x Arduino UNO或類(lèi)似產(chǎn)品。

1 x金屬衣架。

2 x 220歐姆電阻。

1 x面包板。

1 x壓電蜂鳴器。

2 x鱷魚(yú)夾。

各種熱縮管。

公對(duì)公連接線(xiàn)。

以下是一些可選部件增強(qiáng)構(gòu)造:

1 x附加壓電蜂鳴器。

1 x定位桿。

1 x四個(gè)七段式顯示器。

1 x 220歐姆電阻。

1 x瞬時(shí)按鈕。

公對(duì)母連接線(xiàn)。

木板(用于保護(hù)箱)。

各種木螺釘。

只要有足夠的引腳,幾乎所有的Arduino都可以使用。如果不確定您的需求,請(qǐng)查看此購(gòu)買(mǎi)指南。

構(gòu)建計(jì)劃

雖然這可能看起來(lái)很復(fù)雜,這實(shí)際上是一個(gè)非常簡(jiǎn)單的項(xiàng)目。我將從基本游戲開(kāi)始,然后添加其他組件以增加復(fù)雜性。您可以根據(jù)自己的需要選擇“選擇”。

核心機(jī)制由線(xiàn)形和手柄上的環(huán)組成。玩家必須引導(dǎo)整個(gè)路線(xiàn)的循環(huán),而不能使兩個(gè)方向接觸。如果兩者接觸,則電路完成,并且蜂鳴器響起。當(dāng)然也可以不使用微控制器來(lái)構(gòu)建該電路,但是這樣做的樂(lè)趣何在(以及還能聽(tīng)到Monty Python的“ Flying Circus”主題曲)?

課程 strong》

這是玩家指導(dǎo)自己的回合的形狀。這是整個(gè)游戲的基礎(chǔ),所以做得好!我選擇先降一小點(diǎn),然后再進(jìn)行一次大的爬升。將金屬衣架彎曲成所需的形狀。黃銅線(xiàn)或銅管也可以正常工作,盡管衣架可能是最便宜的。

您可能需要戴手套,用鉗子或錘子才能使事情變得完美。用斷線(xiàn)鉗剪掉多余的部分。留下兩個(gè)垂直的立柱以推入基座。為了安全起見(jiàn),您想歸檔切割端。最后,切開(kāi)兩根熱縮管,并如下放置在末端:

這將使回路與過(guò)程絕緣,從而提供一個(gè)起點(diǎn)/末端或安全區(qū)域。另外,如果您沒(méi)有熱縮管,也可以用膠帶甚至是吸管。

現(xiàn)在將電纜連接到課程的一端。您在這里有兩個(gè)選擇:可以焊接,也可以使用鱷魚(yú)夾。鱷魚(yú)夾是較容易的選擇,但焊接是更可靠和長(zhǎng)期的選擇。確保首先用砂紙“弄粗”衣架表面,并使用大量助焊劑。 (以前從來(lái)沒(méi)有焊接過(guò)?請(qǐng)學(xué)習(xí)這里的方法。)

根據(jù)下一步在底座上鉆的孔的大小,您可能需要先將電纜穿過(guò)安裝孔。使用兩根絞在一起的電線(xiàn)會(huì)提高耐用性:

使用電鉆來(lái)做這有很大幫助:

基礎(chǔ)

是時(shí)候創(chuàng)建基礎(chǔ)了。這用于將航線(xiàn)保持在直立位置,并提供將電子設(shè)備固定到的位置。我使用了一些松木碎片,盡管您可以使用房子周?chē)娜魏挝锲?,甚至可以用紙板箱?/p>

將三塊切成“ n”形。只需將這三部分?jǐn)Q(或膠)在一起。切記先在側(cè)板上鉆一個(gè)導(dǎo)向孔,以防止側(cè)板裂開(kāi)。您可能需要沉頭螺釘(特別是如果要填充然后上漆),因此我強(qiáng)烈建議使用沉頭鉆頭。如果您沒(méi)有沉頭工具或鉆孔,則可以使用較大直徑的鉆頭。

鉆兩個(gè)孔,其距離應(yīng)足夠遠(yuǎn),以便安裝過(guò)程的末端。 ink孔下面的東西,準(zhǔn)備粘貼。

手柄

現(xiàn)在是時(shí)候制作回路/控制器了。在一端扭曲一小部分衣架,以形成帶有小金屬手柄的環(huán)。確保銼平切割邊緣,然后在必要時(shí)用膠帶/泡沫覆蓋。

這將形成電路的另一半-當(dāng)此循環(huán)接觸到當(dāng)然它將完成電路(就像一個(gè)開(kāi)關(guān))。將另一根線(xiàn)焊接(或使用鱷魚(yú)夾)到其底部,與之前在該過(guò)程中所做的完全相同。

為實(shí)際手柄切去一小段銷(xiāo)釘。該金屬環(huán)將插入該手柄中。如果沒(méi)有銷(xiāo)釘,則可以使用皮帶或圓盤(pán)砂光機(jī)將一塊方形的軟木修圓(也可以使用砂紙,但這會(huì)花費(fèi)很長(zhǎng)時(shí)間)。

鉆一個(gè)洞這個(gè)手柄。它必須足夠大以適合金屬環(huán)和導(dǎo)線(xiàn)穿過(guò):

盡管很棘手,但這可以在立柱鉆機(jī)上完成。 Alathe可以完美地完成這項(xiàng)工作:

是的,我很清楚這是金屬車(chē)床(對(duì)于感興趣的人,這是Boley制表車(chē)床,來(lái)自1930年代。我認(rèn)為這是3C,但是如果您對(duì)此有所了解,我希望能收到您的來(lái)信。)

您還可以使用去除中心的圓珠筆。

最后,使用熱膠將電纜和回路固定到手柄中。熱膠會(huì)提供牢固的(但不是永久性的)固定裝置,因此非常適合。

完成

將導(dǎo)線(xiàn)束插入底座的孔中。不要忘了先添加回路/控制器。再次使用熱熔膠,通過(guò)如下方式填充底座底部的沉孔,將路線(xiàn)固定到底座上:

電路 》

這是完整的電路。您不必如此復(fù)雜—在分解每個(gè)部分時(shí)請(qǐng)繼續(xù)閱讀。

首先,將兩個(gè)壓電元件連接到數(shù)字引腳10和11極性無(wú)關(guān)緊要:

您不必使用兩個(gè)壓電體-我這樣做的唯一原因是在出現(xiàn)以下情況時(shí)會(huì)發(fā)出更大的嗡嗡聲電線(xiàn)接觸。將一側(cè)連接到數(shù)字引腳,另一側(cè)接地。

現(xiàn)在插入金屬層并處理:

同樣,它不會(huì)無(wú)論這兩個(gè)連接方式如何。電路的這一部分就像按鈕或開(kāi)關(guān)一樣,當(dāng)循環(huán)觸碰到路線(xiàn)時(shí),玩家將完成電路。確保同時(shí)包括兩個(gè)電阻。

一個(gè)電阻將電路接地(稱(chēng)為下拉電阻),以確保其不會(huì)“浮空”(這使Arduino能夠檢測(cè)到電路的變化)。另一個(gè)電阻器保護(hù)Arduino。當(dāng)兩個(gè)部分接觸時(shí),+ 5V進(jìn)入數(shù)字引腳。如果不存在此電阻,則可能會(huì)出現(xiàn)短路故障–如果幸運(yùn)的話(huà),您的計(jì)算機(jī)將斷開(kāi)USB插座的連接,以吸收過(guò)多的電流。

連接信號(hào)線(xiàn)(紫色,如圖所示)連接到數(shù)字引腳9。

下一步,將按鈕連接到數(shù)字引腳2:

最后,連接七段式LED顯示屏:

該特殊型號(hào)來(lái)自Seeed。它使用TM1637驅(qū)動(dòng)四個(gè)顯示器-這意味著僅需要兩個(gè)數(shù)字引腳。將 GND 連接到Arduino地面,將 VCC 連接到Arduino + 5V。將 D10 連接到Arduino數(shù)字引腳13,將 CLK 連接到數(shù)字引腳12。

代碼

要使該項(xiàng)目正常工作將需要兩個(gè)附加文件。第一個(gè)稱(chēng)為pitches.h。該文件僅將音符名稱(chēng)映射到其壓電值。例如,您可以簡(jiǎn)單地說(shuō)“ NOTE_C3”而不是“ 31”,這使編寫(xiě)樂(lè)曲變得容易得多。這是在公共領(lǐng)域,可以在Arduino網(wǎng)站上找到。按照說(shuō)明創(chuàng)建一個(gè)名為pitches.h的新文件(或者,將代碼粘貼到現(xiàn)有腳本中。)

接下來(lái),您需要一種方法來(lái)實(shí)際在壓電板上彈奏音符/旋律。 Anthony DiGirolamo在Github上撰寫(xiě)的要點(diǎn)包含您需要的代碼。復(fù)制“ void buzz”和“}}”之間的所有內(nèi)容并將其粘貼到您的主文件中。作為參考,這里是:

void buzz(int targetPin, long frequency, long length) {

/* Buzzer example function by Rob Faludi

http://www.faludi.com

https://gist.github.com/AnthonyDiGirolamo/1405180

*/

long delayValue = 1000000/frequency/2; // calculate the delay value between transitions

//// 1 second‘s worth of microseconds, divided by the frequency, then split in half since

//// there are two phases to each cycle

long numCycles = frequency * length/ 1000; // calculate the number of cycles for proper timing

//// multiply frequency, which is really cycles per second, by the number of seconds to

//// get the total number of cycles to produce

for (long i=0; i 《 numCycles; i++){ // for the calculated length of time.。.

digitalWrite(targetPin,HIGH); // write the buzzer pin high to push out the diaphragm

delayMicroseconds(delayValue); // wait for the calculated delay value

digitalWrite(targetPin,LOW); // write the buzzer pin low to pull back the diaphragm

delayMicroseconds(delayValue); // wait again for the calculated delay value

}

}

您需要的最后一個(gè)庫(kù)是控制七段顯示-如果您不使用它,則可以跳過(guò)此步驟。該庫(kù)名為 TM1637 ,由創(chuàng)建驅(qū)動(dòng)板的同一家公司Seeed創(chuàng)建。

在Arduino IDE中,轉(zhuǎn)到“管理庫(kù)”( Sketch 》 包含庫(kù)》 管理庫(kù))。這將調(diào)出庫(kù)管理器。等待幾秒鐘進(jìn)行更新,然后在右上方的搜索框“ TM1637”中搜索。將找到兩個(gè)庫(kù)-您需要“ TM1637”而不是“ TM1637Display”。選擇,然后單擊“安裝”。

此庫(kù)的最后一項(xiàng)任務(wù)-它尚未完成!就目前而言,該庫(kù)只能顯示數(shù)字0–9和字母A–F。如果這涵蓋了您要顯示的所有內(nèi)容,則可以跳過(guò)此步驟。如果不是,則需要修改代碼。放松!這聽(tīng)起來(lái)并不那么困難,并且如果您可以使用Arduino IDE編寫(xiě)代碼,則可以執(zhí)行此操作。

首先,打開(kāi)您的庫(kù)文件夾。這將在您的Arduino文件夾中。在Mac OS X上,該文件位于/Users/Joe/Documents/Arduino/Libraries中。打開(kāi)名為 TM1637 的文件夾。您將需要編輯名為T(mén)M1637.cpp的文件-您可以放心地忽略擴(kuò)展名為.h的其他文件。在您喜歡的文本編輯器(對(duì)我來(lái)說(shuō),這是Sublime Text 3),記事本或Arduino IDE中打開(kāi)此文件。

從此修改第三行代碼:

static int8_t TubeTab[] = {0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71};//0~9,A,b,C,d,E,F(xiàn)

為此:

static int8_t TubeTab[] = {

/* defaults */

0x3f, // 0

0x06, // 1

0x5b, // 2

0x4f, // 3

0x66, // 4

0x6d, // 5

0x7d, // 6

0x07, // 7

0x7f, // 8

0x6f, // 9

0x77, // A -- 10

0x7c, // b -- 11

0x39, // C -- 12

0x5e, // d -- 13

0x79, // E -- 14

0x71, // F -- 15

/* additional */

0x174, // h -- 16

0x176, // H -- 17

0x138, // L -- 18

0x15, // M -- 19

0x137, // n -- 20

0x73, // P -- 21

0x67, // q -- 22

0x131, // r -- 23

0x78, // t -- 24

0x240 // - 25

};

您現(xiàn)在可以保存并關(guān)閉此文件。在每個(gè)元素之后,注釋描述了這是什么字符。注釋的下一部分是元素的索引

是時(shí)候編寫(xiě)實(shí)際的代碼了。首先,包括前面提到的兩個(gè)庫(kù):

#include

#include

現(xiàn)在創(chuàng)建顯示對(duì)象:

TM1637 *_display = new TM1637(12, 13);

不要擔(dān)心,如果您不了解語(yǔ)法-此行告訴Arduino,將針腳12和13連接到七段顯示器,并進(jìn)行適當(dāng)配置。

這首歌存儲(chǔ)在melody和tempo。這些包含所有音符和音樂(lè)的音符持續(xù)時(shí)間。如果您想更改音樂(lè),請(qǐng)修改這些數(shù)組(盡管它不如粘貼音符值那么簡(jiǎn)單,定時(shí)是音樂(lè)中非常重要的一部分)。 songState變量?jī)H存儲(chǔ)最后播放的音符的位置。這樣可以確保從頭到尾播放旋律,而不是前后不停跳動(dòng):

int songState = 0;

int melody[] = {

NOTE_F4,。..}

int tempo[] = {

8,。..}

請(qǐng)注意,我已經(jīng)刪除了數(shù)組的內(nèi)容,有關(guān)完整代碼,請(qǐng)參見(jiàn)下文

此代碼是非阻塞的-這意味著Arduino可以同時(shí)執(zhí)行多個(gè)任務(wù)。請(qǐng)查看此說(shuō)明以獲取更多信息。計(jì)時(shí)器的設(shè)置方法如下:

unsigned long previousMillis1 = 0;

const long interval1 = 1500;

變量previousMillis1將在以后的階段進(jìn)行更新以存儲(chǔ)當(dāng)前時(shí)間。 interval1變量存儲(chǔ)兩次代碼執(zhí)行之間的等待時(shí)間-在這種情況下為1.5秒。它定義為const,這意味著它是恒定的并且永遠(yuǎn)不會(huì)改變-這允許Arduino進(jìn)一步優(yōu)化代碼。

在setup()函數(shù)中,有一些事情繼續(xù)。首先,設(shè)置輸入和輸出。這是必須要做的,因此Arduino知道每個(gè)引腳都連接了什么:

pinMode(9, INPUT); // setup circuit

pinMode(10, OUTPUT); // setup buzzer 1

pinMode(11, OUTPUT); // setup buzzer 2

pinMode(2, INPUT); // setup button

現(xiàn)在顯示器需要配置:

_display-》set(5); // set brightness

_display-》point(false); // remove colon

_display-》init(); // start display

方法set,point和init全部包含在_display對(duì)象中。代替點(diǎn),使用指針(“-》”)訪(fǎng)問(wèn)它們。再次,不必?fù)?dān)心語(yǔ)法(盡管,如果您想了解更多,請(qǐng)查閱C ++指針)。

主循環(huán)有兩種游戲模式:挑戰(zhàn)和免費(fèi)游戲。免費(fèi)游戲允許玩家無(wú)限次地玩游戲。挑戰(zhàn)模式使用showCountdown方法將計(jì)時(shí)器設(shè)置為20秒。它使用按鈕來(lái)啟動(dòng)和停止計(jì)時(shí)器。當(dāng)前,更改游戲模式的唯一方法是手動(dòng)編輯名為mode的變量??纯词欠窨梢蕴砑恿硪粋€(gè)按鈕來(lái)執(zhí)行此操作并適當(dāng)?shù)匦薷拇a。

buzz方法將播放為其提供的注釋。與sing結(jié)合使用。唱歌方法會(huì)遍歷每個(gè)音符并進(jìn)行演奏。定期調(diào)用此方法,盡管僅在自上次演奏以來(lái)經(jīng)過(guò)了足夠的時(shí)間后才會(huì)演奏下一個(gè)音符。一旦歌曲到達(dá)結(jié)尾,它將把歌曲重置為1節(jié)(songState = 14)。您可以將其設(shè)置為零以從頭開(kāi)始播放歌曲,但是這樣做的原因是跳過(guò)介紹。簡(jiǎn)介會(huì)在Arduino通電后播放一次,然后不再播放。

showFree和showPlay方法只需將單詞“ FrEE”和“ PLAY”寫(xiě)入”顯示。注意,當(dāng)所有其他字符均為大寫(xiě)時(shí),free中的“ r”如何變?yōu)樾?xiě)。這是七段顯示器的局限之一。它們不能顯示字母表中的每個(gè)字母,并且它們可以顯示的某些字符必須是大小寫(xiě)混合的。

toggleFreePlay方法在“ FREE”和“ PLAY”之間閃爍顯示。再次,它以非阻塞方式進(jìn)行此操作。

另一個(gè)有用的方法是showNumber。這樣會(huì)在顯示屏的中間兩個(gè)字符中寫(xiě)入一個(gè)數(shù)字,如下所示:

顯示屏不夠智能,無(wú)法知道如何顯示大數(shù)字,它必須明確告知該怎么做。此方法使用一些簡(jiǎn)單的邏輯在每個(gè)字符上顯示適當(dāng)?shù)臄?shù)字。

最后使用的方法稱(chēng)為showCountdown。這將在20處開(kāi)始計(jì)數(shù),并每秒減少1。如果該值達(dá)到零,它會(huì)嗡嗡響三聲,表明時(shí)間已用完。

所有代碼都放在這里:

#include // include display library

#include // include pitches

TM1637 *_display = new TM1637(12, 13); // create display object, 12 = CLK (clock), 13 = D10 (data)

// music

int songState = 0;

int melody[] = {

NOTE_F4, NOTE_E4, NOTE_D4, NOTE_CS4,

NOTE_C4, NOTE_B3, NOTE_AS3, NOTE_A3,

NOTE_G3, NOTE_A3, NOTE_AS3, NOTE_A3,

NOTE_G3, NOTE_C4, 0,

NOTE_C4, NOTE_A3, NOTE_A3, NOTE_A3,

NOTE_GS3, NOTE_A3, NOTE_F4, NOTE_C4,

NOTE_C4, NOTE_A3, NOTE_AS3, NOTE_AS3,

NOTE_AS3, NOTE_C4, NOTE_D4, 0,

NOTE_AS3, NOTE_G3, NOTE_G3, NOTE_G3,

NOTE_FS3, NOTE_G3, NOTE_E4, NOTE_D4,

NOTE_D4, NOTE_AS3, NOTE_A3, NOTE_A3,

NOTE_A3, NOTE_AS3, NOTE_C4, 0,

NOTE_C4, NOTE_A3, NOTE_A3, NOTE_A3,

NOTE_GS3, NOTE_A3, NOTE_A4, NOTE_F4,

NOTE_F4, NOTE_C4, NOTE_B3, NOTE_G4,

NOTE_G4, NOTE_G4, NOTE_G4, 0,

NOTE_G4, NOTE_E4, NOTE_G4, NOTE_G4,

NOTE_FS4, NOTE_G4, NOTE_D4, NOTE_G4,

NOTE_G4, NOTE_FS4, NOTE_G4, NOTE_C4,

NOTE_B3, NOTE_C4, NOTE_B3, NOTE_C4, 0

};

int tempo[] = {

8, 16, 8, 16,

8, 16, 8, 16,

16, 16, 16, 8,

16, 8, 3,

12, 16, 16, 16,

8, 16, 8, 16,

8, 16, 8, 16,

8, 16, 4, 12,

12, 16, 16, 16,

8, 16, 8, 16,

8, 16, 8, 16,

8, 16, 4, 12,

12, 16, 16, 16,

8, 16, 8, 16,

8, 16, 8, 16,

8, 16, 4, 16,

12, 17, 17, 17,

8, 12, 17, 17,

17, 8, 16, 8,

16, 8, 16, 8, 1

};

// non blocking setup

// free play

unsigned long previousMillis1 = 0; // time words last changed

const long interval1 = 1500; // interval between changing

// music

unsigned long previousMillis2 = 0; // time last changed

const long interval2 = 100; // interval between notes

int displayStatus = 0; // keep track of what’s displayed

int mode = 0; // keep track of game mode -- change to 0 or 1 for different modes

bool countdown = false;

unsigned long previousMillis3 = 0; // time last changed

const long interval3 = 1000; // interval between countdown

int count = 20; // challenge mode timer

void setup() {

// put your setup code here, to run once:

pinMode(9, INPUT); // setup circuit

pinMode(10, OUTPUT); // setup buzzer 1

pinMode(11, OUTPUT); // setup buzzer 2

pinMode(2, INPUT); // setup button

_display-》set(5); // set brightness

_display-》point(false); // remove colon

_display-》init(); // start display

}

void loop() {

// put your main code here, to run repeatedly:

if(mode == 0) {

// challenge mode

if(digitalRead(2) == HIGH) {

delay(25);

if(digitalRead(2) == HIGH) {

countdown = true; // stop the countdown

}

else {

countdown = false; // stop the countdown

}

}

if(countdown) {

showCountdown(); // advance countdown

}

}

else {

// free play

toggleFreePlay();

}

if(digitalRead(10) == HIGH) {

delay(25);

if(digitalRead(10) == HIGH) {

while(digitalRead(10) == HIGH) {

buzz(11, NOTE_B0, 1000/24);

}

}

}

else

sing();

}

void showCountdown() {

// countdown the time remaining

unsigned long currentMillis = millis(); // current time

if (currentMillis - previousMillis3 》= interval3) {

previousMillis3 = currentMillis;

--count;

showNumber(count);

if(count == 0) {

// game over

countdown = false;

count = 20;

// reset countdown

// buzz 3 times

buzz(11, NOTE_B0, 1000/24);

delay(100);

buzz(11, NOTE_B0, 1000/24);

delay(100);

buzz(11, NOTE_B0, 1000/24);

}

}

}

void showNumber(int number) {

// show numbers (maximum 99) on display

_display-》display(0, 25); // write - to segment 1

_display-》display(3, 25); // write - to segment 4

// write number to middle of display

if(number == 10)

{

_display-》display(1,1);

_display-》display(2,0);

}

else if(number 》 9)

{

_display-》display(1,1);

int newVal = number - 10;

_display-》display(2, newVal);

}

else

{

_display-》display(1,0);

_display-》display(2,number);

}

}

void toggleFreePlay() {

// scroll between words without blocking

unsigned long currentMillis = millis(); // current time

if (currentMillis - previousMillis1 》= interval1) {

previousMillis1 = currentMillis;

if(displayStatus == 1)

showPlay();

else

showFree();

}

}

void showPlay() {

// write “PLAY” to the display

_display-》display(0, 21); // write P to segment 1

_display-》display(1, 18); // write L to segment 2

_display-》display(2, 10); // write A to segment 3

_display-》display(3, 4); // write Y to segment 4

displayStatus = 2;

}

void showFree() {

// write “Free” to the display

_display-》display(0, 15); // write F to segment 1

_display-》display(1, 23); // write r to segment 2

_display-》display(2, 14); // write E to segment 3

_display-》display(3, 14); // write E to segment 4

displayStatus = 1;

}

void buzz(int targetPin, long frequency, long length) {

/* Buzzer example function by Rob Faludi

http://www.faludi.com

https://gist.github.com/AnthonyDiGirolamo/1405180

*/

long delayValue = 1000000/frequency/2; // calculate the delay value between transitions

//// 1 second‘s worth of microseconds, divided by the frequency, then split in half since

//// there are two phases to each cycle

long numCycles = frequency * length/ 1000; // calculate the number of cycles for proper timing

//// multiply frequency, which is really cycles per second, by the number of seconds to

//// get the total number of cycles to produce

for (long i=0; i 《 numCycles; i++){ // for the calculated length of time.。.

digitalWrite(targetPin,HIGH); // write the buzzer pin high to push out the diaphragm

delayMicroseconds(delayValue); // wait for the calculated delay value

digitalWrite(targetPin,LOW); // write the buzzer pin low to pull back the diaphragm

delayMicroseconds(delayValue); // wait again for the calculated delay value

}

}

void sing() {

// play the song in a non blocking way

unsigned long currentMillis = millis();

if (currentMillis - previousMillis2 》= interval2) {

previousMillis2 = currentMillis;

int noteDuration = 1000 / tempo[songState];

buzz(10, melody[songState], noteDuration);

int pauseBetweenNotes = noteDuration;

delay(pauseBetweenNotes);

// stop the tone playing:

buzz(10, 0, noteDuration);

++songState;

// start song again if finished

if(songState 》 79) {

songState = 14; // skip intro

}

}

}

保存將該文件作為“ buzzwire”(文件》另存為),然后將其上傳到您的開(kāi)發(fā)板上(文件》上傳)。如果您不確定如何上傳Arduino,或者該代碼看起來(lái)有些嚇人,請(qǐng)查看我們的《 Arduino入門(mén)指南》。一切都很好,您現(xiàn)在應(yīng)該擁有自己的嗡嗡聲有線(xiàn)游戲-很棒!

責(zé)任編輯:wv

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Arduino
    +關(guān)注

    關(guān)注

    190

    文章

    6498

    瀏覽量

    192182
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    免費(fèi)分享Arduino入門(mén)+進(jìn)階(全套例程+書(shū)籍)

    Arduino是一款開(kāi)源電子原型平臺(tái),由硬件(單片機(jī)開(kāi)發(fā)板)和軟件(編程環(huán)境)組成,旨在讓非專(zhuān)業(yè)用戶(hù)也能輕松入門(mén)電子制作和編程。它的核心思想是簡(jiǎn)化硬件開(kāi)發(fā),通過(guò)直觀的編程和模塊化設(shè)計(jì),讓用戶(hù)快速實(shí)現(xiàn)
    的頭像 發(fā)表于 05-22 11:40 ?265次閱讀
    免費(fèi)分享<b class='flag-5'>Arduino</b>入門(mén)+進(jìn)階(全套例程+書(shū)籍)

    DS28E16 1-Wire SHA-3安全認(rèn)證器技術(shù)手冊(cè)

    計(jì)數(shù)器和唯一的64位ROM識(shí)別碼(ROM ID)。唯一的ROM ID用作加密運(yùn)算的基本輸入?yún)?shù),也作為應(yīng)用中的電子序列號(hào)。器件通過(guò)單觸點(diǎn)1-Wire?總線(xiàn)通信。通信采用1-Wire協(xié)議,ROM ID作為多器件1-Wire網(wǎng)絡(luò)中的
    的頭像 發(fā)表于 05-13 15:18 ?233次閱讀
    DS28E16 1-<b class='flag-5'>Wire</b> SHA-3安全認(rèn)證器技術(shù)手冊(cè)

    《ESP32S3 Arduino開(kāi)發(fā)指南》第二章 Arduino基礎(chǔ)知識(shí)

    完成一個(gè)電子產(chǎn)品的制作。這就給開(kāi)源硬件的推廣和普及設(shè)定了一個(gè)很高的門(mén)檻,電子愛(ài)好者需要花很多時(shí)間和精力才能開(kāi)始開(kāi)發(fā)和制作自己的作品。而使用Arduino能很快地完成一個(gè)電子產(chǎn)品的制作,
    發(fā)表于 05-13 09:28

    DS2431 1024位1-Wire EEPROM技術(shù)手冊(cè)

    DS2431是一款1024位1-Wire? EEPROM芯片,由四頁(yè)存儲(chǔ)區(qū)組成,每頁(yè)256位。數(shù)據(jù)先被寫(xiě)入一個(gè)8字節(jié)暫存器中,經(jīng)校驗(yàn)后復(fù)制到EEPROM存儲(chǔ)器。該器件的特點(diǎn)是,四頁(yè)存儲(chǔ)區(qū)相互獨(dú)立
    的頭像 發(fā)表于 02-26 15:38 ?791次閱讀
    DS2431 1024位1-<b class='flag-5'>Wire</b> EEPROM技術(shù)手冊(cè)

    DS2413系列雙通道可編程1-Wire芯片技術(shù)手冊(cè)

    DS2413是雙通道可編程I/O 1-Wire?芯片。PIO輸出配置為開(kāi)漏極,提供最高20mA的吸電流能力,截止?fàn)顟B(tài)工作電壓可達(dá)28V。通過(guò)專(zhuān)門(mén)的器件級(jí)命令協(xié)議實(shí)現(xiàn)PIO引腳的控制與檢測(cè)。為了在最終
    的頭像 發(fā)表于 02-26 15:12 ?466次閱讀
    DS2413系列雙通道可編程1-<b class='flag-5'>Wire</b>芯片技術(shù)手冊(cè)

    DS9490 USB至1-Wire/iButton適配器技術(shù)手冊(cè)

    DS9490B是一個(gè)USB橋接器和支架,用于單個(gè)F5尺寸的iButton。iButton被安全地固定在帶鎖的門(mén)后。DS9490R是一個(gè)帶有1-Wire RJ11接口的USB橋,可容納1-Wire插座
    的頭像 發(fā)表于 02-26 10:45 ?568次閱讀
    DS9490 USB至1-<b class='flag-5'>Wire</b>/iButton適配器技術(shù)手冊(cè)

    自己設(shè)計(jì)的Arduino UNO R3主控板原理圖+PCB源文件(可直接打樣)

    一年前做的Arduino UNO r3,開(kāi)源精神,把自己這塊板子奉獻(xiàn)給大家,板子沒(méi)有什么問(wèn)題,可以直接打樣制作,原理圖文件都表明了型號(hào)。不用謝~ Arduino UNO R3主控板原理圖部分截圖: *附件:MYArduino
    發(fā)表于 12-10 10:14

    開(kāi)源項(xiàng)目!基于 Arduino 的 MIDI 架子鼓

    牢固地固定在插槽中。 第 6 步:給鼓墊接線(xiàn) 1、固定電纜: 使用熱膠將帶狀電纜連接到墊子上。 2、焊接鼓墊: 通過(guò)焊接將鼓墊連接到多頻段帶狀電纜。 第 7 步:制作 Arduino 擴(kuò)展板 1
    發(fā)表于 11-25 12:00

    基于Arduino的串口通信項(xiàng)目

    基于Arduino的串口通信項(xiàng)目涉及多個(gè)方面,包括硬件連接、軟件編程、串口參數(shù)配置等。 一、硬件準(zhǔn)備 Arduino開(kāi)發(fā)板 :確保你有一塊Arduino開(kāi)發(fā)板,如Arduino Uno
    的頭像 發(fā)表于 11-22 09:24 ?2188次閱讀

    如何使用Arduino實(shí)現(xiàn)CAN總線(xiàn)通信

    CAN總線(xiàn)(Controller Area Network)是一種多主控制的串行通信協(xié)議,廣泛應(yīng)用于汽車(chē)電子、工業(yè)自動(dòng)化等領(lǐng)域。它以其高可靠性、實(shí)時(shí)性和靈活性而受到青睞。Arduino作為一個(gè)
    的頭像 發(fā)表于 11-12 10:09 ?2718次閱讀

    樹(shù)莓派與Arduino的區(qū)別是什么

    Pi): 樹(shù)莓派最初是作為教育工具設(shè)計(jì)的,旨在幫助學(xué)生學(xué)習(xí)計(jì)算機(jī)編程和電子工程。隨著時(shí)間的推移,它已經(jīng)發(fā)展成為一個(gè)多功能的微型計(jì)算機(jī),可以用于各種項(xiàng)目,包括但不限于: 家庭媒體中心 游戲機(jī) 網(wǎng)絡(luò)服務(wù)器 IoT(物聯(lián)網(wǎng))設(shè)備 教育和學(xué)習(xí)平臺(tái) Arduino
    的頭像 發(fā)表于 11-11 11:14 ?2347次閱讀

    開(kāi)源項(xiàng)目!基于Arduino做的“魷魚(yú)游戲”BOSS面具,支持動(dòng)作檢測(cè)

    這是一個(gè)結(jié)合了3D打印、舵機(jī)、PIR傳感器和DFPlayer MP3模塊的DIY項(xiàng)目,旨在制作一個(gè)帶有動(dòng)畫(huà)眼睛的\"魷魚(yú)游戲\"老板面具。當(dāng)檢測(cè)到動(dòng)作時(shí),面具的眼睛會(huì)移動(dòng)并播放
    發(fā)表于 10-28 10:18

    PGA308 3線(xiàn)制模式,one wire連接到Vout,對(duì)OTP編程后還能再通過(guò)one wire與PGA308通信嗎?

    請(qǐng)問(wèn)PGA308,3線(xiàn)制模式,one wire連接到Vout,已經(jīng)對(duì)OTP編程后,還能再通過(guò)one wire與PGA308通信嗎?再次對(duì)PGA308校準(zhǔn)
    發(fā)表于 08-22 07:41

    怎樣Arduino測(cè)試鋰電池容量

    本文詳細(xì)介紹了如何用Arduino測(cè)量鋰電池的容量。并附有電路圖和Arduino的程序代碼。
    的頭像 發(fā)表于 07-30 09:14 ?1670次閱讀
    <b class='flag-5'>怎樣</b>用<b class='flag-5'>Arduino</b>測(cè)試鋰電池容量

    基于 FPGA 的飛機(jī)大戰(zhàn)游戲系統(tǒng)設(shè)計(jì)

    第一部分 設(shè)計(jì)概述1.1 設(shè)計(jì)目的我們?cè)O(shè)計(jì)了一款基于 FPGA 的SEA開(kāi)發(fā)板 的飛機(jī)大戰(zhàn)游戲。飛機(jī)大戰(zhàn)游戲是一款休閑益智類(lèi)游戲,既簡(jiǎn)單又耐玩。在初始界面,我們有開(kāi)始游戲、重新開(kāi)始、
    發(fā)表于 07-24 20:03