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

הידע שצריך
1. איך זה בנוי
התצוגה בנויה משמונה נוריות עצמאיות מסודרות בצורת הספרה 8:

- שבעה מקטעים — מסומנים באותיות a, b, c, d, e, f, g
- נקודה עשרונית — dp
כל מקטע הוא נורית רגילה לכל דבר. מדליקים צירופים שונים — ומקבלים ספרות ואותיות.
לדוגמה, כדי להציג 5: מדליקים את a, f, g, c, d ומכבים את b, e, dp. נסו לצייר את זה בראש — זה בדיוק נראה כמו 5.
2. טבלת קודי המקטעים

זו הטבלה שמתרגמת ספרה לצירוף מקטעים:
| הספרה | a | b | c | d | e | f | g | dp |
|---|---|---|---|---|---|---|---|---|
| 0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 |
| 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 |
| 2 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 0 |
| 3 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | 0 |
| 4 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 0 |
| 5 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 |
| 6 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 0 |
| 7 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 |
| 8 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
| 9 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 0 |
שימו לב ל-8: כל המקטעים דולקים. ול-1: רק שניים. זו הספרה הכי "זולה" בתצוגה.
3. מערך דו-ממדי
הטבלה למעלה היא טבלה — שורות ועמודות. ובקוד, טבלה היא מערך דו-ממדי:
int number_array[][8] = {
{ 1, 1, 1, 1, 1, 1, 0, 0 }, // 0
{ 0, 1, 1, 0, 0, 0, 0, 0 }, // 1
// ...
};
ניגשים אליו עם שני אינדקסים:
number_array[5][0] // המקטע a של הספרה 5 → 1
number_array[1][3] // המקטע d של הספרה 1 → 0
הראשון הוא השורה (הספרה), השני הוא העמודה (המקטע). זה בדיוק מה שהופך את הטבלה שלמעלה לקוד.
4. פונקציה משלכם
עד עכשיו השתמשתם בפונקציות שמישהו כתב. הפעם תכתבו אחת:
void display_number(int num) {
for (int i = 0; i < 8; i++) {
digitalWrite(pin_array[i], HIGH); // מכבים הכול
}
for (int i = 0; i < 8; i++) {
digitalWrite(pin_array[i], number_array[num][i]); // מדליקים לפי הטבלה
}
}
מה זה נותן? במקום לכתוב שמונה שורות digitalWrite בכל פעם שרוצים להציג ספרה — כותבים display_number(7). פעם אחת מגדירים, ואז משתמשים.
מבנה פונקציה:
void שם_הפונקציה(פרמטרים) {
// מה שהיא עושה
}
void פירושו "לא מחזירה ערך" — היא רק עושה משהו.
הניסוי
המטרה: להציג את הספרות 0 עד 9, כל אחת חצי שנייה.
רשימת רכיבים
| הרכיב | כמות |
|---|---|
| לוח ESP32 | 1 |
| לוח ניסוי 400 נקודות | 1 |
| תצוגת שבעה מקטעים | 1 |
| נגד 220Ω | 8 |
שמונה נגדים — אחד לכל מקטע. כל מקטע הוא נורית, וכל נורית צריכה הגנה משלה.
התרשים החשמלי

החיבור

זה החיבור הכי צפוף שבניתם עד עכשיו — שמונה פינים, שמונה נגדים. קחו את הזמן ובדקו כל חוט.
הקוד
// הפינים של כל מקטע
int pin_a = 5; int pin_b = 16; int pin_c = 17; int pin_d = 18;
int pin_e = 19; int pin_f = 23; int pin_g = 12; int pin_dp = 13;
int pin_array[8] = { pin_a, pin_b, pin_c, pin_d, pin_e, pin_f, pin_g, pin_dp };
// טבלת הספרות — מערך דו-ממדי
int number_array[][8] = {
{ 1, 1, 1, 1, 1, 1, 0, 0 }, // 0
{ 0, 1, 1, 0, 0, 0, 0, 0 }, // 1
{ 1, 1, 0, 1, 1, 0, 1, 0 }, // 2
{ 1, 1, 1, 1, 0, 0, 1, 0 }, // 3
{ 0, 1, 1, 0, 0, 1, 1, 0 }, // 4
{ 1, 0, 1, 1, 0, 1, 1, 0 }, // 5
{ 1, 0, 1, 1, 1, 1, 1, 0 }, // 6
{ 1, 1, 1, 0, 0, 0, 0, 0 }, // 7
{ 1, 1, 1, 1, 1, 1, 1, 0 }, // 8
{ 1, 1, 1, 1, 0, 1, 1, 0 }, // 9
};
void display_number(int num) {
for (int i = 0; i < 8; i++) {
digitalWrite(pin_array[i], HIGH);
}
for (int i = 0; i < 8; i++) {
digitalWrite(pin_array[i], number_array[num][i]);
}
}
void setup() {
for (int i = 0; i < 8; i++) {
pinMode(pin_array[i], OUTPUT);
digitalWrite(pin_array[i], HIGH);
}
}
void loop() {
for (int i = 0; i < 10; i++) {
display_number(i);
delay(500);
}
}
מה אמור לקרות

נסו בעצמכם
- הוסיפו לטבלה את האות A (רמז: a,b,c,e,f,g דולקים). הציגו אותה.
- הדליקו את הנקודה העשרונית: שנו את העמודה האחרונה ל-1.
- שלבו עם שיעור 4: לחיצה מקדמת את הספרה באחד.
- ספרו לאחור מ-9 ל-0. מה צריך לשנות בלולאה?
- למה ה-
setupמכבה את כל המקטעים לפני שמתחילים?


