Мазмұны:

Микро бағдарламалау: бит робот және джойстик: MicroPython көмегімен бит контроллері: 11 қадам
Микро бағдарламалау: бит робот және джойстик: MicroPython көмегімен бит контроллері: 11 қадам

Бейне: Микро бағдарламалау: бит робот және джойстик: MicroPython көмегімен бит контроллері: 11 қадам

Бейне: Микро бағдарламалау: бит робот және джойстик: MicroPython көмегімен бит контроллері: 11 қадам
Бейне: PLAYSTATION - ТЕЛЕФОН! 2024, Шілде
Anonim
Микро бағдарламалау: бит робот және джойстик: MicroPython көмегімен бит контроллері
Микро бағдарламалау: бит робот және джойстик: MicroPython көмегімен бит контроллері

Robocamp 2019 үшін біздің жазғы робототехника лагері үшін 10-13 жас аралығындағы жастар BBC микро: битке негізделген «салмаққа қарсы роботты» дәнекерлейді, бағдарламалайды және құрады, сонымен қатар қашықтан басқару пульті ретінде қолданылатын микро: битті бағдарламалайды.

Егер сіз қазір Robocamp -те болсаңыз, 3 -қадамға өтіңіз, өйткені біз топ болып алғашқы екі қадамды жасадық

Бұл джойстик: бит контроллерімен байланысатын микро: бит роботты алуға арналған қадамдық нұсқаулық.

Барлығын іске қосу үшін ең жылдам жолды қажет етпейді, бірақ сіз кішкене бөліктерде әрекет етесіз, сонда сіз кодты бара жатқанда тексере аласыз, оған өз мөріңізді қоясыз және не істеп жатқанымызды түсінеміз. !

Бұл әрекет үшін біз жеке роботты қолданамыз, бірақ ол кез келген роботпен ұқсас мотор драйверін қолданады, мысалы L9110s.

Біздің роботқа арналған дизайн файлдарын мына жерден табуға болады:

Бұл нұсқаулық жаңадан бастаушыларға арналған, бірақ егер сіз бұрын MicroPython -мен micro: bit -ті ешқашан қолданбаған болсаңыз, алдымен қарапайым нұсқаулықты қолданып көруді ұсынамыз, мысалы біздің нұсқаулық нұсқаулығы: https://www.instructables.com/id/Felt -Microbit-Nam …

Жабдықтар

2x BBC микро: бит

BBC микро: битпен жұмыс істейтін робот (жоғарыдағы түсініктемені қараңыз)

джойстик: бит контроллері (біздікі Cool компоненттерінен алынды)

1-қадам: роботты орнату

Сізде micro: bit үшін MicroPython кодын жазудың бірнеше нұсқасы бар:

  • Му, оны мына жерден жүктеуге және орнатуға болады:
  • Онлайн редактор, оны мына жерден табуға болады:

Бұл нұсқаулар сіз Mu -ды қолданасыз деп болжайды

Mu бағдарламасын ашып, микро: битін компьютерге қосыңыз. Му микро: бит қолданып жатқаныңызды түсінуі керек және micro: bit 'Mode' таңдаңыз, бірақ олай болмаса, оны қолмен өзгертіңіз.

режимін таңдаңыз
режимін таңдаңыз

Роботтың мотор сынау кодының көшірмесін мына жерден алыңыз:

Егер сіз Github -ға үйренбеген болсаңыз, бұл түсініксіз болуы мүмкін! Бұл кодты алудың екі қарапайым әдісі:

  1. Raw файлын компьютерге сақтаңыз, содан кейін оны Му -ге жүктеңіз:
  2. Берілген барлық кодты көшіріп, Му файлындағы жаңа файлға қойыңыз.
шикі файлды сақтау
шикі файлды сақтау

Енді жаңа кодты микро: битке жіберу үшін Му құралдар тақтасындағы 'Flash' түймесін басыңыз.

Бұл micro: bit қосылмайынша жұмыс істемейді

Микро артындағы сары шам: бит жыпылықтай бастайды. Ол аяқталғаннан кейін сіздің кодыңыз аударылды.

МОТОР БАҒЫТТАРЫН ОРНАТУ

Бұл бағдарлама микро: битке 'A' түймесін басқанда қозғалтқыштарды әр түрлі бағытта қосады.

Сіз болғыңыз келетін нәрсе:

  • 'A' көрсетілгенде, сол жақ қозғалтқыш алға қарай жылжиды
  • 'B' көрсетілгенде, қозғалтқышты артқа қарай
  • 'C' көрсетілгенде оң жақ қозғалтқыш алға қарай жылжиды
  • 'D' көрсетілгенде, оң жақ қозғалтқыш артқа қарай

Бұлай болмайтын шығар, себебі бұл сіздің роботты қалай қосқаныңызға байланысты!

Кодтың жоғарғы жағында сіз микро: бит қандай қозғалтқыш бағытын басқаратынын анықтайтын айнымалылар тізімін таба аласыз.

Егер сіз біздің роботтарды (файлдарды) біреуін қолдансаңыз, роботтың дұрыс бағытта қозғалуы үшін айнымалы атауды ауыстырыңыз:

свинтті пин айнымалылары
свинтті пин айнымалылары

Егер сіз өзіңіздің жеке роботыңызды қолдансаңыз, кодты өңдеуден бұрын мотор драйверінің қай істікке қосылғанын тексеріңіз.

Драйверді сынау

Енді негізгі циклдегі тест кодын өзіңіздің жеке кодыңызға ауыстыру арқылы сіздің роботтың қалай жүргізетінін тексеріңіз.

Сіз роботқа drive () функциясын шақыру арқылы көлік жүргізуді айтасыз. Бұл үшін екі дәлел қажет - сол жақ қозғалтқыштың мәні және оң қозғалтқыштардың мәні 0 (өшіру) мен 1023 (максималды жылдамдық) арасындағы.

Драйвқа (500, 500) қоңырау шалу арқылы, мысалы, сіз екі қозғалтқышты да алға қарай шамамен жарты жылдамдықпен қосуды айтасыз.

Оның қаншалықты тік жүретінін және қаншалықты жақсы бұрылатынын білу үшін бірнеше нұсқаны қолданып көріңіз.

Нұсқау: мотор тесттері True циклінде де, if операторында да болды - сіз микро: битке A түймесін басқанға дейін қозғалтқыштар бұрылмайды және сіз A түймесін басқан -баспағаныңызды мәңгі тексереді.

Нұсқау: моторлар сіз айтпағанша сөнбейді! Олар әрқашан өзінің соңғы нұсқауын орындауды жалғастырады.

ҚОСЫМША: ТҰЗҒЫЛЫҚ ЖҮРГІЗУДІ ЖАҚСАРТУ

Егер сіздің роботыңыз түзу жүрмесе, сіздің қозғалтқыштардың бірі екіншісіне қарағанда жылдам айналуы мүмкін.

Дөңгелектің еркін айналуына физикалық түрде кедергі келтіретін ештеңе жоқ екенін тексергеннен кейін, жылдамырақ қозғалтқыштың жылдамдығын төмендету үшін жетекті функциядағы кодты өңдеуге болады.

Драйвер функциясының анықтамасын табу үшін жоғары айналдырыңыз және жоғарғы екі нұсқаулықты қараңыз:

диск жетегі (L, R):

# Төменде L = int (L*1) R = int (R*1) қозғалтқыш жылдамдығының сәйкессіздігін түзету үшін түзету берілген.

Бұл екі жол L және R мәндерін қабылдайды, оларды 1 -ге көбейтеді, содан кейін олардың бүтін сандар екеніне көз жеткізіңіз (int).

Мысалы, егер сіздің сол жақ қозғалтқышыңыз жылдамырақ болса, онда оның жолындағы *1 -ді *0,9 -ға өзгертіңіз және бұл жағдайды жақсартатынын тексеріңіз.

Сіз оны жетілдіре алмайсыз, бірақ ол түзу қозғалғанша реттей аласыз.

РАДИОНЫ ОРНАТУ

Енді кодтың жоғарғы жағына келесі жолдарды қосу арқылы радионы орнатыңыз:

радио импорттау

radio.config (арна = 7, топ = 0, кезек = 1) radio.on ()

Бұл сіздің роботқа басқа micro: bit нұсқауын алуға мүмкіндік береді, бірақ қазіргі уақытта ол кез келген басқа микро: бит нұсқауын алады.

Себебі 7 арна мен 0 тобы әдепкі арналар болып табылады.

0-82 арасындағы арнаны және 0-255 арасындағы топты таңдай отырып, осы сандарды өзгертіңіз. Енді сіздің микро: бит тек конфигурация ақпараты бар басқалардан нұсқаулар алады.

кезек = 1 микро: бит бір уақытта тек бір кіріс хабарламаны сақтайтынын білдіреді - бұл әдепкіге қарағанда сәл жылдам жауап беру уақытын береді, яғни 3.

Енді сіз өзіңіздің негізгі цикл кодын өңдеуіңіз керек, түймені басқанда нұсқауларды орындаудың орнына, кіріс радио хабарын күтіп, тиісті түрде жауап беріңіз.

Келесі кодты тест ретінде қолданып көріңіз (2 -қадамда джойстик орнатылмайынша ол ештеңе етпейді):

шындық кезінде:

message = radio.receive () if message == 'forward': диск (500, 500)

2-қадам: джойстикті орнату

Роботтың микро: битін ажыратып, орнына джойстиктің микро: битін қосыңыз

Джойстик кодының көшірмесін мына жерден алыңыз:

Радионы робот үшін жасағандай конфигурацияны (арна мен топ нөмірі) қолдана отырып орнатыңыз - бұл екеуінің бір -бірімен сөйлесуіне мүмкіндік береді.

Бағдарламаның соңында негізгі циклды бастаңыз:

шындық кезінде:

егер button_a.was_pressed (): radio.send («алға»)

Бұл код әлі де джойстикті қолданбайды: бит. Хабарды жіберу үшін микро: битке А түймесін қолданады.

Роботтың да, контроллердің де микро: биттерінің қуаты бар екеніне көз жеткізіңіз, содан кейін хабарды жіберу үшін түймені басыңыз.

Егер хабар сәтті қабылданса және сіздің роботыңыз қозғалса … жақсы! Сіз орнату нұсқауларын аяқтадыңыз.

АҚАУЛЫҚТЫ ЖОЮ КЕҢЕСТЕРІ

Егер сіз micro: bit контроллерінде қате туралы хабар алсаңыз, контроллер кодын күйге келтіріңіз

Егер сіз роботқа micro: bit қате туралы хабарлама алсаңыз … сіздің радио хабарыңыз сәтті жіберілді! Бірақ робот оны түсіне алмайды, сондықтан сіз жіберген хабарлама мен роботқа сәйкестікті тыңдау үшін айтқан хабарды тексеріңіз.

Егер ештеңе мүлде болмаса

  • Әр микро: битке дұрыс кодты енгізгеніңізге көз жеткізіңіз - қатені кездейсоқ жыпылықтау оңай!
  • Әр микро: битке сіздің арна мен топ нөмірлері сәйкес келетініне көз жеткізіңіз

3 -қадам: Джойстиктің мәндерін тексеру

Келесі бірнеше қадамдар контроллер кодын қолданады

Контроллердегі джойстикті қолданбас бұрын, таяқшаны басқанда қандай мәндер алатынын білу керек.

Негізгі циклды келесі кодпен ауыстырыңыз:

шындық кезінде:

джойстик = joystick_push () басып шығару (джойстик) ұйқы (500)

Бұл кодты micro: bitке жіберіңіз, содан кейін Му құралдар тақтасындағы REPL түймесін басыңыз. Бұл редактордың төменгі жағында микро: битке нақты уақыттағы сілтеме беретін терминалды ашады.

REPL ашыңыз
REPL ашыңыз

Бұл micro: bit қосылмайынша жұмыс істемейді

REPL ашық болғанда, micro: bit артқы жағындағы қалпына келтіру түймесін басыңыз.

Кескін
Кескін

Сіз экранға «басып шығарылған» кейбір мәндерді көресіз:

терминалдағы мәндер
терминалдағы мәндер

Джойстик таяқшасын итеріп, сандармен не болатынын көріңіз.

Джойстик орталық күйде болған кезде берілген мәндерді жазып алыңыз - менің жағдайда (518, 523).

Оны жабу үшін Му құралдар тақтасындағы REPL түймесін қайтадан басыңыз - ол ашық болғанда micro: bitке жаңа кодты жыпылықтай алмайсыз.

4 -қадам: 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

Қуанышты функцияны кеңейту

Солға және оңға екі жаңа айнымалыны жасау үшін джойстик функциясын кеңейтіңіз және өңдеңіз және сол мәндерді x және y орнына қайтарыңыз:

def joystick_push ():

x = pin0.read_analog () - 518 y = pin1.read_analog () - 523 сол = оңға = солға, оңға қайту

Жаңа кодты жарқылдатыңыз, REPL ашыңыз, micro: bit қалпына келтіру түймесін басыңыз және мәндеріңізді тексеріңіз.

Сіз күткен құндылықтарды аласыз ба?

Егер сізге қосымша көмек қажет болса, біздің мысал кодын мына жерден қараңыз:

6 -қадам: Мәндерді радио хабарлама ретінде жіберу

Енді сізде роботқа жіберуге дайын бірнеше құндылықтар бар.

Негізгі циклды джойстиктің мәндерін тексеретін етіп өңдеңіз, бірақ содан кейін мәндерді басып шығарудың орнына оларды радио хабар ретінде жіберуге дайындайды.

шындық кезінде:

джойстик = joystick_push () хабарлама = str (джойстик [0]) + «» + str (джойстик [1])

Бұл хабарды әлі жібермейді!

Бұл жаңа код жолында не болып жатыр?

  • джойстик [0] - джойстик функциясынан шығатын ақпараттың бірінші бөлігі (сол жақта)
  • джойстик [1] - бұл ақпараттың келесі бөлігі (оң жақта)
  • str () бұл сандардың екеуін де жол форматына түрлендіреді (сандардың орнына мәтін) - бұл ақпаратты радио арқылы жіберу үшін қажет.

Сіз + дегенді үйренуге үйренесіз - ол сандарды қоса алады және жолдарды біріктіре алады, яғни бұл ақпараттың екі бөлігін біріктіреді.

Мысал:

150 + 100 = 250

str (150) + str (100) = 150100

Осылайша, біріктіру сіздің сол және оң мәндеріңізді біріктіреді.

Ақпараттың екі битін ажыратуға мәжбүр ету үшін (робот олардың екі бит ақпарат екенін білуі үшін), олардың арасына қосымша жолды «» көмегімен жалғаңыз. Кеңістіктің айналасындағы сөйлеу белгілері оның қазірдің өзінде жіп екенін білдіреді.

Ақырында, жаңадан құрылған хабарды радио арқылы жіберу үшін кодты кеңейтіңіз:

radio.send (хабар)

ұйықтау (10)

Ұйқы хабарды жіберуді баяулатады, осылайша микро: бит тым көп ақпаратпен жүктелмейді!

Келесі қадамға өтпес бұрын осы кодты micro: bit контроллеріне жіберіңіз және қателерді түзетіңіз

7 -қадам: роботтағы хабарларды алу

Робот кодына басынан оралыңыз - робот кодын кездейсоқ жанып кетпес үшін контроллердің micro: bit розеткасынан ажыратуды ұмытпаңыз

Негізгі циклге төмен айналдырыңыз - тестілеу кодын алып тастап, орнына мынаны қосыңыз:

шындық кезінде:

хабар = radio.receive () басып шығару (хабар) ұйқы (100)

Бұл кіріс хабарламаға тең айнымалы мәнді орнатады және хабарламаны күткендей өтетінін тексеру үшін хабарды REPL -ге басып шығарады.

REPL қосылған жаңа кодты жарқылдатыңыз, содан кейін джойстикті басыңыз.

Сіз келесідей нәрсені алуыңыз керек:

REPL мәндері
REPL мәндері

АҚАУЛЫҚТЫ ЖОЮ КЕҢЕСТЕРІ

Егер сіз micro: bit контроллерінде қате туралы хабар алсаңыз, контроллер кодын күйге келтіріңіз

Егер сіз роботқа micro: bit қате туралы хабарлама алсаңыз … сіздің радио хабарыңыз сәтті жіберілді! Бірақ робот оны түсіне алмайды, сондықтан сіз жіберген хабарлама мен роботқа сәйкестікті тыңдау үшін айтқан хабарды тексеріңіз.

Егер ештеңе мүлде болмаса

  • Әр микро: битке дұрыс кодты енгізгеніңізге көз жеткізіңіз - қатені кездейсоқ жыпылықтау оңай!
  • Әр микро: битке сіздің арна мен топ нөмірлері сәйкес келетініне көз жеткізіңіз

8 -қадам: Робот моторларын басқару үшін кіріс хабарламаларды қолдану

Енді сіз радио арқылы екі нөмірді жол ретінде жібересіз.

Сіз бұл хабарды екі жолға бөлуіңіз керек, содан кейін жолдарды қайтадан сандарға түрлендіріп, оны диск функциясына беруіңіз керек. Бірден көп нәрсе болады!

Мұны жасамас бұрын, сіз алған хабардың дұрыс форматта екенін тексеруіңіз керек.

Егер ешқандай хабар жіберілмесе, сіз оның орнына «Ешқайсысын» аласыз. Егер сіз оны бөлуге тырыссаңыз, қате туралы хабар аласыз.

шындық кезінде:

message = radio.receive () егер хабарлама Ешқандай болмаса: хабарлама = message.split () диск (int (хабар [0]), int (хабар [1]))

Бұл жерде не болып жатыр?

  • Егер хабарлама 'None' дегеннен басқа болса, жаңа код іске қосылады.
  • message.split () хабарламадағы бос орынды тексереді (біз оны соңғы қадамда қостық) және оны хабарды екіге бөлу үшін қолданады.
  • int (хабарлама [0]), int (хабарлама [1]) алдыңғы қадамда біз жасағанның керісінше жасайды - әрбір ақпаратты жеке алады және оны бүтін санға (бүтін санға) түрлендіреді.
  • int (хабарлама [0]) жетек функциясында сол мотордың мәні ретінде, ал int (хабарлама [1]) оң жақ қозғалтқыштың мәні ретінде пайдаланылады.

Оның жұмыс істейтінін тексеріңіз - джойстикті басқанда қозғалтқыштар бұрыла ма?

Олай болмаған жағдайда - отладтаудың уақыты!

Егер иә болса, керемет! Сізде жұмыс істейтін қашықтан басқару роботы бар!

Келесі қадамға өтпес бұрын роботпен жаттығуға біраз уақыт бөліңіз. Бұл сіз күткен жолмен жүре ме?

Келесі қадамдар роботқа қосымша функционалдылықты қосу үшін джойстиктің түймелерін қалай пайдалану керектігін көрсетеді

Егер сіз осы уақытқа дейін осы кодтың нұсқасын көргіңіз келсе:

  • Робот:
  • Контроллер:

9 -қадам: Түймешіктерді қолдану - қосымша хабарламалар алу

Қазіргі уақытта сіздің кодыңыз Ешқандай емес хабарламаны бөлуге тырысады. Бұл дегеніміз, егер ол, мысалы, «сәлем» алса, онда сіз қате туралы хабар аласыз.

Микро: битке басқа хабарларды түсіндіруге рұқсат беру үшін алдымен әрбір күтілетін хабарды тексеруі керек, содан кейін оған басқа ештеңе істеу туралы айтылмаса ғана хабарды бөлу қажет.

Кодыңызды келесідей кеңейтіңіз:

егер хабарлама жоқ болса:

if message == 'hello': display.show (Image. HAPPY) elif message == 'duck': display.show (Image. DUCK) else: message = message.split () drive (int (message [0]), int (хабар [1]))

Біріншіден, ол «сәлем» хабарын алғанын тексереді. Егер ол болса, онда ол бақытты суретті көрсетеді, содан кейін циклдің жоғарғы жағына оралыңыз және келесі хабарды тексеріңіз.

Егер хабар сәлем болмаса, ол келесіде хабардың «үйрек» екенін тексереді.

Егер хабарлама «сәлем» немесе «үйрек» болмаса, ол тізімдегі соңғы әрекетті жасайды, ол хабарды бөліп, қозғалтқышты қосады. Егер ол «сәлем» немесе «үйрек» алған болса, ол хабарды бөлуге тырыспайды, яғни сіз осы екі хабардың бірінен де қате туралы хабарды алмайсыз.

Қос теңдік белгісі маңызды - бұл бір нәрсені орнататын жалғыз теңдік белгісімен салыстырғанда 'тең' дегенді білдіреді (сондықтан хабарлама = 'сәлем' біз айнымалы мәнді 'сәлем', хабарлама == 'сәлем' деп қоямыз дегенді білдіреді біз хабардың «сәлемге» тең екенін сұрайтынымызды білдіреді).

Оны сынау үшін әзірге тек екі опцияны қолданып көріңіз - кейінірек қалағаныңызша басқа хабарларды қосуға болады.

Жұмыс кодына сілтеме:

10 -қадам: Контроллер түймелерін пайдаланып қосымша хабарлар жіберу

Роботтың микро: битін ажыратып, орнына джойстиктің микро: битін қосыңыз

Өңдеу үшін контроллер кодына оралыңыз.

Робот коды сияқты, біз контроллерден джойстик мәндерін жібермес бұрын басқа хабарларды жіберуге тырысқаныңызды тексергенін қалаймыз.

Циклдың жоғарғы жағында біз әлі де джойстиктің ағымдағы мәндерін тексергенін қалаймыз, бірақ сонымен қатар қазіргі уақытта түйменің басылып жатқанын тексергенін қалаймыз:

шындық кезінде:

джойстик = joystick_push () түймесі = button_press ()

button_press () қай батырманың басылуына байланысты A, B, C, D, E немесе F мәнін қайтарады (егер ештеңе басылмаса, ол None қайтарады).

Енді біз if-elif-else мәлімдемесін жасай аламыз, мысалы, робот коды үшін-екі түймені қолданып, егер ешқандай түйме басылмаса, джойстик мәнін жібереміз.

егер түймешік == 'А':

radio.send ('сәлем') ұйқы (500) elif түймесі == 'B': radio.send ('үйрек') ұйқы (500) басқа: хабар = str (джойстик [0]) + «» + str (джойстик [1]) radio.send (хабар) ұйқы (10)

Түйме басылған кезде, роботқа алдыңғы қадамда назар аудару керек деп айтқан хабарламалардың бірін жіберіңіз.

Хабар батырманы басқан сайын жіберіледі, ал компьютерлер адамдарға қарағанда әлдеқайда жылдам! Ол саусағыңызды түймені алып тастамай тұрып, хабарды бірнеше рет жіберуі мүмкін.

Хабарламаны жібергеннен кейін ұйықтау оны баяулатады, сондықтан ол батырманы тез тексермейді - сіз үшін тамаша уақытты алу үшін осында бірнеше нөмірді қолданып көріңіз - тым баяу және ол жауап бермейді. тез арада сіздің роботыңызға джойстикке жауап беруді тоқтатуы мүмкін көптеген түйме хабарламалар келеді!

Бұл жұмыс істейді ме?

Егер сіз қате туралы хабарламалар алсаңыз, не өзгергенін және не болып жатқанын мұқият ойластырыңыз.

Егер сіз контроллердегі түймені басқан кезде роботта қате алсаңыз - сіз хабарламаның өтетінін білесіз, бірақ бұл роботты шатастырады. Сіз жіберген хабар мен роботқа іздеу керек хабардың бірдей екенін тексеріңіз.

Жұмыс кодына сілтеме:

11 -қадам: Келесі қадамдар

Енді сізде роботтың қозғалтқыштарымен және джойстикпен жұмыс істеу үшін қажетті ақпарат бар: контроллер

Бұл білімді екі бағдарламаны жақсарту үшін қолданыңыз және оларды өзіңізге айналдырыңыз. Төменде кейбір идеялар!

Сізде контроллерде алты түйме бар! Олардың не істегенін қалайсыз?

  • Роботтың бұйрық бойынша би тәртібін бағдарламалауға қалай қарайсыз? Sleep () командаларымен бөлінген drive () командаларының алгоритмін жазыңыз!
  • Сіз роботтың төңкеріліп кетуі үшін қозғалыс бағытын өзгерткіңіз келе ме? Джойстиктің x және y мәндері туралы ойланыңыз. Олар нені бейнелейді және оларды қалай басқаруға болады?
  • Сіздің роботта жарық диодты, динамик немесе датчиктер сияқты қосымша мүмкіндіктер бар ма (немесе сіз қосасыз ба?)?

Кодты жақсартуға арналған идеялар

  • Try/except кодын қолдану арқылы роботқа белгісіз хабарларды жеңуге көмектесе аласыз ба?
  • Джойстиктен сол және оң мәндерді есептеу үшін қолданылатын математика бізге мәндердің толық спектрін бермейді (роботтың жетегі 1023 дейінгі санды қабылдай алады). Жақсы диапазон алу үшін осы кодты өңдей аласыз ба?
  • Джойстик мәндерін араластырудың басқа әдістері бар - сіз мұны істеудің жақсы әдісін таба аласыз ба?

Ұсынылған: