יום ראשון, 26 בפברואר 2017

שיעור מספר 8 / ליצן קטן שלי - אולי תרקוד איתי?... / לנגן בקלות עם ארדואינו

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

מוכנים? 

רכיבים: 

  • לוח ארדואינו
  • מטריצה
  • נגד 100𝛀 (גם נגד 330𝛀 יעבוד כאן אבל ינגן חלש יותר)
  • Buzzer (משהו שעושה באזז..)  - בעברית הוא כנראה יקרא "זמזם"
  • כמה חוטים.. 

תחילה נבנה את המעגל: 




ואחרי שבנינו את המעגל - נעלה את הקוד: 




כמו שאתם רואים התחלנו ממשהו מונוטוני רק בשביל להבין את העיקרון.

את שורת ה delay אתם ודאי מכירים: המטרה שלה היא לקבוע את ההשהיה של הארדואינו ובמקרה שלנו (ובמקרים רבים אחרים) השורה הזאת משפיעה על אורך הפקודה של השורה שלפניה, כלומר, הארדואינו ינגן את שורת ה tone למשך הזמן שמוקצב בשורת ה delay.

ואם הבנתם את זה - שאלה קטנה:


  • מה המשמעות של המספר שמופיע בשורת ה tone (במקרה שלנו 500)? 



נסו לשנות את המספר ולרשום במקומו מספר אחר (אל תשכחו להעלות את הקוד מחדש ללוח הארדואינו לאחר כל שינוי...). מה קיבלתם? הצלחתם להבין?

המספר שמופיע בשורת ה tone משפיע על התדירות של הזמזם ובמילים אחרות על גובה הצליל. בעזרת השמיעה המוזיקלית של דביר ובעזרתו האדיבה של גוגל - אני מציג לכם כאן את נוסחת הצלילים שבנה דביר:

דו - 261
רה  - 294
מי - 330
פה - 349
סול - 392
לה - 440
סי - 490
דו - 525

וכדי לנגן את הדו-רה-מי אתם צריכים להעלות לארדואינו את הקוד הבא:



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

המשימה היתה להמיר את תווי השיר לשפת הארדואינו. לא קשה אבל עבודה די משעממת...



ובארדואינית זה נראה כך:





ונשמע כך:




אבל צריך להודות על האמת שהקוד הזה לא נראה טוב. הוא ארוך מדי יחסית למה שהוא מבצע ולכן החלטתי לקצר אותו מעט.





השתמשתי כאן בשתי לולאות for בשביל להכפיל שני קטעים שחוזרים על עצמם במחרוזת הזאת.

ולסיום - תוכלו לכתוב קוד אחר שמנגן שיר קצר?

בהצלחה! 

3 תגובות:

  1. האם צריךזמזמם מיוחד ? או שכל זמזם עם חיבור פלוס ומינוס מתאים?

    השבמחק
  2. אני מניח שכל זמזם יתאים..

    השבמחק
    תשובות
    1. int speakerPin = 12;

      void setup()
      {}

      void loop()
      {
      tone(speakerPin, 392);
      delay(500);
      tone(speakerPin, 330);
      delay(500);
      tone(speakerPin, 330);
      delay(500);
      tone(speakerPin, 349);
      delay(500);
      tone(speakerPin, 294);
      delay(500);
      tone(speakerPin, 261);
      delay(1500);
      tone(speakerPin, 294);
      delay(500);
      tone(speakerPin, 330);
      delay(500);
      tone(speakerPin, 349);
      delay(500);
      tone(speakerPin, 392);
      delay(500);
      tone(speakerPin, 392);
      delay(500);
      noTone(speakerPin);
      delay(20);
      tone(speakerPin, 392);
      delay(1500);
      noTone(speakerPin);
      delay(20);
      tone(speakerPin, 392);
      delay(500);
      tone(speakerPin, 330);
      delay(500);
      tone(speakerPin, 330);
      delay(500);
      tone(speakerPin, 349);
      delay(500);
      tone(speakerPin, 294);
      delay(500);
      tone(speakerPin, 294);
      delay(1500);
      tone(speakerPin, 525);
      delay(500);
      tone(speakerPin, 330);
      delay(500);
      tone(speakerPin, 392);
      delay(500);
      tone(speakerPin, 392);
      delay(500);
      tone(speakerPin, 525);
      delay(500);
      noTone(speakerPin);
      delay(20);
      tone(speakerPin, 294);
      delay(1500);
      noTone(speakerPin);
      delay(20);

      tone(speakerPin, 294);
      delay(500);
      tone(speakerPin, 294);
      delay(1500);

      tone(speakerPin, 294);
      delay(500);
      tone(speakerPin, 294);
      delay(1500);

      tone(speakerPin, 330);
      delay(500);
      tone(speakerPin, 349);
      delay(500);
      tone(speakerPin, 330);
      delay(500);
      tone(speakerPin, 330);
      delay(500);
      tone(speakerPin, 330);
      delay(500);
      tone(speakerPin, 330);
      delay(1500);
      noTone(speakerPin);
      delay(20);

      tone(speakerPin, 330);
      delay(500);
      tone(speakerPin, 349);
      delay(1500);

      tone(speakerPin, 392);
      delay(500);
      tone(speakerPin, 392);
      delay(1500);

      tone(speakerPin, 330);
      delay(500);
      tone(speakerPin, 330);
      delay(500);
      tone(speakerPin, 349);
      delay(500);
      tone(speakerPin, 294);
      delay(500);
      tone(speakerPin, 294);
      delay(500);
      tone(speakerPin, 525);
      delay(1500);

      noTone(speakerPin);
      delay(2000);

      מחק

הערות? הארות? יש לך משהו חשוב לספר לכולם? שאלות?

נשמח לשמוע!

(התגובה תפורסם בהקדם בכפוף לאישור מערכת מייקינג)