
נקנה ב adafruit
הסבר טכני:
ה”מגן” מאפשר לנגן קובצי מוסיקה בעזרת הארדואינו מתוך כרטיס SD (כזה של מצלמות). ניתן להשמיע את המוסיקה מאוזניות (יש חור מתאים) או מרמקול (אותו צריך להלחים לשני החורים הפנויים הצמודים לחור האוזניות על המעגל המודפס).
לא ניתן לנגן בסטריאו (שני הערוצים יאוחדו לאחד) וניתן לנגן רק קבצים מסוג WAV, המוגבלים לתנאים מסויימים. לפירוט ולהסברים איך להתאים קובצי מוסיקה וסאונד לשימוש במגן, הכנסו לקישור זה.
לאחר הכנת הכרטיס ועליו הקבצים אותם אתם מעוניינים לנגן, בצעו את השלבים הבאים:
1. פתחו את הקובץ הזה: http://wavehc.googlecode.com/files/wavehc20090519.zip
2. בצעו לו extract (לא חשוב לאיפה) ואז העבירו את הספריה WaveHC (עם תכולתה) לתוך Arduino-0015\hardware\libraries
3. פתחו בעורך הארדואינו את הקובץ הזה, הריצו אותו והפעילו את ה- Serial Monitor על-מנת לראות הודעות. התוכנה אמורה לנגן ברצף את כל הקבצים שבכרטיס – ולהודיע אם יש בעיות.
השלב הבא, לאחר שוידאתם שהכרטיס עובד, הוא להתאים את התוכנה והלוח לצרכי הפרוייקט שלכם.
התאמת הלוח:
הלוח הינו “מגן”, כלומר הוא מורכב על הארדואינו ולכאורה “תופס” את כל הפינים שלו. למעשה, הוא משתמש רק בחלק מהפינים וניתן להשתמש בכל השאר ע”י חיבור (הלחמה) לחורים הפנויים שלידם. הפינים התפוסים הם:
פנינם דיגיטליים 2,3,4,5,10,11,12,13. כל שאר הפינים הדיגיטליים, האנלוגיים וכן 5V, Vin, Gnd פנויים לשימושכם, לשם חיבור אמצעי קלט ופלט נוספים.
התאמת התוכנה:
התוכנה שבה השתמשתם קודם כדי לבדוק את הכרטיס מסורבלת מאד וקשה להתאימה לביצוע פעולות אחרות.
במקומה, ניתן להשתמש בתוכנה הבאה, ולשנותה כך שתתאים לפרוייקט שלכם. התוכנה בודקת כפתור (מתג), המחובר בין פין 6 ל- gnd. כאשר הכפתור נלחץ ונעזב – מתחיל ניגון של הקובץ הראשון שבכרטיס. לחיצה נוספת על הכפתור תפסיק את הניגון.
#include <FatReader.h>
#include <SdReader.h>
#include <avr/pgmspace.h>
#include "WaveUtil.h"
#include "WaveHC.h"
#define swPin 6
SdReader card;
FatVolume vol;
FatReader file;
dir_t dirBuf;
WaveHC wave;
void play()
{
file.rewind();
file.readDir(dirBuf);
file.open(vol, dirBuf);
wave.create(file);
wave.play();
}
void setup() {
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode (swPin, OUTPUT);
digitalWrite (swPin, HIGH);
pinMode (swPin, INPUT);
card.init();
card.partialBlockRead(true);
uint8_t part;
for (part = 0; part < 5; part++) {
if (vol.init(card, part)) break;
}
file.openRoot(vol);
}
void loop() {
if (!digitalRead (swPin)) {
delay (100);
while (!digitalRead (swPin)) {};
delay (100);
if (wave.isplaying) {
wave.stop();
} else {
play();
}
}
}
שימו לב: על מנת לשמור על מבנה פשוט ככל הניתן, התוכנה מניחה שיש קבצים מתאימים בספריה הראשית בלבד של כרטיס ה- SD (התוכנה מתייחסת רק לקובץ הראשון). רצוי להפעיל את התוכנה רק לאחר שבדקתם שהכל עובד עם התוכנה המלאה שלעיל.
ניתן לבצע פעולות נוספות עם קבצי הסאונד:
על-מנת להפסיק את הניגון באופן שניתן יהיה להמשיך אח”כ מאותה נקודה, השתמשו בפקודה:
wave.pause();
על-מנת להמשיך את הניגון לאחר מכן,כתבו:
wave.play();
הערה: המשתנה wave.isplaying המשמש לבדיקה אם מתבצע ניגון כרגע נשאר במצב true כאשר הניגון בהשהיה (pause), כלומר אינו יעיל לבדיקה זו במקרה זה.
על-מנת לנגן את הקובץ השני, הכפילו את השורה הבאה (בתוך הפרוצדורה play):
file.readDir(dirBuf);
על-מנת לנגן שירים מאוחרים יותר, ניתן לשכפל את השורה ככל הנדרש – אפשר באמצעות לולאת for.
ישנן אפשרויות שליטה נוספות, אולם הן מורכבות יותר. מידע אודותן ניתן למצוא בתיעוד המוכל בקובץ ה- zip שהורדתם לעיל וכן בהסברים שבאתר של ה- WaveShield. בגרסה הנוכחית, השליטה בעוצמת הקול על-ידי התוכנה לא עובדת.