Мазмуну:

Микро программалоо: Бит робот жана джойстик: MicroPython менен бит контроллери: 11 кадам
Микро программалоо: Бит робот жана джойстик: MicroPython менен бит контроллери: 11 кадам

Video: Микро программалоо: Бит робот жана джойстик: MicroPython менен бит контроллери: 11 кадам

Video: Микро программалоо: Бит робот жана джойстик: MicroPython менен бит контроллери: 11 кадам
Video: Lesson 1: What is Arduino? Types of Arduino Boards and SunFounder Kit | SunFounder Robojax 2024, Июль
Anonim
Микро программалоо: Бит робот жана джойстик: MicroPython менен бит контроллери
Микро программалоо: Бит робот жана джойстик: MicroPython менен бит контроллери

Robocamp 2019 үчүн, биздин жайкы робототехника лагери, 10-13 жаштагы жаштар BBC микро: битке негизделген "салмакка каршы роботту" ширетип, программалашат жана курушат, ошондой эле алыстан башкаруу катары колдонуу үчүн микро: битти программалашат.

Эгерде сиз азыр Robocampта болсоңуз, 3 -кадамга өтүңүз, анткени биз алгачкы эки кадамды топ катары кылдык

Бул джойстик: бит контроллери менен байланышкан микро: бит роботун алуу боюнча этап-этабы менен көрсөтмө.

Баарын иштетүү үчүн эң ылдам маршрут талап кылынбайт, бирок кичинекей бөлүктөрдү колдонуп көрүңүз, ошондо сиз бара жатканыңызда кодду сынап, өзүңүздүн мөөрүңүздү коюп, эмне үчүн биз эмне кылып жатканыбызды түшүнө аласыз. !

Бул иш үчүн биз өзүбүздүн жеке роботту колдонуп жатабыз, бирок ал окшош мотор драйверин колдонгон ар бир робот менен иштейт, мисалы L9110s.

Биздин роботтун дизайн файлдарын бул жерден тапса болот:

Бул колдонмо башталгычтар үчүн жазылган, бирок эгер сиз буга чейин MicroPython менен микро: битти колдоно элек болсоңуз, адегенде жөнөкөй аталыштагы программаны сынап көрүүнү сунуштайбыз, мисалы, биздин бейджик Instructable: https://www.instructables.com/id/Felt -Microbit-Nam …

Жабдуулар

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

Би -Би -Си микро менен иштеген робот: бит (жогорудагы түшүндүрмөнү караңыз)

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

1-кадам: Роботту орнотуу

Сизде micro: bit үчүн MicroPython кодун жазуунун бир нече варианты бар:

  • Му, сиз бул жерден жүктөп алып, орното аласыз:
  • Бул жерде таба турган онлайн редактору:

Бул көрсөтмөлөр Му колдонуп жатканыңызды билдирет

Му -ну ачып, микро: битти компьютериңизге сайыңыз. Му сиз микро: битти колдонуп жатканыңызды моюнга алып, micro: bit 'Mode' тандап алышы керек, бирок андай болбосо, аны кол менен алмаштырыңыз.

режимин тандоо
режимин тандоо

Бул жерден роботтун мотор сыноо кодунун көчүрмөсүн алыңыз:

Эгерде сиз Githubга көнө элек болсоңуз, анда ал түшүнүксүз болушу мүмкүн! Бул кодду алуунун эки оңой жолу:

  1. Чийки файлды компьютериңизге сактап, андан кийин Муга жүктөңүз:
  2. Берилген коддун баарын көчүрүп, Мудагы Жаңы файлга чаптаңыз.
чийки файлды сактоо
чийки файлды сактоо

Эми жаңы кодуңузду микро: битке жөнөтүү үчүн Му'дун куралдар тилкесинен 'Flash' баскычын басыңыз.

Бул micro: bit сайылмайынча иштебейт

Микро артындагы сары жарык: бит жаркылдай баштайт. Ал бүткөндөн кийин, сиздин код которулду.

МОТОРДУН БАГЫТТАРЫН ОРНОТУУ

Бул программа сиз микро: битке "А" баскычын басканда моторлорду ар кандай багытта күйгүзөт.

Эмне болгуңуз келет:

  • 'А' көрсөтүлсө, сол мотор алдыга жылат
  • Качан "В" көрсөтүлөт, мотор артка
  • Качан "С" көрсөтүлөт, оң мотор алдыга
  • Качан 'D' көрсөтүлөт, оң мотор артка

Бул, балким, андай болбойт, анткени бул роботту кантип туташтырганыңыздан көз каранды!

Коддун үстү жагында, сиз микро: битти кайсы мотордун багытын көзөмөлдөгөнүн аныктоочу өзгөрмөлөрдүн тизмесин таба аласыз.

Эгерде сиз биздин роботтордун (файлдардын) бирин колдонуп жатсаңыз, роботту туура багытта жылдыруу үчүн айланма аталыштарды алмаштырыңыз:

pin өзгөрмөлөрүн алмаштыруу
pin өзгөрмөлөрүн алмаштыруу

Эгерде сиз өзүңүздүн роботуңузду колдонуп жатсаңыз, анда кодду түзөтүүдөн мурун мотор драйвери кайсы казыкка туташтырылганын текшериңиз.

ДРЕКТИ СЫНОО

Негизги циклдеги тест кодун өзүңүздүн кодуңузга алмаштырып, роботуңуздун кантип айдаганын текшериңиз.

Сиз роботко drive () функциясын чакырып айдоону айтасыз. Бул эки аргументти талап кылат - сол мотордун мааниси жана оң мотордун мааниси 0 (өчүрүү) менен 1023 (максималдуу ылдамдык) ортосунда.

Драйвка (500, 500) чалуу менен, мисалы, сиз эки кыймылдаткычты тең алдыга карай, болжол менен жарым ылдамдыкта күйгүзүүнү айтып жатасыз.

Канчалык түз айдаганын жана канчалык жакшы бурулганын билүү үчүн бир нече варианттарды колдонуп көрүңүз.

Ишара: мотор тесттери бир аз убакыт ичинде болгон True loop, жана if оператору - моторлор сиз micro: bitтеги A баскычын басмайынча бурулбайт, жана сиз 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 ()

Бул сиздин роботко башка micro: bitтен көрсөтмө алууга мүмкүндүк берет, бирок учурда ал башка micro: bitтен көрсөтмө алат.

Себеби 7 канал жана 0 тобу демейки каналдар.

0-82 ортосундагы каналды жана 0-255 ортосундагы топту тандап, бул сандарды өзгөртүңүз. Эми сиздин микро: бит ошол эле конфигурация маалыматы бар башкалардан гана көрсөтмөлөрдү алат.

кезек = 1 микро дегенди билдирет: бит бир убакта бир гана кирүүчү билдирүүнү сактайт - бул демейкиден бир аз тезирээк жооп берүү убактысын берет, бул 3.

Эми сиз негизги цикл кодуңузду, баскычты басканыңызда, кирүүчү радио билдирүүнү күтүп, тийиштүү түрдө жооп берүүнүн ордуна, түзөтүшүңүз керек.

Төмөнкү кодду тест катары колдонуп көрүңүз (2 -кадамда джойстикти орнотмойунча эч нерсе кылбайт):

чын болсо:

message = radio.receive () if message == 'forward': drive (500, 500)

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

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

Джойстиктин кодунун көчүрмөсүн бул жерден алыңыз:

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

Программанын аягында негизги циклди баштаңыз:

чын болсо:

if button_a.was_pressed (): radio.send ("алдыга")

Бул код азырынча джойстикти колдоно элек: bit. Бул билдирүү жөнөтүү үчүн микро: бит баскычын колдонот А.

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

Эгерде билдирүү ийгиликтүү кабыл алынып, роботуңуз кыймылдаса … молодец! Сиз орнотуу көрсөтмөлөрү менен бүттүңүз.

КЫЙЫНТЫКТАРДЫ ЖОЮУ КЕҢЕШТЕРИ

Эгерде сиз контролеруңузда ката жөнүндө билдирүү алсаңыз, микро: бит… контроллер кодуңузду оңдоңуз

Эгер сиз роботуңузга micro: bit боюнча ката тууралуу билдирүү алсаңыз … сиздин радио билдирүүңүз ийгиликтүү жөнөтүлдү! Бирок робот аны түшүнө албайт, андыктан сиз жөнөткөн билдирүүңүздү жана роботко матчты угуу үчүн айткан билдирүүңүздү текшериңиз.

Эгерде таптакыр эч нерсе болбосо

  • Ар бир микро: битке туура кодду киргизгениңизди текшериңиз - туура эмесин кокусунан жарк этип коюу оңой!
  • Каналыңыздын жана топтун номерлери ар бир микро: битке дал келерин текшериңиз

3 -кадам: Джойстик баалуулуктарын текшерүү

Кийинки бир нече кадамдардын бардыгы контроллер кодун колдонушат

Контроллердеги джойстикти колдонуудан мурун, таякты басканда кандай баалуулуктарга ээ экениңизди билишиңиз керек.

Негизги циклди төмөнкү код менен алмаштырыңыз:

чын болсо:

джойстик = joystick_push () басып чыгаруу (джойстик) уйку (500)

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

REPL ачуу
REPL ачуу

Бул micro: bit сайылмайынча иштебейт

REPL ачык болгондо, микро: бит арткы бетиндеги баштапкы абалга келтирүү баскычын басыңыз.

Сүрөт
Сүрөт

Экраныңызга "басылган" кээ бир баалуулуктарды көрүшүңүз керек:

терминалдагы баалуулуктар
терминалдагы баалуулуктар

Джойстиктин таягын түртүп, сандарга эмне болгонун көрүңүз.

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

Аны жабуу үчүн Му куралдар панелиндеги REPL баскычын кайра басыңыз - ал ачык болгондо micro: bitке жаңы кодду жаркырата албайсыз.

4 -кадам: X жана Y өзгөрмөлөрүн тууралоо

Сиз джойстик функциясы берген баалуулуктарды өзгөрткүңүз келет:

  • борборунда ал нөлгө барабар
  • оң болот
  • төмөн терс.

Бул роботтун керектүү көрсөтмөлөрүнө дал келет - алдыга карай оң сан, ал эми артка айдоо үчүн терс сан.

Акыркы кадамда алган сандарыңызды караңыз. Биринчи сан x, экинчи сан y.

Программада болгон joystick_push () аныктамасын түпнускадан минус кылып өзгөртүү:

def joystick_push ():

x = pin0.read_analog () - 518 y = pin1.read_analog () - 523 return x, y

Өз номерлериңизди колдонуңуз, алар меникинен айырмаланышы мүмкүн

Жаңы кодуңузду жаркылдатыңыз, REPLди ачыңыз, микро: битти баштапкы абалга келтирүү баскычын басыңыз жана баалуулуктарыңызды текшериңиз.

Сиз (0, 0) аласызбы?

5 -кадам: Сол жана Оң моторлор үчүн X жана Y маанилерине айландыруу

Учурда, бул джойстик роботту башкаруу үчүн анча деле пайдалуу болбойт. Ары карай алдыга сүрүлгөндө, сиз (0, 500) сыяктуу мааниге ээ болосуз.

Эгер сиз бул сандарды роботко берсеңиз, анда ал оң моторду күйгүзмөк, бирок сол жагын күйгүзбөйт, бул сиз каалагандай эмес!

Бул диаграмма сиз джойстикти жылдырганыңызда x жана y баалуулуктары менен эмне болорун жана роботтун сиз джойстикти жылдырганда эмне кылышын көрсөтөт.

диаграмма
диаграмма

Сизге пайдалуу нерселерди берүү үчүн x жана y баалуулуктарын аралаштыруу үчүн кээ бир математиканы колдонушуңуз керек.

п

МАТЕМАЛАР

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

Сиз ала турган баалуулуктардын мисалы:

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

Формуланын эки топтомун салыштырып көрүңүз, кайсы вариант сизге туура сол маанини берет, жана кайсы вариант сизге туура маанини берет.

Формула дайыма иштээрине ынануу үчүн, өзүңүздүн джойстиктен алган баалуулуктарыңыз менен колдонуп көрүңүз.

п

ЖАНЫМДУУ ФУНКЦИЯНЫ КӨҢӨЙТҮҮ

Джойстиктин функциясын кеңейтүү жана оңдоо үчүн солго жана оңго эки жаңы өзгөрмөлөрдү жасоо жана х жана у ордуна ошол баалуулуктарды кайтаруу:

def joystick_push ():

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

Жаңы кодуңузду жаркылдатыңыз, REPLди ачыңыз, микро: битти баштапкы абалга келтирүү баскычын басыңыз жана баалуулуктарыңызды текшериңиз.

Сиз күткөн баалуулуктарга жетип жатасызбы?

Эгер сизге дагы жардам керек болсо, биздин мисал кодубузду бул жерден текшериңиз:

6 -кадам: баалуулуктарды радио билдирүүлөр катары жөнөтүү

Эми сизде роботко жөнөтүүгө даяр болгон кээ бир баалуулуктар бар.

Негизги циклди түзөтүңүз, ал джойстиктин маанилерин текшерет, бирок баалуулуктарды басып чыгаруунун ордуна, аларды радио билдирүү катары жөнөтүүгө даярдайт.

чын болсо:

джойстик = joystick_push () билдирүү = str (джойстик [0]) + "" + str (джойстик [1])

Бул азырынча билдирүү жөнөтпөйт!

Бул коддун жаңы сабында эмне болуп жатат?

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

Сиз + көрүүгө көнүп каласыз - бул сандарды кошо алат жана саптарды бириктирет, демек ал эки битти бириктирет.

Мисал:

150 + 100 = 250

str (150) + str (100) = 150100

Ошентип, бириктирүү сиздин сол жана оң баалуулуктарыңызды бириктирет.

Маалыматтын эки битин ажыратууга мажбурлоо үчүн (робот алар эки бит маалымат экенин билиши үчүн), "" аркылуу алардын ортосундагы кошумча жипти бириктирип коюңуз. Космостун тегерегиндеги сүйлөө белгилери анын мурунтан эле сап экенин билдирет.

Акырында, кодуңузду радио аркылуу жаңы түзүлгөн билдирүүнү жөнөтүү үчүн узартыңыз:

radio.send (билдирүү)

уйку (10)

Уйку билдирүүлөрдү жөнөтүүнү жайлатат, андыктан кабыл алуучу микро: бит өтө көп маалыматка толо албайт!

Кийинки кадамга өтүүдөн мурун бул кодду контролеруңузга микро: бит жана мүчүлүштүктөрдү оңдоңуз

7 -кадам: Роботуңуздагы билдирүүлөрдү алуу

Башынан баштап робот кодуңузга кайтыңыз - кокусунан роботтун кодун жарк этпеши үчүн контроллерди micro: bitти өчүрүүнү унутпаңыз

Негизги укуругуңузга ылдый сыдырыңыз - тестирлөө кодун алып салыңыз жана анын ордуна муну кошуңуз:

чын болсо:

кабар = radio.receive () басып чыгаруу (билдирүү) уйку (100)

Бул келген билдирүүгө барабар өзгөрмөнү орнотот жана билдирүүнү REPLге басып чыгарат - билдирүүлөр күтүлгөндөй келгенин текшерүү үчүн.

REPLге туташкан жаңы кодуңузду жаркылдатыңыз, андан кийин джойстикти басыңыз.

Сиз мындай нерсени алышыңыз керек:

REPL баалуулуктары
REPL баалуулуктары

КЫЙЫНТЫКТАРДЫ ЖОЮУ КЕҢЕШТЕРИ

Эгерде сиз контролеруңузда ката жөнүндө билдирүү алсаңыз, микро: бит… контролер кодуңузду оңдоңуз

Эгер сиз роботуңузга micro: bit боюнча ката тууралуу билдирүү алсаңыз … сиздин радио билдирүүңүз ийгиликтүү жөнөтүлдү! Бирок робот аны түшүнө албайт, андыктан сиз жөнөткөн билдирүүңүздү жана роботко матчты угуу үчүн айткан билдирүүңүздү текшериңиз.

Эгерде таптакыр эч нерсе болбосо

  • Ар бир микро: битке туура кодду киргизгениңизди текшериңиз - туура эмесин кокусунан жарк этип коюу оңой!
  • Каналыңыздын жана топтун номерлери ар бир микро: битке дал келерин текшериңиз

8 -кадам: Кирүүчү билдирүүлөрдү роботтун моторун башкаруу үчүн колдонуу

Сиз азыр эки номерди радио катары сап катары жөнөтүп жатасыз.

Бул билдирүүнү эки сапка бөлүп, кайра саптарды кайра сандарга айлантып, муну диск функциясына өткөрүп берүүңүз керек. Көп нерсе бир заматта болот!

Муну жасоодон мурун, сиз алган билдирүүнүн туура форматта экенин текшеришиңиз керек.

Эгерде эч кандай билдирүү жөнөтүлбөсө, анын ордуна "Эч ким" аласыз. Эгер сиз муну бөлүп -жарууга аракет кылсаңыз, ката тууралуу билдирүү аласыз.

чын болсо:

message = radio.receive () эгер билдирүү эч ким болбосо: message = message.split () drive (int (message [0]), int (message [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 маанисин кайтарат (эгер эч нерсе басылбаса, ал эч кимди кайтарбайт).

Эми биз if-elif-else билдирүүсүн жасай алабыз, биз роботтун кодунда болгондой эле-эки баскычты колдонуп, жана эч кандай баскыч басылбаса джойстиктин маанисин жөнөтө алабыз.

эгер баскыч == 'А':

radio.send ('салам') уйку (500) elif баскычы == 'B': radio.send ('өрдөк') уйку (500) башка: билдирүү = str (джойстик [0]) + "" + str (джойстик [1]) radio.send (билдирүү) уйку (10)

Кнопка басылганда, роботко мурунку кадамда көңүл бурууну айткан билдирүүлөрүңүздүн бирин жөнөтүңүз.

Кабар баскыч басылган сайын жөнөтүлөт жана компьютерлер адамдарга караганда алда канча тезирээк! Ошентип, бул баскычты манжаңыз менен чече электе, билдирүүнү көп жолу жөнөтүшү мүмкүн.

Билдирүүнү жөнөткөндөн кийинки уйку аны басаңдатат, ошондо ал баскычты тезирээк текшербейт - бул жерде сиз үчүн эң сонун убакытты алуу үчүн бир нече сандарды колдонуп көрүңүз - өтө жай жана жооп бербейт тез жана сиздин робот ушунчалык көп баскыч билдирүүлөрдү алат, ал джойстикке жооп бербей калышы мүмкүн!

Бул иштейби?

Эгер сиз ката билдирүүлөрдү алып жатсаңыз, жаңы эле өзгөрткөнүңүздү жана эмне болуп жатканын жакшылап ойлонуп көрүңүз.

Эгерде сиз контроллердеги кнопканы басканда роботко ката кетирсеңиз - анда билдирүү өтүп жатканын билесиз, бирок бул роботту чаташтырат. Сиз жөнөткөн билдирүү менен роботко издеген билдирүүңүздүн окшош экенин текшериңиз.

Жумушчу кодго шилтеме:

11 -кадам: Кийинки кадамдар

Сизде азыр роботтун моторлору жана джойстик: бит контроллери менен иштөө үчүн керектүү билим бар

Бул билимди эки программаны өркүндөтүү үчүн колдонуп, аларды менчикке айландырыңыз. Төмөндө кээ бир идеялар!

Сизде контроллерде алты баскыч бар! Алар эмне кылышын каалайсыз?

  • Роботуңуздун буйругу боюнча бийлөө тартибин программалоого кандай дейсиз? Drive () командаларынын алгоритмин жазыңыз, уйку () командалары менен бөлүнгөн!
  • Сиз роботтун оодарылып кетиши үчүн, анын багытын өзгөрткүңүз келеби? Джойстиктин x жана y баалуулуктары жөнүндө ойлонуп көрүңүз. Алар эмнени билдирет жана сиз аларды кантип башкара аласыз?
  • Роботуңузда LED, динамик же сенсор сыяктуу кошумча мүмкүнчүлүктөр барбы (же сиз кошо аласызбы?)?

Кодду жакшыртуу боюнча идеялар

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

Сунушталууда: