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

בשיעור הזה נבנה מנורה שמחליפה צבע בסיבוב ידית.
הידע שצריך
הרעיון
שיעור 3 נתן את נורית ה-RGB. שיעור 7 נתן את הפוטנציומטר. הפעם נחבר ביניהם: הפוטנציומטר קובע את הצבע.
הבעיה הקטנה: הפוטנציומטר מחזיר 0 עד 4095, ואנחנו רוצים 7 צבעים. איך ממפים 4096 ערכים ל-7 אפשרויות?
map() — הפקודה שפותרת את זה
int level = map(potValue, 0, 4095, 0, 6);
map לוקחת ערך מטווח אחד וממירה אותו לטווח אחר, ביחס ישר:
map(ערך, מקור_מינימום, מקור_מקסימום, יעד_מינימום, יעד_מקסימום)
בדוגמה שלנו: ערך 0 יהפוך ל-0, ערך 4095 יהפוך ל-6, וערך 2048 (באמצע) יהפוך ל-3.
זו אחת הפקודות השימושיות ביותר שתלמדו. בכל פעם שתרצו לחבר חיישן שמחזיר טווח אחד לרכיב שמצפה לטווח אחר —
mapהיא התשובה. קריאת חיישן (0-4095) ל-PWM (0-255)?map. לזווית סרוו (0-180)?map.
שבעת הצבעים
| רמה | הצבע | R | G | B |
|---|---|---|---|---|
| 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 |
הניסוי
המטרה: סיבוב הידית מחליף בין שבעה צבעים.
רשימת רכיבים
| הרכיב | כמות |
|---|---|
| לוח ESP32 | 1 |
| לוח ניסוי 400 נקודות | 1 |
| פוטנציומטר | 1 |
| נורית RGB | 1 |
| נגד 220Ω | 3 |
התרשים החשמלי

החיבור

הקוד
#define POT_PIN 32
#define RED_PIN 16
#define GREEN_PIN 17
#define BLUE_PIN 18
int r = 0, g = 0, b = 0;
void setup() {
pinMode(RED_PIN, OUTPUT);
pinMode(GREEN_PIN, OUTPUT);
pinMode(BLUE_PIN, OUTPUT);
}
void loop() {
int potValue = analogRead(POT_PIN); // 0 עד 4095
int level = map(potValue, 0, 4095, 0, 6); // ל-7 רמות
if (level == 0) { r = 0; g = 0; b = 0; } // כבוי
else if (level == 1) { r = 255; g = 0; b = 0; } // אדום
else if (level == 2) { r = 0; g = 255; b = 0; } // ירוק
else if (level == 3) { r = 0; g = 0; b = 255; } // כחול
else if (level == 4) { r = 128; g = 0; b = 128; } // סגול
else if (level == 5) { r = 255; g = 255; b = 0; } // צהוב
else if (level == 6) { r = 255; g = 255; b = 255; } // לבן
analogWrite(RED_PIN, r);
analogWrite(GREEN_PIN, g);
analogWrite(BLUE_PIN, b);
delay(100);
}
שימו לב למבנה: קודם מחשבים את הצבע לתוך שלושה משתנים, ורק בסוף כותבים אותו לפינים. זה מפריד בין ההחלטה לביצוע, ומאפשר להוסיף צבעים בלי לגעת בשורות הכתיבה.
מה אמור לקרות

נסו בעצמכם
- הוסיפו צבע שמיני. מה צריך לשנות ב-
map? - החליפו את ה-
ifברצף ב-switch. קריא יותר? - בנו מעבר רציף במקום שבע רמות: מפו ישירות לגוון (רמז:
map(potValue, 0, 4095, 0, 255)על ערוץ אחד). - שלבו עם שיעור 6: הפוטו-רזיסטור קובע את הבהירות והפוטנציומטר את הצבע.
- למה יש
delay(100)? הסירו אותו ותראו.


