שפת C מציעה לנו שלושה סוגי לולאות "רשמיים" – דרכים לחזור על קטע קוד מסוים שוב ושוב. כל סוג לולאה פועל בצורה שונה מעט, ואנחנו בוחרים את הסוג הרצוי לנו לפי דרישות התוכנה. בפוסט זה אציג את סוגי הלולאות של C, כולל דוגמאות בסיסיות לשימוש.
בעקבות פניה בפייסבוק גיליתי, לזוועתי, שאופציית התגובות בבלוג הושבתה עבור מי שאינו מנוי (או משהו כזה). ככל הנראה, תוסף המנוי-לתגובות שהתקנתי החליט על דעת עצמו להחמיר עם המגיבים, ומי יודע כמה זמן בדיוק זה ככה ולכמה אנשים זה הפריע!
אז ראשית, אני מתנצל בפני כל מי שרצה להגיב ולא הצליח. שנית, אם אתם נתקלים בבעיה כזו או אחרת בבלוג, אנא דווחו לי במייל programming שטרודל idogendel.com. אני כמנהל הבלוג לא תמיד רואה מה שהקורא מבחוץ רואה.
בעתיד הקרוב בבלוג: המשך סדרת שפת C למתחילים, וקצת פרטים – בשאיפה שיהיו! – על פרויקט "העולם האמיתי" הראשון שלי. להתראות!
צעצוע פשוט זה מציג תבנית אורות ריאליסטית של רמזור (כולל מצבי "תקלה" מדומים מדי פעם, שבאים לידי ביטוי בכתום מהבהב), בתוספת פעולה אקראית של "צ'קלקה" על ניידת משטרה מקלקר.
מכיוון שמבחינה טכנולוגית אין פה שום דבר שטרם ראינו, אסתפק בתיאור קצר של הרכיבים – מיד אחרי סרטון ההדגמה.
קצת רקע: פרויקט הפונג המשולב דלפי+ארדואינו לא היה מתוכנן לגמרי מראש. הרעיון להפיץ את התוכנה ואת קוד הארדואינו ביחד עם הוראות הרכבה ל"בקר המשחק" עלה במקרה, ברגע האחרון ממש, תוך כדי כתיבת הפוסט על הפרויקט. במקביל, התחלתי לחשוב גם על השלב הבא: לאן אפשר לקחת את הקונספט הזה? משחקים נוספים לאותה חומרה מוגבלת זה קצת משעמם, ומצד שני, חומרה מורכבת יותר למשחק ספציפי חדש כנראה לא תצדיק את המאמץ – גם בהנחה שכל מי שמעוניין לשחק יצליח להשיג את הרכיבים הדרושים בזמן סביר.
וככה, במקום להשלים פוסטים ישנים ולא-גמורים שכבר החלו להעלות עובש, התחלתי לגלגל בראש רעיון חדש ומגניב (לטעמי) – ואפילו הצלחתי למצוא לו, במאמץ רב, שם שלא מופיע בגוגל: Promicoga, קיצור של Protocol for Micro Controller Gaming (פרוטוקול למשחקים במיקרו-בקרים). אז מה זה פרומיקוגה, מה זה נותן ואיך עובדים עם זה בפועל?
כשהמפגש הראשון של קהילת החובבים החל לרקום עור וגידים, ניסיתי לחשוב על פרויקטים שאוכל להביא ולדבר עליהם. מכיוון שגם ככה כבר התחלתי לשחק עם ה-ATTiny85, החלטתי לעשות איתו משהו רלוונטי – טיימר למרצים, שיקצוב את זמן ההרצאה שלהם וייתן אינדיקציה בולטת לסיום. הנה הסרטון עם התוצאה הסופית – ובהמשך, התהליך שבו כל זה תוכנן ונבנה…
כל מי שרוצה לתכנת מיקרו-בקרים חייב לשלוט, בין השאר, בייצוג בינארי (בסיס 2) והקסדצימלי (בסיס 16) של מספרים. הייצוג הבינארי חיוני כדי להבין את נושא הביטים, ואילו ההקסדצימלי מאפשר לנו להתמודד איתו בנוחות יחסית בזמן התכנות בפועל. הבעיה היא שאנחנו מחונכים מגיל אפס לחשוב ולהשתמש בבסיס העשרוני בלבד, וזה הרגל שקשה להיפטר ממנו.
הפרויקט שמתארח היום בבלוג, חוץ מזה שהוא יופי של תרגיל למתחילים, יכול לעזור ללומדי התכנות לחשוב בבינארי ובהקסדצימלי. הוא כולל ארבעה לחצנים, שמייצגים ארבעה ביטים במספר בינארי, ולידם תצוגת 7-Segment של ספרה יחידה, אשר מציגה את המספר הנ"ל בבסיס הקסדצימלי. כמה זה המספר הבינארי 1011 בהקסדצימלי? איך מייצגים בבינארי את המספר ההקסדצימלי 7? עם הממיר הבינארי-להקסדצימלי, גם אתם תוכלו לדעת!
"פונג" (Pong), משחק המטקות האלקטרוני הפרימיטיבי, נחשב אחת מאבני הדרך החשובות של עולם הגיימינג. הסיבה לכך היא שרבות מקונסולות המשחקים הביתיות הראשונות, שיצאו לשוק בסביבות אמצע שנות השבעים, הציעו בעיקר גרסאות של המשחק הזה.
הבקרים לשליטה במשחק לא היו משוכללים הרבה יותר: בדרך כלל, כל בקר היה לא יותר מאשר פוטנציומטר או נגד משתנה במארז מהודר. כשהייתי ילד קטן, גם אצלי בבית היתה קונסולה כזו. לכן, אחרי שהצלחתי להעביר דרך הארדואינו קריאה של פוטנציומטר לתוכנה שכתבתי במחשב, היישום הראשון שעלה בדעתי היה משחק פונג – והנה התוצאה:
עד היום, כל התקשורת בין המחשב שלי לארדואינו הסתכמה בתכנות הארדואינו דרך סביבת הפיתוח, וב-Serial Monitor. זה די והותר כאשר הארדואינו מיועד לפעול לבדו, אבל מה עושים אם רוצים שהוא יעבוד בשיתוף עם תוכנה משלנו במחשב?
חברים בקהילת המפתחים המקומית כבר הצליחו ליצור את החיבור הנחשק באמצעות שפת התכנות פייתון, אך אני רציתי לעבוד דווקא עם Object Pascal (בסביבת הפיתוח Delphi) שאני מכיר ואוהב. ידעתי שבסופו של דבר, שפת התכנות הספציפית חסרת חשיבות – מה שחשוב באמת זה למצוא את הדרך שלה לתקשר עם יציאה טורית (Serial Port), כי זה בעצם מה שכבל ה-USB של הארדואינו נותן.
החיפוש אחר רכיב מתאים ל-Delphi שלי לא היה פשוט, וגם אחרי שמצאתי סוף כל סוף משהו והתקנתי אותו, לא היה ברור איך להשתמש בו כי התיעוד אפסי. לשמחתי, בסופו של דבר הסתבר שזה הרבה יותר פשוט ממה שחשבתי. מרגע שתפסתי את הפרנציפ, יצרתי תוך דקות ספורות ממש את היישום המשולב ארדואינו/מחשב הבא:
כזכור, הצלחתי בעבר לצרוב Bootloader ("תוכנת ניהול") של ארדואינו על מיקרו-בקר ATMega328-PU שנרכש בנפרד, ואחר כך הצלחתי לשים אותו על מטריצה ולגרום לו להבהב בנורית LED. השלב הבא היה ליצור עבור המיקרו-בקר לוח עצמאי, כזה שיוכל לתקשר עם המחשב ולעשות כל מה שארדואינו אמיתי עושה, ולא על מטריצה זמנית אלא על משהו יציב יותר.