שְׁאֵלָה:
מגן Maker Maker Maker - אחזר שמות שירים מכרטיס SD
Imayan
2015-04-15 03:37:00 UTC
view on stackexchange narkive permalink

כרגע אני עובד על פרויקט שמנגן עבורך מוזיקה. השאלה שלי לשרשור זה היא האם ניתן לאחזר את שמות השירים בתוך כרטיס המיקרו SD שמוכנס למגן? וכו 'כפי שניתן לראות בקוד הבא:

  const int arraySize = 5; שירי char [arraySize] [15] = {{"track001.mp3"}, {"track002.mp3 "}, {" track003.mp3 "}, {" track004.mp3 "}, {" track005.mp3 "}};  

ככה אני מנגן כרגע מוסיקה עם המגן הזה . אני לא מרוצה מכך מכיוון שהייתי רוצה להכניס כרטיסי מיקרו SD שונים למגן מבלי שאצטרך לשנות את שמם ל- track00X או מבלי שאצטרך לשנות את הקוד בכל פעם כדי להתאים לשמות השירים.

אז, האם ניתן לקודד אותו כדי לאחזר את שמות השירים מכרטיס ה- SD במקום שיהיה צורך לציין את שמם בקוד?

למטה תוכלו לראות את הקוד המלא שלי:

  #include <SPI.h> # include <Adafruit_VS1053.h> # include <SD.h> # define BREAKOUT_RESET 9 // VS1053 resetd output (pin_def10) / VS1053 סיכה לבחירת נתונים / פקודה (פלט) #define SHIELD_CS 7 // VS1053 pin pin pin (output) #define SHIELD_DCS 6 // VS1053 Data / command pin pin (output) #define CARDCS 4 // Pin pin pin pin בחר DREQ 3 // VS1053 בקשת נתונים, באופן אידיאלי סיכה להפסיק Adafruit_VS1053_FilePlay er musicPlayer = Adafruit_VS1053_FilePlayer (SHIELD_CS, SHIELD_DCS, DREQ, CARDCS); int volume = 20; const int arraySize = 5; שירי char [arraySize] [15] = {{"track001.mp3"}, {"track002.mp3"} , {"track003.mp3"}, {"track004.mp3"}, {"track005.mp3"}}; int songNumber = 0; התקנת חלל () {Serial.begin (9600); musicPlayer.begin (); SD.begin (CARDCS); musicPlayer.setVolume (נפח, נפח); musicPlayer.useInterrupt (VS1053_FILEPLAYER_PIN_INT);}
loop loop () {// נפח נמוך יותר אם (musicPlayer.GPIO_digitalRead (7) == HIGH) {if (volume < 70) {volume = volume + 1; musicPlayer.setVolume (נפח, נפח); עיכוב (50); }} // הגדל את עוצמת הקול אם (musicPlayer.GPIO_digitalRead (6) == HIGH) {if (volume > 0) {volume = volume - 1; musicPlayer.setVolume (נפח, נפח); עיכוב (50); }} // התחל נגן מוסיקה אם (musicPlayer.GPIO_digitalRead (5) == HIGH) {if (! MusicPlayer.playingMusic) {musicPlayer.startPlayingFile (שירים [songNumber]); }} // השהה / המשך אם (musicPlayer.GPIO_digitalRead (4) == HIGH) {if (! MusicPlayer.paused ()) {musicPlayer.pausePlaying (true); } אחר {musicPlayer.pausePlaying (שקר); } עיכוב (500); } // שיר קודם אם (musicPlayer.GPIO_digitalRead (3) == HIGH) {if (songNumber - 1 > = 0) {songNumber = songNumber - 1; } אחר {songNumber = arraySize - 1; } Serial.println (songNumber); musicPlayer.startPlayingFile (שירים [songNumber]); עיכוב (500); } // השיר הבא if (musicPlayer.GPIO_digitalRead (2) == HIGH) {if (songNumber + 1 < arraySize) {songNumber = songNumber + 1; } אחר {songNumber = 0; } Serial.println (songNumber); musicPlayer.startPlayingFile (שירים [songNumber]); עיכוב (500); }}  

אם זה אפשרי ומישהו שקורא את זה יודע לעשות זאת, אודה לך מאוד אם תסביר לי את זה ואפילו תביא דוגמה או אפילו תערוך את הקוד שלי אם אתה רוצה. תודה! :)

אחד תשובה:
mpflaga
2015-04-15 04:51:00 UTC
view on stackexchange narkive permalink

ספריית adafruit הייתה דומה לספרייה הקודמת של SFEMP3shield (גילוי אני המחבר הראשי לכך). עם זאת, כל אחת מהספריות יכולה לעבוד על מגן Adafruit או SFE או על לוח הפריצה. הספרייה של AdaFruit מכתיבה מחדש. אך בכך הוא מינימלי בתפקידיו. ספריית SFE מדגימה תכונות רבות נוספות של שבב VS1053.

שנאמר; ה ./Example/fileplayer.ino עושה בדיוק את מה שאתה מבקש. פקודת הספריה מפרטת את הקבצים עם מספר מונה. הזנת 0 [מספר] מנגנת את הקובץ. כך התנתקתי מ- "track ###. Mp3", בלי צורך ליישם מנתח שורת פקודה. וזה מאפשר גם פורמטים אחרים של קבצים.

חלק הארי של תכונה זו נמצא ב- LOOP () ולא במגבלה לספרייה. אז אפשר לחתוך ולהדביק אותו בסקיצה באמצעות ספריית Adafruit במקום ה- SFEMP3 או כל סקיצה עם SdCard. עם זאת, למעשה יהיה קל יותר להחליף את שיחות קובץ ההפעלה ולכלול בדוגמה FilePlayer.ino. או פשוט השתמש בו ישר למעלה.

ספריית SFEmp3 מעט מוחצת מכיוון שהיא תומכת בתכונות רבות כל כך של ה- VS1053. ומשתמש בספריית SdCard אחרת, שהיא מעודכנת יותר מה- SD של ה- IDE. "בעוד שספריית Adafruit היא כתיבה מחודשת מאוד נחמדה ומנקה הרבה הגדרה מבלבלת # להגדיל, מה שהופך אותה לקלה הרבה יותר לקריאה, אך היא אינה עשירה בתכונות אבל רוב התכונות מעבר למשחק ולעצור אינן נחוצות באמת.

בהצלחה.



שאלה ותשובה זו תורגמה אוטומטית מהשפה האנגלית.התוכן המקורי זמין ב- stackexchange, ואנו מודים לו על רישיון cc by-sa 3.0 עליו הוא מופץ.
Loading...