מה נלמד כאן
- לבנות כלי נגינה מלא
- נגד 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היה נשאר קסם.
ההרכבה
בלי ערכת הבנייה — אפשר לבנות הכול על שני לוחות ניסוי.
שלבי ההרכבה:





























הניסוי
המטרה: שבעה לחצנים מנגנים שבעה תווים.
רשימת רכיבים
| הרכיב | כמות |
|---|---|
| לוח 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: פסנתר שנשלט מהדפדפן.


