שפת התכנות C היא כלי העבודה הנפוץ והשימושי ביותר לתכנות של מיקרו-בקרים. למען הסר ספק, לא חסרים פתרונות אחרים – מאסמבלי ועד בייסיק וג'אווה – אך מי שרוצה לעבוד עם טווח רחב ככל האפשר של מיקרו-בקרים, ולהוציא מהם את המקסימום בלי להסתבך עד מעל הראש בפרטים לא-רלוונטיים, חייב לדעת C – ולדעת אותה טוב.
סדרת פוסטים זו מיועדת לחובבים שרוצים להכיר, או להכיר טוב יותר, את שפת C לצורך תכנות מיקרו-בקרים וארדואינו בפרט. אנחנו נתחיל מההתחלה ממש, לטובת מי שטרם כתב ולו שורת קוד אחת, ונתקדם לאט ובסבלנות לעבר מאפיינים וטכניקות מורכבים יותר. הרעיון פה הוא לא "ללמוד לתכנת ב-C" – יש בערך מאה מיליון ספרים ומדריכים אחרים שעושים את זה, וחלק ממה שהם מלמדים לא רלוונטי לענייננו – אלא לתת את הבסיס החיוני, ואז להיחשף לאותם אלמנטים של השפה ולאותן טכניקות שיעזרו לנו לתכנת טוב יותר את הארדואינו שלנו.
בהתאם לגישה הזו, כל המידע והדוגמאות שאציג כאן יהיו תפורים ספציפית לסביבת הפיתוח של הארדואינו, ולווריאציה של שפת C שמתאימה לה (שלא זהה במאה אחוזים ל-C הסטנדרטית). כלי העבודה הדרושים הם לוח ארדואינו כלשהו עם חיבור USB, כבל USB וסביבת פיתוח מותקנת על המחשב. אני אמנע מדרישות נוספות, או לפחות אצמצם אותן למינימום ההכרחי בשלבים המתקדמים, כדי שאף משתתף לא יישאר מאחור רק בגלל שאין לו רכיבים מתאימים.
וכשאני אומר משתתף (או משתתפת), אני מתכוון לזה. לא באתם פה להרצאה! קחו את הארדואינו לידיים, התנסו בדברים תוך כדי קריאה, שנו דברים וראו מה קורה. שאלו שאלות. צעקו עליי אם טעיתי. הביאו דברים חדשים ומעניינים שגיליתם. בקיצור, היו מעורבים! סתם לקרוא את הפוסטים לא יוביל אתכם לשום מקום, באחריות.
הערות
הדבר הראשון שנלמד, והוא הרבה יותר חשוב ממה שאולי נדמה לכם, הוא לכתוב הערות ב-C. הערות (comments) הן לא באמת חלק מהקוד. למעשה, הקומפיילר – התוכנה שהופכת את הקוד שאנחנו כותבים למשהו שהארדואינו יכול להריץ – מתעלם לגמרי מההערות האלה. הן מיועדות בעיקר לנו, בני האדם.
ב-C יש שני סוגי הערות (זיכרו שקוד C נכתב כמו באנגלית, משמאל לימין):
- הערה שמתחילה בצמד התווים "//" ומסתיימת אוטומטית בסוף אותה שורה מימין
- הערה שמתחילה בצמד התווים "/*" משמאל ומסתיימת בצמד התווים "*/" – באותה שורה מימין, או בשורה אחרת בהמשך
להערות אין היררכיה. כשהקומפיילר נתקל ב-"//" הוא פשוט מוחק כל מה שמימין, וכשהוא נתקל ב-"/*" הוא פשוט מחפש את ה-"*/" הבא הקרוב ביותר ומתעלם מכל מה שבין לבין. בקטע הכאילו-קוד הבא, המילה OUTSIDE מייצגת קוד רגיל, מחוץ להערות, ואילו המילה INSIDE מייצגת את מה שבתוך הערות. עיברו על הטקסט בתשומת לב וודאו שאתם מבינים למה כל מילה נמצאת היכן שהיא נמצאת:
OUTSIDE // INSIDE OUTSIDE // INSIDE OUTSIDE /* INSIDE INSIDE INSIDE */ OUTSIDE // /* INSIDE OUTSIDE /* INSIDE // */ OUTSIDE /* INSIDE /* /* INSIDE */ OUTSIDE
סביבת הפיתוח של הארדואינו מבצעת "הדגשת תחביר" (Syntax Highlighting), כלומר צובעת בצבעים שונים אלמנטים שונים של שפת התכנות. קוד רגיל נצבע בשחור, ואילו הערות נצבעות באפור. העתיקו את הכאילו-קוד שלמעלה לסביבת הפיתוח ותראו איך כל ה-OUTSIDE מופיעים בשחור וכל ה-INSIDE, כולל צירופי התווים שמגדירים את ההערות, באפור:
הערות משמשות אותנו לשלוש מטרות עיקריות:
- להעביר מידע לבני אדם שקוראים את הקוד (כולל אותנו-עצמנו, למשל תזכורות לדברים שצריך להשלים, או הסבר למה עשינו משהו בצורה אחת ולא באחרת)
- להשבית קטעי קוד מבלי למחוק אותם לגמרי, כך שנוכל להחזיר אותם לפעולה בעתיד (לדוגמה, במסגרת חיפוש אחר המקור לבעיה כלשהי)
- לייפות קצת את הקוד (כגון יצירה של קו אופקי מפריד בין חלקי קוד שונים)
הגבול בין מעט מדי הערות ליותר מדי הוא גבול מטושטש מאד, עניין של הבנה וניסיון בתכנות וגם של טעם אישי. ההמלצה שלי, כשכותבים הערות למען קוראים אנושיים, היא לכתוב קצת יותר הערות ממה שנדמה לכם שצריך. כמו כן, עדיף לכתוב הערות שמסבירות למה עשיתם משהו, ולא הערות שמסבירות איך עשיתם את זה, כי האיך אמור להיות ברור מתוך הקוד עצמו.
מכיוון שזהו השיעור הראשון בלבד, נסיים אותו מוקדם ובלי שיעורי בית. אבל אל תדאגו, זה יהיה הרבה יותר מסובך ומאתגר בהמשך…
תודה רבה.
באמת תענוג ללמוד בעברית.
זה כלי מדהים אך מסובך למדי ותודה שאתה לקחת על עצמך ללמדו.
באסה, עכשיו נגמרו התירוצים.
רץ לאתר הקרוב למחשבי לקנות ארואינו ומתחיל ללמוד.
אוף איתך!
ותודה רבה.
עידו, כל הכבוד, פשוט נהדר. כמי שמלמד את עצמו את השפה מבלוגים, האתר של ארדואינו והרבה מאוד ניסיון וטעייה, אני מאושר שיש מישהו רציני כמוך שלוקח על עצמו את המשימה הלא פשוטה הזו, ועוד בעברית. יישר כוח! 🙂