在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

用Lilypad制作音板的教程

李娜 ? 來源:Device Plus ? 作者:Device Plus ? 2023-02-08 13:43 ? 次閱讀

Arduino平臺的設計非常靈活,使用Uno等單個開發板就可以創建出無數項目。但是,專為執行特定任務而設計的專用板對某些項目來說尤其有用。為了展示這一點,我們將用LilyPad MP3(一種變體Arduino開發板)來構建一個音板。

變體開發板的工作原理

開源軟件平臺允許開發人員檢查和修改他們的代碼。同樣,像Arduino這樣的開源硬件平臺允許第三方構建他們自己版本的兼容板。Arduino板的LilyPad系列就是這樣的一種變體。該板專為電子紡織品設計,可以縫制到織物項目中。這使其成為服裝和智能服裝的理想選擇。

poYBAGPbihCAScn7AAArFFOcbUw502.jpg

LilyPad MP3是LilyPad系列的另一個子變體,包括一個內置SD卡讀卡器、一個立體聲音頻放大器和3.5毫米耳機插孔,以及五個預編程過的觸發器輸入。無需任何編碼設置,您最多可以連接五個觸發器來播放預先錄制的聲音文件。如果您曾在迪士尼見過可以播放一組預先編寫好的語句的星球大戰沖鋒隊 ,那么可以告訴您LilyPad MP3的功能與其非常相似。

雖然LilyPad MP3可以像任何Arduino板那樣編程,但是該項目的優點是您可以在不修改任何現有代碼的情況下對音板進行設置。它可以向您證明為您的項目盡早選擇合適的開發板有多么值得。使用普通的Arduino Uno需要有一個外部擴展板才能具有與LilyPad MP3相同的功能,而且體積會更大。由于大多數Arduino板都可以與大部分草圖兼容,因此找到滿足您需求的外形尺寸可以為您省去大量的時間和麻煩。

所需組件

對于本項目,我們將演示LilyPad MP3如何在面包板上工作的,其實就是讓線路能夠正常工作。首先,您需要一個LilyPad MP3。

您還需要1-5個按鈕(只需要一個,但是LilyPad最多支持5個)、一個揚聲器(或耳機)和3.5毫米電纜。

由于LilyPad旨在用于服裝,您可以選擇使用一些線和針將設備縫制到外套、衣服或任何其他您想要裝上音板的地方。使用導電布線可以讓您將電線直接編織到衣服的面料中。

poYBAGPbihKALCLHAABcE2vMSpI330.jpg

代碼

如上所述,LilyPad MP3上默認觸發器草圖的代碼預裝在了每塊板上。您不需要上傳此文件,但查看這些代碼來了解工作原理會很有幫助。

// “Trigger” example sketch for Lilypad MP3 Player
// Mike Grusin, SparkFun Electronics
// http://www.sparkfun.com

// This sketch (which is preloaded onto the board by default),
// will play a specific audio file when one of the five trigger
// inputs (labeled T1 – T5) is momentarily grounded.

// You can place up to five audio files on the micro-SD card.
// These files should have the desired trigger number (1 to 5)
// as the first character in the filename. The rest of the
// filename can be anything you like. Long file names will work,
// but will be translated into short 8.3 names. We recommend using
// 8.3 format names without spaces, but the following characters
// are OK: .$%’-_@~`!(){}^#&. The VS1053 can play a variety of
// audio formats, see the datasheet for information.

// By default, a new trigger will interrupt a playing file, except
// itself. (In other words, a new trigger won’t restart an
// already-playing file). You can easily change this behavior by
// modifying the global variables “interrupt” and “interruptself”
// below.

// This sketch can output serial debugging information if desired
// by changing the global variable “debugging” to true. Note that
// this will take away trigger inputs 4 and 5, which are shared
// with the TX and RX lines. You can keep these lines connected to
// trigger switches and use the serial port as long as the triggers
// are normally open (not grounded) and remain ungrounded while the
// serial port is in use.

// Uses the SdFat library by William Greiman, which is supplied
// with this archive, or download from http://code.google.com/p/sdfatlib/

// Uses the SFEMP3Shield library by Bill Porter, which is supplied
// with this archive, or download from http://www.billporter.info/

// License:
// We use the “beerware” license for our firmware. You can do
// ANYTHING you want with this code. If you like it, and we meet
// someday, you can, but are under no obligation to, buy me a
// (root) beer in return.

// Have fun!
// -your friends at SparkFun

// Revision history:
// 1.0 initial release MDG 2012/11/01

// We’ll need a few libraries to access all this hardware!

#include // To talk to the SD card and MP3 chip
#include // SD card file system
#include // MP3 decoder chip

// Constants for the trigger input pins, which we’ll place
// in an array for convenience:

const int TRIG1 = A0;
const int TRIG2 = A4;
const int TRIG3 = A5;
const int TRIG4 = 1;
const int TRIG5 = 0;
int trigger[5] = {TRIG1, TRIG2, TRIG3, TRIG4, TRIG5};

// And a few outputs we’ll be using:

const int ROT_LEDR = 10; // Red LED in rotary encoder (optional)
const int EN_GPIO1 = A2; // Amp enable + MIDI/MP3 mode select
const int SD_CS = 9; // Chip Select for SD card

// Create library objects:

SFEMP3Shield MP3player;
SdFat sd;

// Set debugging = true if you’d like status messages sent
// to the serial port. Note that this will take over trigger
// inputs 4 and 5. (You can leave triggers connected to 4 and 5
// and still use the serial port, as long as you’re careful to
// NOT ground the triggers while you’re using the serial port).

boolean debugging = false;

// Set interrupt = false if you would like a triggered file to
// play all the way to the end. If this is set to true, new
// triggers will stop the playing file and start a new one.

boolean interrupt = true;

// Set interruptself = true if you want the above rule to also
// apply to the same trigger. In other words, if interrupt = true
// and interruptself = false, subsequent triggers on the same
// file will NOT start the file over. However, a different trigger
// WILL stop the original file and start a new one.

boolean interruptself = false;

// We’ll store the five filenames as arrays of characters.
// “Short” (8.3) filenames are used, followed by a null character.

char filename[5][13];

void setup()
{
int x, index;
SdFile file;
byte result;
char tempfilename[13];

// Set the five trigger pins as inputs, and turn on the
// internal pullup resistors:

for (x = 0; x <= 4; x++) { pinMode(trigger[x], INPUT); digitalWrite(trigger[x], HIGH); } // If serial port debugging is inconvenient, you can connect // a LED to the red channel of the rotary encoder to blink // startup error codes: pinMode(ROT_LEDR, OUTPUT); digitalWrite(ROT_LEDR, HIGH); // HIGH = off // The board uses a single I/O pin to select the // mode the MP3 chip will start up in (MP3 or MIDI), // and to enable/disable the amplifier chip: pinMode(EN_GPIO1, OUTPUT); digitalWrite(EN_GPIO1, LOW); // MP3 mode / amp off // If debugging is true, initialize the serial port: // (The ‘F’ stores constant strings in flash memory to save RAM) if (debugging) { Serial.begin(9600); Serial.println(F(“Lilypad MP3 Player trigger sketch”)); } // Initialize the SD card; SS = pin 9, half speed at first if (debugging) Serial.print(F(“initialize SD card… “)); result = sd.begin(SD_CS, SPI_HALF_SPEED); // 1 for success if (result != 1) // Problem initializing the SD card { if (debugging) Serial.print(F(“error, halting”)); errorBlink(1); // Halt forever, blink LED if present. } else if (debugging) Serial.println(F(“success!”)); // Start up the MP3 library if (debugging) Serial.print(F(“initialize MP3 chip… “)); result = MP3player.begin(); // 0 or 6 for success // Check the result, see the library readme for error codes. if ((result != 0) && (result != 6)) // Problem starting up { if (debugging) { Serial.print(F(“error code “)); Serial.print(result); Serial.print(F(“, halting.”)); } errorBlink(result); // Halt forever, blink red LED if present. } else if (debugging) Serial.println(F(“success!”)); // Now we’ll access the SD card to look for any (audio) files // starting with the characters ‘1’ to ‘5’: if (debugging) Serial.println(F(“reading root directory”)); // Start at the first file in root and step through all of them: sd.chdir(“/”, true); while (file.openNext(sd.vwd(), O_READ)) { // get filename file.getFilename(tempfilename); // Does the filename start with char ‘1’ through ‘5’? if (tempfilename[0] >= ‘1’ && tempfilename[0] <= ‘5’)
{
// Yes! subtract char ‘1’ to get an index of 0 through 4.

index = tempfilename[0] – ‘1’;

// Copy the data to our filename array.

strcpy(filename[index], tempfilename);

if (debugging) // Print out file number and name
{
Serial.print(F(“found a file with a leading “));
Serial.print(index + 1);
Serial.print(F(“: “));
Serial.println(filename[index]);
}
}
else if (debugging)
{
Serial.print(F(“found a file w/o a leading number: “));
Serial.println(tempfilename);
}

file.close();
}

if (debugging)
Serial.println(F(“done reading root directory”));

if (debugging) // List all the files we saved:
{
for(x = 0; x <= 4; x++)
{
Serial.print(F(“trigger “));
Serial.print(x + 1);
Serial.print(F(“: “));
Serial.println(filename[x]);
}
}

// Set the VS1053 volume. 0 is loudest, 255 is lowest (off):

MP3player.setVolume(10, 10);

// Turn on the amplifier chip:

digitalWrite(EN_GPIO1, HIGH);
delay(2);
}

void loop()
{
int t; // current trigger
static int last_t; // previous (playing) trigger
int x;
byte result;

// Step through the trigger inputs, looking for LOW signals.
// The internal pullup resistors will keep them HIGH when
// there is no connection to the input.

// If serial debugging is on, only check triggers 1-3,
// otherwise check triggers 1-5.

for(t = 1; t <= (debugging ? 3 : 5); t++)
{
// The trigger pins are stored in the inputs[] array.
// Read the pin and check if it is LOW (triggered).

if (digitalRead(trigger[t – 1]) == LOW)
{
// Wait for trigger to return high for a solid 50ms
// (necessary to avoid switch bounce on T2 and T3
// since we need those free for I2C control of the
// amplifier)

x = 0;
while(x < 50)
{
if (digitalRead(trigger[t – 1]) == HIGH)
x++;
else
x = 0;
delay(1);
}

if (debugging)
{
Serial.print(F(“got trigger “));
Serial.println(t);
}

// Do we have a valid filename for this trigger?
// (Invalid filenames will have 0 as the first character)

if (filename[t – 1][0] == 0)
{
if (debugging)
Serial.println(F(“no file with that number”));
}
else // We do have a filename for this trigger!
{
// If a file is already playing, and we’ve chosen to
// allow playback to be interrupted by a new trigger,
// stop the playback before playing the new file.

if (interrupt && MP3player.isPlaying() && ((t != last_t) || interruptself))
{
if (debugging)
Serial.println(F(“stopping playback”));

MP3player.stopTrack();
}

// Play the filename associated with the trigger number.
// (If a file is already playing, this command will fail
// with error #2).

result = MP3player.playMP3(filename[t – 1]);

if (result == 0) last_t = t; // Save playing trigger

if(debugging)
{
if(result != 0)
{
Serial.print(F(“error “));
Serial.print(result);
Serial.print(F(” when trying to play track “));
}
else
{
Serial.print(F(“playing “));
}
Serial.println(filename[t – 1]);
}
}
}
}
}

void errorBlink(int blinks)
{
// The following function will blink the red LED in the rotary
// encoder (optional) a given number of times and repeat forever.
// This is so you can see any startup error codes without having
// to use the serial monitor window.

int x;

while(true) // Loop forever
{
for (x = 0; x < blinks; x++) // Blink the given number of times
{
digitalWrite(ROT_LEDR, LOW); // Turn LED ON
delay(250);
digitalWrite(ROT_LEDR, HIGH); // Turn LED OFF
delay(250);
}
delay(1500); // Longer pause between blink-groups
}
}

雖然逐行看下來代碼實在太多了(而且很多都在本項目中用不到),但是有幾個關鍵點值得強調。首先,有一些函數是Bill Porter的MP3播放器庫的一部分。這些函數通過VS1053B解碼芯片控制音頻文件。這些獨特的函數包括:

● setVolume(): 該函數可以調節輸出音量的級別。
● isPlaying(): 該函數可用于確定當前是否正在播放MP3(可用于中斷或停止播放)。
● stopTrack(): 可以停止當前正在播放的曲目。
● playMP3(): 該函數用于播放SD卡中的文件。默認草圖設置為播放與輸入所連接觸發器匹配的文件。

要在LilyPad上設置音軌,您最多可以將五個音頻文件添加到微SD卡中。盡管LilyPad的名稱是MP3,但是它支持多種音頻文件格式。您可以在此處找到所支持的格式列表。您可以隨意命名文件,只要文件名以1到5之間的數字開頭即可。

默認草圖將播放與激活的觸發器對應的音頻文件。觸發器1(在LilyPad上標記為T1)將激活以1開頭的音頻文件。觸發器2將播放以2開頭的文件,以此類推。只要您正確命名音頻文件,就不必對代碼進行任何處理。

接線

將所有組件連接到LilyPad很簡單。將微SD卡插入微SD卡槽,然后將揚聲器或一副耳機插入耳機插孔。如果您想將揚聲器直接連接到開發板,LilyPad還具有用于左右揚聲器的正負極觸點。

接下來,將按鈕連接到您要使用的每個觸發器。按鈕的一側連接到GND,而另一側連接到您要激活的觸發器觸點。LilyPad上的觸發器觸點中有一個大圓形觸點和一個緊鄰大觸點的較小觸點。您可以將電線焊接到較小的觸點,或將電線纏繞在較大的觸點上。

按下按鈕,此時應該會觸發音頻文件的播放。確認接線正常后,您就可以嘗試使用導電布線將接線縫入織物中了。

這篇文章來源于DevicePlus.com英語網站的翻譯稿。

DevicePlus 編輯團隊

設備升級版適用于所有熱愛電子和機電一體化的人。

審核編輯黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 觸發器
    +關注

    關注

    14

    文章

    2000

    瀏覽量

    61208
  • 代碼
    +關注

    關注

    30

    文章

    4797

    瀏覽量

    68710
  • Arduino
    +關注

    關注

    188

    文章

    6471

    瀏覽量

    187288
收藏 人收藏

    評論

    相關推薦

    怎樣制作一個錄音板

    畢業設計題目是錄音板,對此毫無頭緒,資料也寥寥無幾。有沒有了解錄音板相關知識和制作方法的人啊~~~
    發表于 02-17 15:07

    誰會制作音板啊?!

    誰有錄音板制作的相關資料,論文啊~~~~急~~~~~~~~~~~~~~~
    發表于 03-02 13:27

    求錄音板制作的相關論文資料

    誰有錄音板制作的資料和論文啊?一直找不到相關資料,急~~~~
    發表于 03-02 13:30

    關于isd1700錄音板

    請問isd1700配套的那個錄音板可以普通的51單片機開發板代替來錄音嗎?
    發表于 01-25 16:46

    EasyEDA開源硬件——Arduino LilyPad 帶USB 的Atmega32U4板

    很簡單,僅僅更加簡單。我們已經升級了簡單板子從而創建LilyPad USB 通過新的ATMega32U4.替換 經典的ATMega328。 這不僅僅意味著它正在多種多樣的最新和最偉大的啟動加載器中
    發表于 01-20 18:37

    EasyEDA開源硬件——LilyPad MP3

    LilyPad 紡織先得一部分,這塊板可以用來給你的織物創作以音樂,以及其他能夠放在微SD卡內的聲音。它可以3.7V鋰電池充電,或者一個外部的3.5V-6V 的電源。當五個觸發輸入接地的時候可以播放
    發表于 01-21 15:42

    EasyEDA開源硬件——LilyPad Arduino SimpleSnap (Open hardware)

    本帖最后由 GerryChen 于 2016-1-28 18:31 編輯 LilyPad Arduino SimpleSnap (Open hardware)LilyPad Arduino
    發表于 01-25 18:49

    EasyEDA硬件開源項目——LilyPad開發板

    of the components before snapping them apart and building them into your project.The ProtoSnap LilyPad
    發表于 01-27 14:52

    EasyEDA開源硬件項目——LilyPad 簡單電源

    Description: The LilyPad Simple Power is a simple e-textile board that lets you connect and charge
    發表于 02-02 10:20

    EasyEDA開源硬件——LilyPad 供應電源

    to power your LilyPad circuit. Good up to 200mA. Short circuit protected.This board has AAA battery clips
    發表于 02-02 10:24

    EasyEDA開源硬件——LilyPad像素板

    Description: We know you love adding color to your e-textiles, adding the LilyPad Pixel Board
    發表于 02-02 10:29

    EasyEDA開源硬件電路——LilyPad Xbee 模塊

    Description: The LilyPad XBee is a breakout board for the popular XBee modules that can be sewn
    發表于 02-02 10:37

    Arduino Lilypad可控NeoPixel耳環的制作

    3個不同的地方針和繩子縫合NeoPixel和Lilypad。兩者都有足夠的洞。你可以從任何地方離開。
    的頭像 發表于 11-07 10:47 ?2571次閱讀

    Arduino LilyPad控制的NeoPixel耳環

    電子發燒友網站提供《Arduino LilyPad控制的NeoPixel耳環.zip》資料免費下載
    發表于 12-12 09:29 ?0次下載
    Arduino <b class='flag-5'>LilyPad</b>控制的NeoPixel耳環

    無源調音板好還是有源調音板

    無源調音板和有源調音板是音頻處理中常用的兩種設備。它們在音頻信號處理和聲音調節方面有著不同的特點和功能。無源調音板是一種簡單的信號控制設備,主要用于音頻信號的調節和控制,而有源調音板
    的頭像 發表于 12-22 15:57 ?2621次閱讀
    主站蜘蛛池模板: 欧美三级视频在线| 国语对白一区二区三区| 天天操人人射| 久久久久久久综合色一本 | 交专区videossex另类| 国产免费色视频| 美女被羞羞产奶视频网站| 色偷偷91久久综合噜噜噜| 国产精品久久免费观看| 中文字幕1区2区| 欧美性xxxx巨大黑人猛| 草草影院私人免费入口| 久久婷婷色综合老司机| ts 人妖 另类 在线| 欧洲乱码专区一区二区三区四区| 亚洲色图 第一页| 亚洲黄色三级| 国产伦精品一区二区三区高清| 天天综合久久久网| 天天做天天爱天天操| 午夜看片影院在线观看| 五月天欧美| 免费观看国产网址你懂的| 狠狠操夜夜| 西西人体44renti大胆亚洲| 欧美黄色大全| 亚洲一卡2卡4卡5卡6卡在线99| 啪一啪日一日| 黄色网址视频在线观看| 性猛交╳xxx乱大交| 天天躁夜夜躁狠狠躁2021西西| 日本一视频一区视频二区| 综合色99| 三级亚洲| 狠狠色噜狠狠狠狠色综合久| bt种子磁力天堂torrent| 天天干狠狠干| 日本最猛黑人xxxx猛交| 亚洲成av人影片在线观看| 一级一级女人18毛片| 视频一区二区在线播放|