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

ספרה אחת דרשה שמונה פינים. ארבע ספרות ידרשו 32 — יותר ממה שיש ללוח כולו.
הפתרון הוא תעלול יפהפה שמסתמך על מגבלה של העין האנושית.
הידע שצריך
1. השתהות ראייה
השתהות ראייה (Persistence of Vision) היא התופעה שבה העין ממשיכה "לראות" תמונה כ-0.1 שנייה אחרי שהיא נעלמה.

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

וכאן הטריק שחוסך פינים: כל ארבע הספרות חולקות את אותם 8 קווי מקטעים. בנוסף יש ארבעה קווי בחירה (D1-D4) שקובעים איזו ספרה פעילה כרגע.
| סוג הקו | כמות | מה הוא קובע |
|---|---|---|
| קווי מקטעים (a-g, dp) | 8 | מה מוצג |
| קווי בחירה (D1-D4) | 4 | איפה זה מוצג |
12 פינים במקום 32.
3. סריקה דינמית — הרעיון המרכזי
⚠️ יש מגבלה: מכיוון שכל הספרות חולקות את אותם קווי מקטעים, רק ספרה אחת יכולה להיות דלוקה בכל רגע. אם תדליקו שתיים — שתיהן יציגו את אותו דבר.
אז איך מציגים 1234?

לא מציגים אותן בו-זמנית — מציגים אותן בתורות, מהר מאוד:
- מדליקים את ספרה 1, מציגים "1", ממתינים 5 מילי-שניות
- מכבים, מדליקים את ספרה 2, מציגים "2", ממתינים 5 מילי-שניות
- וכן הלאה, ואז חוזרים מהתחלה
כל ספרה דולקת רבע מהזמן — אבל בגלל השתהות הראייה, העין רואה את ארבעתן דולקות יחד.
זה נקרא סריקה דינמית או Multiplexing, וזו אותה טכניקה שמפעילה לוחות פרסום ענקיים ומסכי LED.
הניסוי
המטרה: להציג "1234".
רשימת רכיבים
| הרכיב | כמות |
|---|---|
| לוח ESP32 | 1 |
| לוח ניסוי 400 נקודות | 1 |
| תצוגת ארבע ספרות | 1 |
| נגד 220Ω | 8 |
התרשים החשמלי

החיבור

הקוד
// קווי בחירת הספרה
int seg_1 = 14; int seg_2 = 25; int seg_3 = 26; int seg_4 = 27;
int seg_array[4] = { seg_1, seg_2, seg_3, seg_4 };
// קווי המקטעים
int a = 5; int b = 16; int c = 17; int d = 18;
int e = 19; int f = 23; int g = 12; int dp = 13;
int led_array[8] = { a, b, c, d, e, f, g, dp };
// טבלת הספרות — כמו בשיעור הקודם
int logic_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 clear() {
for (int i = 0; i < 8; i++) digitalWrite(led_array[i], LOW);
for (int i = 0; i < 4; i++) digitalWrite(seg_array[i], HIGH);
}
// מציגים ספרה אחת במיקום מסוים
void display_number(int order, int number) {
clear();
digitalWrite(seg_array[order], LOW); // מפעילים את הספרה הנבחרת
for (int i = 0; i < 8; i++) {
digitalWrite(led_array[i], logic_array[number][i]);
}
}
void setup() {
for (int i = 0; i < 4; i++) {
pinMode(seg_array[i], OUTPUT);
digitalWrite(seg_array[i], HIGH);
}
for (int i = 0; i < 8; i++) {
pinMode(led_array[i], OUTPUT);
digitalWrite(led_array[i], LOW);
}
}
void loop() {
int digits[4] = {1, 2, 3, 4};
for (int i = 0; i < 4; i++) {
display_number(i, digits[i]);
delay(5); // זה הזמן שכל ספרה דולקת
}
}
delay(5)הוא הלב של השיעור. עם 5 מילי-שניות לספרה, סיבוב שלם לוקח 20 מילי-שניות — כלומר 50 סריקות בשנייה. מהר הרבה מעבר לסף ההשתהות של העין.נסו לשנות ל-100 ותראו את הטריק מתפרק לנגד עיניכם.
מה אמור לקרות

נסו בעצמכם
- שנו את
delay(5)ל-100. מה קורה? עכשיו הבנתם בדיוק מה עושה השתהות ראייה. - שנו את
digits[4]למספר אחר. עובד? - הציגו מונה שעולה: 0000, 0001, 0002…
- שלבו עם שיעור 12: הציגו את הטמפרטורה על התצוגה.
- למה
clear()נקראת בתחילתdisplay_numberולא בסופה?


