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

זה לא קסם. בתוך המנורה יש נורית RGB אחת — שלוש נוריות זעירות באותה קופסית שקופה: אדומה, ירוקה וכחולה. משנים את העוצמה של כל אחת מהן, והעין שלכם רואה צבע אחד מעורבב.
בשיעור הזה אתם בונים מנורת מצב רוח משלכם: מסובבים כפתור, והנורית עוברת בין שבעה מצבים — כבוי, אדום, ירוק, כחול, סגול, צהוב ולבן.
את נורית ה-RGB הכרתם בשיעור 3, ואת הפוטנציומטר — הכפתור המסתובב — בשיעור 7. כאן מחברים ביניהם.
הרכיבים
נורית RGB
שלוש נוריות, ארבע רגליים. הרגל הארוכה היא הקתודה המשותפת — המינוס של כל השלוש יחד, והיא הולכת ל-GND. שלוש הרגליים האחרות הן הפלוס של האדום, של הירוק ושל הכחול, וכל אחת מקבלת נגד 220Ω משלה ופין משלה על הלוח.
לכל צבע נותנים מספר בין 0 ל-255: 0 זה כבוי לגמרי, 255 זה מלא. אדום 255 וירוק 255 ביחד נותנים צהוב. כל השלושה על 255 נותנים לבן.
פוטנציומטר
כפתור מסתובב עם שלוש רגליים. רגל אחת ל-3.3V, רגל אחת ל-GND, והרגל האמצעית — זו ששולחת את התשובה — לפין 32.

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

צריכים: לוח ESP32, לוח ניסוי, פוטנציומטר אחד, נורית RGB אחת ושלושה נגדים של 220Ω.
- נורית RGB — הרגל הארוכה אל GND. אדום דרך נגד אל פין 5, ירוק דרך נגד אל פין 16, כחול דרך נגד אל פין 17.
- פוטנציומטר — רגל צד אחת אל 3.3V, רגל צד שנייה אל GND, הרגל האמצעית אל פין 32.
- פסי החשמל של לוח הניסוי מחוברים ללוח.
⚠️ שימו לב לכיוון של הרגל הארוכה. אם הפכתם את הנורית, שום צבע לא יידלק — ולא תבינו למה. תספרו רגליים לפני שמחברים.
הבלוקים

התוכנית נראית ארוכה, אבל היא עשויה מארבעה סוגי בלוקים בלבד. בואו נפרק אותה.
1. set [level] to (-1)
לפני ה-forever יש בלוק כתום אחד: set [level] to (-1).
level הוא משתנה — קופסה עם שם, ובתוכה מספר. אפשר לשים בקופסה מספר, ואפשר לשאול אותה מה יש בפנים. התפריט הנפתח בבלוק בוחר באיזו קופסה מדובר.
למה -1 בהתחלה? כי -1 הוא מספר שאף פעם לא יהיה צבע אמיתי. זו דרך להגיד ״עדיין לא קראנו כלום מהכפתור״.
2. forever
הבלוק העוטף הגדול. כל מה שבתוכו חוזר שוב ושוב, בלי סוף. חייבים אותו כאן — אחרת הלוח היה בודק את הכפתור פעם אחת ונתקע על הצבע הראשון.
3. set [level] to (read analog pin [32])
לתוך הקופסה level נכנס עכשיו המספר שהלוח קרא מהפוטנציומטר. אחרי הבלוק הזה, level מחזיק מספר בין 0 ל-4095.
4. map (level) from [0] [4095] to [0] [6]
זה הבלוק הכי חשוב בשיעור, והוא עושה דבר אחד פשוט: מכווץ טווח.
תחשבו על סרגל ארוך של 4096 סנטימטרים, ועליכם להעתיק את המקום שלכם לסרגל קטן שיש בו רק 7 מספרים — 0 עד 6. אם אתם בהתחלה של הסרגל הארוך, אתם בהתחלה גם בקטן. אם אתם באמצע — אתם באמצע. map עושה בדיוק את החישוב הזה.
ארבעת החלונות הלבנים אומרים: מאיפה לאן (from 0 to 4095) ולאיפה לאן (to 0 to 6). אחרי הבלוק הזה, level מחזיק מספר קטן וקל — 0, 1, 2, 3, 4, 5 או 6. שבע מדרגות. שבעה צבעים.
5. שרשרת בלוקי if (level = N) then
מתחת ל-map יושבים שבעה בלוקי if זה אחרי זה. לכל אחד יש חריץ משושה עם בלוק ההשוואה הירוק =, ובתוכו: הקופסה level מצד אחד, מספר מצד שני.
הלוח עובר עליהם מלמעלה למטה. אצל שישה מהם התשובה תהיה ״לא נכון״ והוא ידלג הלאה; אצל אחד התשובה תהיה ״נכון״ — וזה הצבע שיידלק.
6. RGB light red [פין] (עוצמה) green [פין] (עוצמה) blue [פין] (עוצמה)
בתוך כל if יושב בלוק כחול אחד. יש לו שלושה תפריטים נפתחים — הם בוחרים לאיזה פין מחובר כל צבע (אצלנו 5, 16 ו-17) — ושלושה חלונות לבנים, לעוצמה של כל צבע, בין 0 ל-255.
(בצילום מהמדריך התפריטים מוצגים על 0, כי זו תמונת הדגמה. בקובץ המוכן שתורידו הם כבר מוגדרים לפינים הנכונים.)
וזו טבלת הצבעים של התוכנית:
| level | אדום | ירוק | כחול | הצבע שרואים |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | כבוי |
| 1 | 255 | 0 | 0 | אדום |
| 2 | 0 | 255 | 0 | ירוק |
| 3 | 0 | 0 | 255 | כחול |
| 4 | 128 | 0 | 128 | סגול |
| 5 | 255 | 255 | 0 | צהוב |
| 6 | 255 | 255 | 255 | לבן |
באג אמיתי — תמצאו אותו
תסתכלו טוב בתמונה של הבלוקים. שני ה-if האחרונים שניהם בודקים level = 5. אחד מהם היה אמור לבדוק level = 6.
מה יקרה בגלל זה? כשתסובבו עד הסוף, level יהיה 6, אף if לא יתאים — והנורית פשוט תישאר על הצבע הקודם. הלבן לעולם לא יופיע.
זה קורה גם למבוגרים שכותבים תוכניות. מתקנים את זה בשנייה: לוחצים על החלון הלבן ב-if האחרון ומשנים 5 ל-6.
מריצים
⬇ להורדת הקובץ Color_adjustable_light.sb3 — גוררים אותו לתוך ACECode ולוחצים Upload.
ההסבר המלא על צריבה נמצא בשיעור ההתקנה.

סובבו את הכפתור לאט מקצה לקצה. הנורית עוברת בין הצבעים במדרגות — לא ברצף חלק, אלא קפיצה-קפיצה. כל קפיצה היא מעבר בין שתי מדרגות של map.
אם שום דבר לא נדלק: בדקו שהרגל הארוכה של הנורית באמת ב-GND, ושהפוטנציומטר מחובר לפין 32 ולא לפין שכן.
מה קרה כאן
בניתם שרשרת של ארבעה שלבים, וכל שלב מעביר לבא אחריו:
כפתור → מספר גדול (0-4095) → מספר קטן (0-6) → צבע
הטריק המרכזי הוא map. בלי הבלוק הזה הייתם צריכים לכתוב תנאי מסובך לכל טווח — ״אם בין 0 ל-585״, ״אם בין 586 ל-1170״ — וזה מעייף ומלא טעויות. map עושה את החישוב במקומכם ומחזיר מספר קטן שקל להשוות אליו.
המשתנה level הוא ה״זיכרון״ של התוכנית. בלעדיו לא היה איפה לשמור את התשובה בין שלב לשלב.
תרגילים
המציאו צבע. שנו את השורה של level = 4 מ-(128, 0, 128) ל-(255, 100, 0). קיבלתם כתום. נסו גם (0, 255, 255) — תכלת.
פחות מדרגות, יותר בהיר. שנו ב-map את המספר האחרון מ-6 ל-3. עכשיו הכפתור נותן רק ארבעה מצבים, וכל אחד תופס רבע מהסיבוב — הרבה יותר קל לכוון בדיוק.
תקנו את הבאג. שנו את ה-if האחרון מ-level = 5 ל-level = 6 והעלו מחדש. עכשיו הסיבוב עד הסוף נותן לבן.
מנורת לילה חכמה. החליפו את read analog pin [32] בקריאה מחיישן האור של שיעור 6. עכשיו הצבע לא תלוי בכפתור אלא בכמות האור בחדר — כחול בבוקר, אדום בערב.


