فهرست مطالب:
- تدارکات
- مرحله 1: راه اندازی ربات
- مرحله 2: تنظیم جوی استیک
- مرحله 3: بررسی مقادیر جوی استیک
- مرحله 4: تنظیم متغیرهای X و Y
- مرحله 5: تبدیل X و Y به مقادیر برای موتورهای چپ و راست
- مرحله 6: ارسال مقادیر به عنوان پیام های رادیویی
- مرحله 7: دریافت پیام ها در ربات خود
- مرحله 8: استفاده از پیام های ورودی برای کنترل موتورهای ربات
- مرحله 9: استفاده از دکمه ها - دریافت پیام های اضافی
- مرحله 10: ارسال پیام های اضافی با استفاده از دکمه های کنترل کننده
- مرحله 11: مراحل بعدی
تصویری: برنامه نویسی Micro: Bit Robot & Joystick: Bit Controller With MicroPython: 11 Step
2024 نویسنده: John Day | [email protected]. آخرین اصلاح شده: 2024-01-30 08:54
برای Robocamp 2019 ، اردوگاه تابستانی رباتیک ما ، جوانان 10-13 ساله در حال لحیم کاری ، برنامه نویسی و ساختن یک ربات بی بی سی هستند: بر اساس بیت ، ربات ضد وزن ، و همچنین برنامه ریزی یک میکرو: بیت برای استفاده به عنوان کنترل از راه دور.
اگر در حال حاضر در Robocamp هستید ، به مرحله 3 بروید ، زیرا ما دو مرحله اول را به صورت گروهی انجام داده ایم
این یک راهنمای گام به گام برای برقراری ارتباط ربات میکرو: بیت با کنترلر جوی استیک: بیت است.
برای کارکردن همه چیز سریعترین راه را طی نمی کند ، اما چیزها را در قطعات کوچک امتحان می کند تا بتوانید کد را همانطور که می خواهید آزمایش کنید ، مهر خود را روی آن بگذارید و بفهمید چرا کارهایی را که انجام می دهیم انجام می دهیم. !
برای این فعالیت ، ما از ربات سفارشی خود استفاده می کنیم ، اما با هر ربات با استفاده از راننده موتور مشابه ، مانند L9110s کار می کند.
فایلهای طراحی روبات ما را می توانید در اینجا پیدا کنید:
این راهنما برای مبتدیان نوشته شده است ، اما اگر قبلاً از micro: bit با MicroPython استفاده نکرده اید ، توصیه می کنیم ابتدا برنامه ساده تری را امتحان کنید ، مانند نشان نام ما Instructable: https://www.instructables.com/id/Felt -Microbit-Nam…
تدارکات
2 برابر میکرو بی بی سی: کمی
رباتی که با میکرو بی بی سی کار می کند: بیت (توضیحات بالا را ببینید)
جوی استیک: کنترل کننده بیت (ما از Cool Components تهیه کردیم)
مرحله 1: راه اندازی ربات
شما چند گزینه برای نوشتن کد MicroPython برای میکرو خود دارید: bit:
- Mu ، که می توانید از اینجا بارگیری و نصب کنید:
- ویرایشگر آنلاین ، که می توانید در اینجا پیدا کنید:
در این دستورالعمل فرض می شود که از Mu استفاده می کنید
Mu را باز کنید و micro: bit خود را به رایانه خود وصل کنید. Mu باید تشخیص دهد که از micro: bit استفاده می کنید و micro: bit 'Mode' را انتخاب کنید ، اما اگر اینطور نیست ، آن را به صورت دستی تغییر دهید.
یک کپی از کد تست موتور ربات را از اینجا دریافت کنید:
اگر به Github عادت ندارید ، می تواند غیرقابل تصور باشد! دو راه آسان برای دریافت این کد عبارتند از:
- فایل Raw را در رایانه خود ذخیره کنید ، سپس آن را در Mu بارگذاری کنید:
- همه کد داده شده را در Mu جدید کپی و جایگذاری کنید.
اکنون روی دکمه "Flash" از نوار ابزار Mu کلیک کنید تا کد جدید خود را به micro: bit ارسال کنید.
این کار نمی کند مگر اینکه micro: bit به برق متصل باشد
چراغ زرد پشت میکرو: بیت شروع به چشمک زدن می کند. پس از اتمام ، کد شما منتقل شده است.
تنظیم مسیرهای موتور
وقتی دکمه 'A' را روی micro: bit فشار می دهید ، این برنامه موتورها را در جهات مختلف روشن می کند.
آنچه می خواهید اتفاق بیفتد این است:
- هنگامی که "A" نمایش داده می شود ، موتور سمت چپ به جلو می رود
- وقتی "B" نمایش داده می شود ، موتور را به سمت چپ بچرخانید
- هنگامی که 'C' نمایش داده می شود ، موتور سمت راست جلو می رود
- هنگامی که "D" نمایش داده می شود ، موتور را به سمت راست بکشید
احتمالاً اینطور نخواهد بود ، زیرا بستگی به نحوه سیم کشی ربات خود دارد!
در بالای کد ، لیستی از متغیرها را می بینید که تعیین می کند کدام پین روی میکرو: جهت حرکت موتور را کنترل می کند.
اگر از یکی از ربات های ما (فایل ها) استفاده می کنید ، نام متغیرها را با یکدیگر عوض کنید تا ربات در جهت صحیح حرکت کند:
اگر از ربات خود استفاده می کنید ، قبل از ویرایش کد ، بررسی کنید که راننده موتور به کدام پین ها متصل است.
تست رانندگی
اکنون نحوه جایگزینی ربات خود را با جایگزین کردن کد تست در حلقه اصلی با کد اختصاصی خود بررسی کنید.
با فراخوانی تابع () به ربات می گویید که رانندگی کند. این دو آرگومان می گیرد - یک مقدار برای موتور سمت چپ و یک مقدار برای موتورهای راست ، بین 0 (خاموش) و 1023 (حداکثر سرعت).
به عنوان مثال ، با تماس با درایو (500 ، 500) ، به هر دو موتور می گویید که در جهت جلو ، با نصف سرعت روشن شوند.
چند گزینه را امتحان کنید تا احساس کنید که چگونه مستقیم حرکت می کند و چقدر خوب می چرخد.
نکته: تست های حرکتی هم در حلقه True و هم در دستور if بودند - موتورها تا زمانی که دکمه A را روی micro: bit فشار ندهید ، نمی چرخند و برای همیشه بررسی می شود که آیا دکمه A را فشار داده اید.
نکته: موتورها خاموش نمی شوند تا به آنها نگویید! آنها همیشه آخرین دستورالعمل خود را انجام می دهند.
اختیاری: بهبود رانندگی در یک خط مستقیم
اگر ربات شما در یک خط مستقیم حرکت نکند ، ممکن است یکی از موتورهای شما سریعتر از دیگری بچرخد.
پس از بررسی اینکه هیچ چیز مانع چرخش آزادانه چرخ از نظر فیزیکی نمی شود ، می توانید کد را در عملکرد درایو ویرایش کنید تا سرعت موتور سریعتر کاهش یابد.
برای پیدا کردن تعریف عملکرد درایو ، به بالا بروید و به دو دستورالعمل بالا نگاه کنید:
درایو def (L ، R):
# در زیر تعدیل برای اصلاح اختلاف سرعت موتور L = int (L*1) R = int (R*1)
این دو خط در حال حاضر مقدار L و R را گرفته ، آنها را در 1 ضرب می کنند ، سپس مطمئن شوید که آنها هنوز اعداد صحیح (int) هستند.
به عنوان مثال ، اگر موتور چپ شما سریعتر است ، *1 را در خط آن به *0.9 تغییر دهید ، و ببینید آیا این وضعیت را بهبود می بخشد.
شما قادر نخواهید بود آن را بی نقص کنید ، اما می توانید تنظیمات خود را تا زمانی که مستقیم تر حرکت کند ادامه دهید.
تنظیم رادیو
حالا رادیو را با افزودن خطوط زیر به بالای کد خود راه اندازی کنید:
وارد کردن رادیو
radio.config (کانال = 7 ، گروه = 0 ، صف = 1) radio.on ()
این به ربات شما امکان می دهد دستورالعمل هایی را از میکرو: بیت دیگر دریافت کند ، اما در حال حاضر از هر میکرو: بیت دیگر دستورالعمل دریافت می کند.
این به این دلیل است که کانال 7 و گروه 0 کانال های پیش فرض هستند.
با انتخاب یک کانال بین 0-82 و یک گروه بین 0-255 ، این اعداد را تغییر دهید. اکنون micro: bit شما فقط از دیگران با اطلاعات پیکربندی مشابه دستورالعمل دریافت می کند.
صف = 1 به معنی میکرو است: بیت فقط یک پیام ورودی را در یک زمان نگه می دارد - این زمان پاسخگویی کمی سریعتر از پیش فرض ، یعنی 3 را می دهد.
اکنون باید کد حلقه اصلی خود را ویرایش کنید تا ، به جای اجرای دستورالعمل ها هنگامی که دکمه ای را فشار می دهید ، منتظر پیام رادیویی ورودی باشید و به درستی پاسخ دهید.
کد زیر را به عنوان یک آزمایش امتحان کنید (تا زمانی که جوی استیک را در مرحله 2 تنظیم نکرده باشید ، هیچ کاری انجام نمی دهد):
در حالی که True:
پیام = radio.receive () اگر پیام == 'جلو': درایو (500 ، 500)
مرحله 2: تنظیم جوی استیک
میکرو: بیت ربات خود را از برق بکشید و در عوض میکرو: بیت جوی استیک خود را وصل کنید
یک کپی از کد تنظیم جوی استیک را از اینجا دریافت کنید:
رادیو را با استفاده از همان پیکربندی (شماره کانال و گروه) که برای ربات انجام دادید ، تنظیم کنید - این به شما این امکان را می دهد تا با یکدیگر ارتباط برقرار کنید.
در پایان برنامه ، حلقه اصلی خود را شروع کنید:
در حالی که True:
if button_a.was_pressed (): radio.send ('جلو')
این کد هنوز از joystick: bit استفاده نمی کند. از دکمه A در میکرو: bit برای ارسال پیام استفاده می کند.
مطمئن شوید که ربات و میکرو کنترلر شما: بیت ها دارای قدرت هستند ، سپس دکمه را برای ارسال پیام خود فشار دهید.
اگر پیام با موفقیت دریافت شد و ربات شما حرکت کرد … بسیار خوب! شما با دستورالعمل های راه اندازی به پایان رسیده اید.
نکات عیب یابی
در صورت دریافت پیغام خطا در کنترلر micro: bit… کد کنترل خود را اشکال زدایی کنید
در صورت دریافت پیغام خطا در میکرو ربات خود: بیت … پیام رادیویی شما با موفقیت ارسال شد! اما ربات نمی تواند آن را درک کند ، بنابراین بررسی کنید که پیامی که ارسال کرده اید و پیامی که به ربات گفته اید گوش دهید تا مطابقت داشته باشد.
اگر اصلاً اتفاقی نیفتد
- اطمینان حاصل کنید که کد صحیح را به هر میکرو: بیت فلش کرده اید - به راحتی می توانید اشتباه را فلش کنید!
- مطمئن شوید که شماره کانال و گروه شما در هر میکرو: بیت مطابقت داشته باشد
مرحله 3: بررسی مقادیر جوی استیک
چند مرحله بعدی همه با استفاده از کد کنترلر انجام می شود
قبل از اینکه بتوانید از جوی استیک روی کنترلر خود استفاده کنید ، باید بدانید که با فشار دادن چوب چه نوع ارزش هایی را بدست می آورید.
حلقه اصلی خود را با کد زیر جایگزین کنید:
در حالی که True:
جوی استیک = joystick_push () چاپ (جوی استیک) خواب (500)
این کد را روی micro: bit خود فلش کنید ، سپس روی دکمه REPL در نوار ابزار Mu کلیک کنید. با این کار یک ترمینال در پایین ویرایشگر باز می شود که به شما پیوند بلادرنگ به micro: bit می دهد.
این کار نمی کند مگر اینکه micro: bit به برق متصل باشد
با باز شدن REPL ، دکمه تنظیم مجدد را در پشت micro: bit خود فشار دهید.
شما باید برخی مقادیر را ببینید که "چاپ شده" روی صفحه شما آورده می شوند:
چوب جوی استیک را فشار دهید و ببینید چه اتفاقی برای اعداد می افتد.
هنگامی که جوی استیک در موقعیت مرکزی قرار دارد - در مورد من (518 ، 523) ، مقادیر ذکر شده را یادداشت کنید.
دوباره روی دکمه REPL در نوار ابزار Mu کلیک کنید تا بسته شود - تا زمانی که باز است نمی توانید کد جدید را روی micro: bit فلش کنید.
مرحله 4: تنظیم متغیرهای X و Y
شما می خواهید مقادیر داده شده توسط تابع جوی استیک را تغییر دهید ، به طوری که:
- در مرکز صفر است
- بالا مثبت است
- پایین منفی است
این دستورالعمل های مورد نیاز ربات را مطابقت می دهد - یک عدد مثبت برای حرکت رو به جلو و یک عدد منفی برای حرکت به عقب.
به اعدادی که در آخرین مرحله بدست آوردید نگاه کنید. عدد اول x و شماره دوم y است.
تعریف joystick_push () را که از قبل در برنامه وجود دارد ویرایش کنید ، تا مقادیر اصلی شما از مقدار اصلی منصرف شود:
def joystick_push ():
x = pin0.read_analog () - 518 y = pin1.read_analog () - 523 بازگشت x ، y
از شماره های خود استفاده کنید ، ممکن است با شماره های من متفاوت باشد
کد جدید خود را فلش کنید ، REPL را باز کنید ، دکمه بازنشانی micro: bit را فشار دهید و مقادیر خود را بررسی کنید.
آیا (0 ، 0) دریافت می کنید؟
مرحله 5: تبدیل X و Y به مقادیر برای موتورهای چپ و راست
در حال حاضر ، این جوی استیک برای رانندگی با ربات چندان مفید نخواهد بود. در تمام طول به جلو ، مقداری مانند (0 ، 500) دریافت خواهید کرد.
اگر این اعداد را به ربات می دادید ، موتور راست روشن می شد اما موتور چپ را روشن نمی کرد ، چیزی که شما نمی خواهید اتفاق بیفتد!
این نمودار نشان می دهد که هنگام حرکت جوی استیک برای مقادیر x و y چه اتفاقی می افتد و هنگامی که جوی استیک را حرکت می دهید ما می خواهیم روبات چه کاری انجام دهد.
برای مخلوط کردن مقادیر x و y باید از ریاضیات استفاده کنید تا چیز مفیدتری به شما ارائه شود.
n
ریاضیات
بیایید با فشار دادن جوی استیک تا انتها شروع کنیم.
یک مثال از مقادیری که ممکن است بدست آورید این است:
x = 0
y = 500
برای مفید بودن برای ربات ، می خواهید مقادیر زیر را بدست آورید:
چپ = 500
راست = 500
بیایید x و y را به روش های مختلف اضافه کنیم تا ببینیم چه اعدادی به دست می آوریم:
x + y = 0 + 500 = 500
x - y = 0 - 500 = -500 y + x = 500 + 0 = 500 y - x = 500 - 0 = 500
حالا بیایید ببینیم اگر جوی استیک را تا انتها به سمت راست فشار دهیم چه اتفاقی می افتد.
یک مثال از مقادیری که ممکن است بدست آورید این است:
x = 500
y = 0
برای اینکه روبات به راست بپیوندد ، می خواهید موتور چپ به جلو و موتور راست به عقب حرکت کند:
چپ = 500
راست = -500
بیایید فرمول خود را دوباره امتحان کنیم:
x + y = 500 + 0 = 500
x - y = 500 - 0 = 500 y + x = 0 + 500 = 500 y - x = 0 - 500 = -500
دو مجموعه فرمول را با یکدیگر مقایسه کنید تا مشخص شود کدام گزینه مقدار چپ صحیح را به شما می دهد و کدام گزینه مقدار مناسب را به شما می دهد.
آن را با برخی از مقادیری که از جوی استیک خود دریافت می کنید امتحان کنید تا مطمئن شوید که فرمول انتخاب شده شما همیشه کار می کند.
n
گسترش عملکرد JOYSTICK
تابع جوی استیک را گسترش داده و ویرایش کنید تا دو متغیر جدید برای چپ و راست ایجاد کنید و این مقادیر را به جای x و y برگردانید:
def joystick_push ():
x = pin0.read_analog () - 518 y = pin1.read_analog () - 523 چپ = راست = بازگشت به چپ ، راست
کد جدید خود را فلش کنید ، REPL را باز کنید ، دکمه بازنشانی micro: bit را فشار دهید و مقادیر خود را بررسی کنید.
آیا ارزش های مورد انتظار خود را دریافت می کنید؟
اگر به کمک بیشتری احتیاج دارید ، کد نمونه ما را اینجا ببینید:
مرحله 6: ارسال مقادیر به عنوان پیام های رادیویی
اکنون مقادیری آماده برای ارسال به ربات خود دارید.
حلقه اصلی خود را طوری ویرایش کنید که مقادیر جوی استیک را بررسی کند ، اما سپس به جای چاپ مقادیر ، آنها را آماده ارسال به عنوان پیام رادیویی می کند.
در حالی که True:
joystick = joystick_push () message = str (joystick [0]) + "" + str (joystick [1])
این در واقع هنوز پیام را ارسال نمی کند!
در این خط کد جدید چه اتفاقی می افتد؟
- جوی استیک [0] به معنی اولین بیت اطلاعاتی است که از عملکرد جوی استیک بیرون می آید (سمت چپ)
- جوی استیک [1] اطلاعات بعدی است (راست)
- str () هر دوی این اعداد را به قالب رشته (متن به جای اعداد) تبدیل می کند - این امر برای ارسال اطلاعات از طریق رادیو ضروری است.
شما عادت خواهید داشت که + را به معنی جمع ببینید - این می تواند اعداد را با هم جمع کرده و رشته ها را به هم متصل کند ، به این معنی که دو بیت اطلاعات را به هم می چسباند.
مثال:
150 + 100 = 250
str (150) + str (100) = 150100
بنابراین ترکیب ارزشهای چپ و راست شما را به هم می چسباند.
برای اجبار به جداسازی بین دو بیت اطلاعات (به طوری که روبات بداند که آنها دو بیت اطلاعات هستند) ، یک رشته اضافی بین آنها با استفاده از "" متصل کنید. علامت های گفتاری در اطراف فضا به این معنی است که در حال حاضر یک رشته است.
در نهایت ، کد خود را برای ارسال این پیام تازه ایجاد شده از طریق رادیو گسترش دهید:
radio.send (پیام)
خواب (10)
خواب ، ارسال پیام ها را کند می کند تا میکرو دریافت کننده اطلاعات با اطلاعات زیاد بارگیری نشود!
قبل از رفتن به مرحله بعدی ، این کد را به کنترلر micro خود بکشید و اشکال زدایی کنید
مرحله 7: دریافت پیام ها در ربات خود
از ابتدا به کد ربات خود بازگردید - به یاد داشته باشید که کنترلر micro: bit را از برق بکشید تا به طور تصادفی کد ربات را روی آن فلش نکنید
به حلقه اصلی خود پایین بروید - کد آزمایش را حذف کرده و به جای آن این را اضافه کنید:
در حالی که True:
پیام = radio.receive () چاپ (پیام) خواب (100)
این یک متغیر برابر پیام دریافتی را تنظیم می کند و پیام را در REPL چاپ می کند - برای بررسی اینکه پیامها مطابق انتظار منتقل می شوند.
کد جدید خود را که به REPL متصل است فلش کنید ، سپس جوی استیک را فشار دهید.
شما باید چیزی شبیه به این دریافت کنید:
نکات عیب یابی
در صورت دریافت پیغام خطا در کنترلر micro: bit… کد کنترل خود را اشکال زدایی کنید
اگر در خط میکرو ربات خود پیام خطایی دریافت کردید: بیت … پیام رادیویی شما با موفقیت ارسال شد! اما ربات نمی تواند آن را درک کند ، بنابراین بررسی کنید که پیامی که ارسال کرده اید و پیامی که به ربات گفته اید گوش دهید تا مطابقت داشته باشد.
اگر اصلاً اتفاقی نیفتد
- اطمینان حاصل کنید که کد صحیح را به هر میکرو: بیت فلش کرده اید - به راحتی می توانید اشتباه را فلش کنید!
- مطمئن شوید که شماره کانال و گروه شما در هر میکرو: بیت مطابقت داشته باشد
مرحله 8: استفاده از پیام های ورودی برای کنترل موتورهای ربات
شما در حال حاضر دو شماره را از طریق رادیو به عنوان یک رشته ارسال می کنید.
شما باید این پیام را به دو رشته تقسیم کنید ، سپس رشته ها را دوباره به اعداد تبدیل کنید و این را به عملکرد درایو منتقل کنید. اتفاقات زیادی در یک زمان رخ می دهد!
قبل از انجام این کار ، باید بررسی کنید که پیامی که دریافت می کنید در قالب صحیح است.
اگر هیچ پیامی ارسال نمی شود ، به جای آن "هیچ" را دریافت خواهید کرد. اگر سعی کنید این را تقسیم کنید ، یک پیغام خطا دریافت خواهید کرد.
در حالی که True:
پیام = radio.receive () در صورت عدم وجود پیام: message = message.split () درایو (int (پیام [0]) ، int (پیام [1]))
اینجا چه خبر است؟
- اگر پیام دیگری غیر از "هیچ" باشد ، کد جدید اجرا می شود.
- message.split () فاصله ای را در پیام (که در مرحله آخر اضافه کردیم) بررسی می کند و از این طریق پیام را به دو قسمت تقسیم می کند.
- int (پیام [0]) ، int (پیام [1]) برعکس آنچه در مرحله قبل انجام دادیم عمل می کند - هر قطعه اطلاعات را به صورت جداگانه دریافت کرده و به یک عدد صحیح (یک عدد کامل) تبدیل می کند.
- int (پیام [0]) به عنوان مقدار برای موتور سمت چپ در عملکرد درایو و int (پیام [1]) به عنوان مقدار برای موتور راست استفاده می شود.
بررسی کنید که آیا کار می کند - آیا هنگام فشار دادن جوی استیک موتورها می چرخند؟
اگر نه - زمان برخی از اشکال زدایی!
اگر بله ، فوق العاده است! شما یک ربات کنترل از راه دور دارید!
قبل از رفتن به مرحله بعد ، مدتی را با ربات خود تمرین کنید. آیا آنطور که انتظار دارید حرکت می کند؟
مراحل بعدی به شما نشان می دهد که چگونه از دکمه های روی جوی استیک برای افزودن قابلیت های بیشتر به ربات خود استفاده کنید
اگر می خواهید نسخه ما از این کد را تا اینجا ببینید:
- ربات:
- کنترل کننده:
مرحله 9: استفاده از دکمه ها - دریافت پیام های اضافی
در حال حاضر ، کد شما سعی می کند هر پیامی را که هیچکدام نیست تقسیم کند. این بدان معناست که اگر برای مثال "سلام" دریافت کند ، پیام خطایی دریافت خواهید کرد.
برای اینکه micro: bit شما بتواند پیامهای دیگر را تفسیر کند ، ابتدا باید هر پیام مورد انتظار را بررسی کند ، سپس پیام را فقط در صورتی که به او دستور داده نشده است انجام دهد ، تقسیم کند.
کد خود را مانند این بسط دهید:
اگر پیام هیچکدام نیست:
if message == 'hello': display.show (Image. HAPPY) elif message == 'duck': display.show (Image. DUCK) else: message = message.split () درایو (int (پیام [0]) ، int (پیام [1])))
ابتدا بررسی می کند که آیا پیام "سلام" را دریافت کرده است یا خیر. اگر دارد ، یک تصویر شاد نمایش می دهد ، سپس به بالای حلقه برگردید و پیام بعدی را بررسی کنید.
اگر پیام سلام نیست ، در مرحله بعد بررسی می کند که آیا پیام "اردک" است.
اگر پیام یا "اردک" یا اردک نباشد ، آخرین کار را در لیست انجام می دهد ، که پیام را تقسیم کرده و موتورها را روشن می کند. اگر پیام "سلام" یا "اردک" را دریافت کرده باشد ، سعی نمی کند پیام را تقسیم کند ، به این معنی که از هیچ یک از این دو پیام پیام خطایی دریافت نمی کنید.
علامت برابر دو برابر مهم است - به معنی "برابر است" ، در مقایسه با یک علامت مساوی ، که چیزی را تنظیم می کند (بنابراین پیام = "سلام" به این معنی است که ما متغیر را روی "سلام" ، پیام == "سلام" تنظیم می کنیم به این معنی که ما می پرسیم آیا پیام برابر با "سلام" است).
در حال حاضر فقط با دو گزینه آن را امتحان کنید ، برای آزمایش آن - می توانید بعداً هر تعداد پیام دیگری که دوست دارید اضافه کنید.
پیوند کد کار:
مرحله 10: ارسال پیام های اضافی با استفاده از دکمه های کنترل کننده
میکرو: بیت ربات خود را از برق بکشید و در عوض میکرو: بیت جوی استیک خود را وصل کنید
برای ویرایش به کد کنترل کننده خود بازگردید.
مشابه کد ربات ، ما می خواهیم کنترل کننده قبل از ارسال مقادیر جوی استیک بررسی کند که آیا در حال تلاش برای ارسال پیام دیگری هستید یا خیر.
در بالای حلقه ، ما هنوز می خواهیم که مقادیر فعلی جوی استیک را بررسی کند ، اما همچنین می خواهیم بررسی کند که آیا دکمه ای در حال فشردن است:
در حالی که True:
joystick = joystick_push () دکمه = button_press ()
button_press () بسته به اینکه کدام دکمه در حال فشردن است (A ، B ، C ، D ، E یا F) مقدار A ، B ، C ، D را برمی گرداند (اگر چیزی فشار داده نشود ، هیچکدام را بر نمی گرداند).
اکنون می توانیم یک دستور if-elif-else ، مانند کد ربات ، با استفاده از دو دکمه ، و ارسال مقدار جوی استیک در صورت فشردن هیچ دکمه ، ایجاد کنیم.
اگر دکمه == 'A':
radio.send ('سلام') خواب (500) elif button == 'B': radio.send ('اردک') خواب (500) دیگر: message = str (joystick [0]) + "" + str (joystick [1]) radio.send (پیام) خواب (10)
هنگامی که دکمه ای فشار داده می شود ، یکی از پیامهایی را که در مرحله قبل به ربات گفته اید ارسال کنید ارسال کنید.
هر زمان که دکمه فشرده می شود پیام ارسال می شود و رایانه ها بسیار سریعتر از افراد هستند! بنابراین ممکن است قبل از اینکه بتوانید انگشت خود را از روی دکمه بردارید بارها پیام ارسال کند.
خواب پس از ارسال پیام ، سرعت آن را کاهش می دهد ، به طوری که دیگر دکمه را به این سرعت دوباره چک نمی کند - چند عدد را در اینجا امتحان کنید تا زمان مناسب را برای شما به دست آورند - خیلی آهسته و همچنین پاسخگو نخواهد بود. به سرعت ربات شما پیامهای دکمه ای زیادی دریافت می کند که ممکن است دیگر به جوی استیک پاسخ ندهد!
آیا کار می کند؟
اگر پیام های خطایی دریافت می کنید ، به آنچه که اخیراً تغییر داده اید و آنچه در حال رخ دادن است ، خوب فکر کنید.
اگر با فشار دادن یک دکمه روی کنترلر خود خطایی در روبات دریافت می کنید - می دانید که پیام در حال انتقال است ، اما این روبات را گیج می کند. بررسی کنید که پیامی که ارسال کرده اید و پیامی که به ربات گفته اید یکسان باشد ، یکسان باشد.
پیوند کد کار:
مرحله 11: مراحل بعدی
شما در حال حاضر دانش لازم برای کار با موتورهای ربات خود و با جوی استیک خود را دارید: کنترل کننده بیت
از این دانش برای بهبود دو برنامه و ساختن آنها به عنوان برنامه خود استفاده کنید. چند ایده در زیر!
شما روی دکمه خود شش دکمه دارید! چه کاری میخواهی بکنند؟
- برنامه نویسی یک روتین رقص برای ربات شما برای انجام دستور چطور؟ الگوریتمی از دستورات drive () بنویسید که با دستورات sleep () جدا شده اند!
- آیا می خواهید جهت حرکت روبات را تغییر دهید تا بتواند به راحتی وارونه حرکت کند؟ به مقادیر x و y جوی استیک خود فکر کنید. آنها چه چیزی را نشان می دهند و چگونه می توانید آنها را دستکاری کنید؟
- آیا روبات شما دارای ویژگی های اضافی (یا می توانید اضافه کنید!) مانند LED ها ، بلندگو یا حسگرها است؟
ایده هایی برای بهبود کد
- آیا می توانید به ربات خود برای مقابله با پیام های ناشناخته با استفاده از کد try/εκτός کمک کنید؟
- ریاضیاتی که برای محاسبه مقادیر چپ و راست از جوی استیک استفاده می شود ، طیف وسیعی از مقادیر را در اختیار ما نمی گذارد (درایو ربات می تواند عددی تا 1023 را بپذیرد). آیا می توانید این کد را ویرایش کنید تا محدوده بهتری داشته باشید؟
- روشهای دیگری برای ترکیب مقادیر جوی استیک وجود دارد - آیا می توانید روش بهتری برای انجام آن ارائه دهید؟
توصیه شده:
برنامه افزودنی ساده در زبان برنامه نویسی شکسپیر: 18 مرحله
برنامه افزودنی ساده در زبان برنامه نویسی شکسپیر: زبان برنامه نویسی شکسپیر (SPL) نمونه ای از زبان برنامه نویسی باطنی است ، که شاید یادگیری آن جالب و استفاده از آن جالب باشد ، اما در برنامه های کاربردی واقعی بسیار مفید نیست. SPL زبانی است که در آن کد منبع r
برنامه نویسی میکروکنترلرها با برنامه نویس USBasp در Atmel Studio: 7 مرحله
برنامه نویسی میکروکنترلرها با یک برنامه نویس USBasp در Atmel Studio: سلام من آموزش های زیادی را در مورد نحوه استفاده از برنامه نویس USBasp با Arduino IDE خواندم و آموختم ، اما برای تکالیف دانشگاه نیاز به استفاده از Atmel Studio داشتم و هیچ آموزشی پیدا نکردم. پس از تحقیق و مطالعه از طریق بسیاری از
Pic 16F676 ICSP سوکت برنامه نویسی برای برنامه نویس PICkit 2: 6 مرحله
عکس 16F676 ICSP سوکت برنامه نویسی برای برنامه نویس PICkit 2: من سعی می کنم این ماژول موتور DC دوگانه را برای پروژه ربات خود بسازم و فضا برای قرار دادن هدر پین ICSP روی PCB نداشتم. بنابراین من به سرعت این طرح را مسخره کردم
& acirc؛ & ndash؛ & rsquo؛. :: *، طراحی عالی (Microsoft Paint) ، *::. & acirc؛ & ndash؛ & rsquo ؛: 4 مرحله
& acirc؛ & ndash؛ & rsquo؛. ::*، طراحی فوق العاده (Microsoft Paint) ،*::. & acirc؛ & ndash؛ & rsquo ؛: من به شما نشان خواهم داد که چگونه می توانید با استفاده از رنگ مایکروسافت ، یا فقط یک مداد و کاغذ ، یک طراحی عالی بسازید! ! P.S. لطفاً به مسابقه کتاب امتیاز دهید و رای دهید. یک میلیون ممنون
راهنمای برنامه نویسی جالب برای طراح-کنترل فرآیند برنامه-بیانیه حلقه: 8 مرحله
راهنمای برنامه نویسی جالب برای طراح-کنترل فرآیند برنامه-بیانیه حلقه: کنترل فرآیند برنامه-بیانیه حلقه از این فصل ، شما با یک بیانیه حلقه مهم و قدرتمند دانش ارتباط خواهید داشت. قبل از خواندن این فصل ، اگر می خواهید 10000 دایره در برنامه بکشید ، فقط می توانید با یک ter