דילוג לתוכן
UAVProg
שפהhe
בלוקים

בלוקים

לולאות ותזמון

נותנים זמן לתנועה וחוזרים על פעולות בלי להעתיק את התוכנית.

קטגוריית תזמון מספקת המתנה; קטגוריית לולאות חוזרת על קבוצת פעולות. משתמשים בהן יחד כדי שתנועה תחזור במשך זמן אמיתי.

המתנה

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

בבלוק המספרי טווח הזמן הוא 0.1 עד 60 שניות. כשהזמן מגיע מחישוב, בדקו שהוא מתאים לתרגיל ואינו שלילי.

סוגי לולאה

בלוקמתי משתמשיםקוד טיפוסי
חזרה מספר פעמיםמספר חזרות ידועfor count in range(4):
חזרה כל עוד / עד ש־תנאי קובע אם להמשיךwhile test: או while not test:
ספירה עם משתנהצריך לדעת באיזו חזרה נמצאיםfor i in range(1, 5):
לכל פריט ברשימהפעולה לכל ערך ברשימהfor t in route:
יציאה / המשך לחזרה הבאהעצירה מוקדמת או דילוגbreak או continue

הבלוקים שבתוך הלולאה מתחברים בתוך הפתח שלה. בקוד הם מוזחים ימינה; פעולה מתחת ללולאה תתבצע רק אחריה.

קטגוריית לולאות: חזרה, תנאי, ספירה ולכל פריט ברשימה.

קטגוריית לולאות: חזרה, תנאי, ספירה ולכל פריט ברשימה.

דוגמה: תנועה והפסקה ארבע פעמים

נוצר מבלוקים
drone.active_fly()
drone.takeoff()
for count in range(4):
    drone.fly('forward', 1)
    time.sleep(1)
    drone.fly_stop()
    time.sleep(0.5)
drone.land()

זהו אותו קטע ארבע פעמים, לא ריבוע. לולאה אינה מוסיפה כיוון או זמן שלא הוגדרו בתוכה.

גוררים בלוק נחיתה לתחתית תוכנית קיימת ומחברים אותו. הסרטון מציג בניית תוכנית קצרה.

לולאה חוזרת ארבע פעמים על תנועה, המתנה, עצירה והפסקה קצרה. חזרה לבדה אינה יוצרת ריבוע.

לולאה חוזרת ארבע פעמים על תנועה, המתנה, עצירה והפסקה קצרה. חזרה לבדה אינה יוצרת ריבוע.

לולאה עם מונה

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

נוצר מבלוקים
for i in range(1, 5):
    drone.fly('forward', 1)
    time.sleep(i)
    drone.fly_stop()
    time.sleep(0.5)

כך משך התנועה גדל בכל חזרה. בדקו מראש את הזמן הכולל ואת גבולות מרחב הטיסה.

המונה קובע את משך ההמתנה, ולכן כל תנועה קדימה נמשכת יותר מקודמתה. אין כאן ספירלה.

המונה קובע את משך ההמתנה, ולכן כל תנועה קדימה נמשכת יותר מקודמתה. אין כאן ספירלה.

תנאי שמשתנה

while ממשיך כשהתנאי נכון; until ממשיך עד שהוא נכון. תנאי סוללה חייב לקרוא את הסוללה בכל בדיקה:

נוצר מבלוקים
while drone.get_battery() > 20:
    print(drone.get_battery())
    time.sleep(1)

break יוצא מהלולאה וממשיך בפעולה שאחריה. continue מדלג על שאר הפעולות בחזרה הנוכחית. אם אחרי נחיתה נמצאות פעולות טיסה נוספות בלולאה, יציאה מפורשת יכולה למנוע ביצוע לא רצוי.

לולאת רשימה מתאימה, למשל, לרשימת זמני טיסה. היא אינה יכולה להזין ערך לשדה שהוא תפריט נפתח ללא שקע. ראו רשימות וטקסט ולוגיקה ומתמטיקה.

קטע תנאי: אם קריאת הסוללה קטנה מ־20, מבצעים נחיתה. סף הדוגמה אינו מחליף נוהל חומרה.

קטע תנאי: אם קריאת הסוללה קטנה מ־20, מבצעים נחיתה. סף הדוגמה אינו מחליף נוהל חומרה.