דלגו לתוכן המרכזי
KitLab
שיעור קודם
פסנתר אלקטרוני — הפרויקט המסכם· 5 / 5
פסנתר אלקטרוני — הפרויקט המסכם
🎬

הסרטון בדרך אלינו

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

פסנתר אלקטרוני — הפרויקט המסכם

מה בשיעור?

  • שבעה קלידים ומיפוי לתדרים
  • INPUT_PULLUP — נגדים בתוך השבב
  • מערכים מקבילים בשירות הקוד הקצר
  • מתי while הוא הפתרון ומתי הבעיה
  • סיכום כל מה שנלמד בקורס

מה נלמד כאן

  • לבנות כלי נגינה מלא
  • נגד Pull-Up פנימי
  • הפרויקט המסכם של הקורס

הפרויקט האחרון

שבעה לחצנים, שבעה תווים, פסנתר.

פסנתר אלקטרוני

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


הידע שצריך

מבנה הפסנתר

מבנה המערכת

שבעה לחצנים, כל אחד מחובר לפין משלו, וכל אחד קשור לתדר קבוע:

הקלַיד התו התדר (Hz)
1 דו (C4) 523
2 רה (D4) 587
3 מי (E4) 659
4 פה (F4) 698
5 סול (G4) 784
6 לה (A4) 880
7 סי (B4) 988

לחיצה → הזמזם מנגן. שחרור → הצליל נפסק.

INPUT_PULLUP — הפעם בלי נגדים

בשיעור 4 בנינו מעגל Pull-Up עם נגד חיצוני לכל לחצן. כאן יש שבעה לחצנים — זה אומר שבעה נגדים ושבעה חוטים נוספים.

הפתרון:

pinMode(keys[i], INPUT_PULLUP);

ל-ESP32 יש נגדי Pull-Up מובנים בתוך השבב. השורה הזו מפעילה אותם — ומייתרת את כל שבעת הנגדים החיצוניים.

⚠️ ההיגיון נשאר הפוך: לחיצה = LOW, משוחרר = HIGH. בדיוק כמו בשיעור 4.

שווה לדעת שזה היה קיים כל הזמן. למדנו את הדרך הארוכה קודם — כי בלי להבין מה עושה נגד Pull-Up, INPUT_PULLUP היה נשאר קסם.


ההרכבה

בלי ערכת הבנייה — אפשר לבנות הכול על שני לוחות ניסוי.

שלבי ההרכבה:

שלב הרכבה 1

שלב הרכבה 2

שלב הרכבה 3

שלב הרכבה 4

שלב הרכבה 5

שלב הרכבה 6

שלב הרכבה 7

שלב הרכבה 8

שלב הרכבה 9

שלב הרכבה 10

שלב הרכבה 11

שלב הרכבה 12

שלב הרכבה 13

שלב הרכבה 14

שלב הרכבה 15

שלב הרכבה 16

שלב הרכבה 17

שלב הרכבה 18

שלב הרכבה 19

שלב הרכבה 20

שלב הרכבה 21

שלב הרכבה 22

שלב הרכבה 23

שלב הרכבה 24

שלב הרכבה 25

שלב הרכבה 26

שלב הרכבה 27

שלב הרכבה 28

שלב הרכבה 29


הניסוי

המטרה: שבעה לחצנים מנגנים שבעה תווים.

רשימת רכיבים

הרכיב כמות
לוח ESP32 1
לוח ניסוי 400 נקודות 2
זמזם פסיבי 1
לחצנים 7
נגד 1kΩ 1
טרנזיסטור 1

שבעה לחצנים ואפס נגדי Pull-Up — הודות ל-INPUT_PULLUP.


הקוד

#define BUZZER_PIN 5

// שבעת הלחצנים
int keys[7] = {14, 25, 26, 27, 32, 33, 13};

// שבעת התווים
int notes[7] = {523, 587, 659, 698, 784, 880, 988};

void setup() {
  for (int i = 0; i < 7; i++) {
    pinMode(keys[i], INPUT_PULLUP);        // נגד פנימי
  }
}

void loop() {
  for (int i = 0; i < 7; i++) {
    if (digitalRead(keys[i]) == LOW) {     // הקלַיד נלחץ
      tone(BUZZER_PIN, notes[i]);          // מנגנים
      while (digitalRead(keys[i]) == LOW); // כל עוד מחזיקים
      noTone(BUZZER_PIN);                  // שחררו — עוצרים
    }
  }
}

למה הקוד כל כך קצר

כל התוכנית היא 20 שורות — ובתוכן פסנתר מלא. שלושה דברים מאפשרים את זה:

1. מערכים מקביליםkeys[i] הוא הלחצן, notes[i] התו שלו. התבנית מהשיעור התשיעי, ובזכותה אין כאן שבעה בלוקים של if.

2. INPUT_PULLUP — חסך שבעה נגדים ושבעה חוטים.

3. ה-whileכאן הוא דווקא רצוי. הוא מחזיק את הצליל בדיוק כל עוד מחזיקים את הקלַיד. זה מה שהופך את זה מ"צפצוף" לנגינה אמיתית.

שימו לב שזה ההפך משיעור 37, שם ה-while היה בעיה. אותו כלי, הקשר אחר. הבנה מתי להשתמש במה — זה מה שמפריד בין להעתיק קוד לכתוב קוד.


סיימתם את הקורס

עצרו רגע ותסתכלו אחורה.

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

ובדרך למדתם: PWM ובקרת הספק, קריאה אנלוגית ו-ADC, תשעה סוגי חיישנים, מנועים וסרוו, תצוגות וסריקה דינמית, מערכים ופונקציות, מכונות מצבים והיסטרזיס, אינפרה-אדום, I2C, בלוטות' ו-WiFi — ובניתם שרת אינטרנט על שבב.

מה שלמדתם כאן לא ספציפי לערכה הזו. C++ על ESP32 היא השפה הנפוצה בעולם ה-IoT, ואותם עקרונות עובדים על כל לוח, כל חיישן וכל פרויקט שתפגשו.

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


נסו בעצמכם

  • נגנו "כוכב קטן" — אתם כבר יודעים את התווים משיעור 9.
  • הוסיפו נורית לכל קלַיד שנדלקת בלחיצה.
  • הוסיפו מתג אוקטבה: לחצן שמכפיל את כל התדרים ב-2.
  • הקליטו רצף: שמרו את התווים שניגנתם במערך ונגנו אותם חזרה.
  • שלבו עם שיעור 33: פסנתר שנשלט מהדפדפן.

🧰 הרכיבים לשיעור הזה

רוצים את חומרי הקורס והעדכונים?

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