Talaan ng mga Nilalaman:

Pagprograma ng isang Micro: Bit Robot at Joystick: Bit Controller Sa MicroPython: 11 Mga Hakbang
Pagprograma ng isang Micro: Bit Robot at Joystick: Bit Controller Sa MicroPython: 11 Mga Hakbang

Video: Pagprograma ng isang Micro: Bit Robot at Joystick: Bit Controller Sa MicroPython: 11 Mga Hakbang

Video: Pagprograma ng isang Micro: Bit Robot at Joystick: Bit Controller Sa MicroPython: 11 Mga Hakbang
Video: проект микробит, кодирование и технология нежа набор изобретателя 2024, Nobyembre
Anonim
Pagprogram ng isang Micro: Bit Robot at Joystick: Bit Controller Sa MicroPython
Pagprogram ng isang Micro: Bit Robot at Joystick: Bit Controller Sa MicroPython

Para sa Robocamp 2019, ang aming kampo ng robotics ng tag-init, ang mga kabataan na may edad na 10-13 ay naghihinang, nagprograma at nagtatayo ng isang BBC micro: nakabatay sa 'antweight robot', pati na rin ang pagprograma ng isang micro: kaunti upang magamit bilang isang remote control.

Kung kasalukuyan kang nasa Robocamp, lumaktaw sa Hakbang 3, tulad ng nagawa namin ang unang dalawang hakbang bilang isang pangkat

Ito ay isang sunud-sunod na gabay sa pagkuha ng isang micro: bit robot na nakikipag-usap sa isang joystick: bit controller.

Hindi ito tumatagal ng pinakamabilis na ruta upang maandar ang lahat, ngunit sinusubukan ang mga bagay sa maliliit na tipak upang masubukan mo ang code habang papunta ka, ilagay dito ang iyong sariling selyo, at maunawaan kung bakit ginagawa namin ang mga bagay na ginagawa namin !

Para sa aktibidad na ito, gumagamit kami ng aming sariling pasadyang robot, ngunit gagana ito sa anumang robot na gumagamit ng katulad na driver ng motor, tulad ng isang L9110s.

Ang mga file ng disenyo para sa aming robot ay matatagpuan dito:

Ang gabay na ito ay nakasulat para sa mga nagsisimula, ngunit kung hindi ka pa nakakagamit ng isang micro: kaunti sa MicroPython dati, inirerekumenda naming subukan mo muna ang isang mas simpleng programa, tulad ng aming pangalan na badge na Maaaring turuan: https://www.instructables.com/id/Felt -Microbit-Nam…

Mga gamit

2x BBC micro: kaunti

Robot na gumagana sa isang BBC micro: bit (tingnan ang paliwanag sa itaas)

joystick: bit controller (nakuha namin ang aming mula sa Cool Components)

Hakbang 1: Pag-set up ng Robot

Mayroon kang ilang mga pagpipilian para sa pagsulat ng MicroPython code para sa iyong micro: bit:

  • Mu, na maaari mong i-download at mai-install mula dito:
  • Ang online editor, na maaari mong makita dito:

Ipinapalagay ng mga tagubiling ito na gumagamit ka ng Mu

Buksan ang Mu, at isaksak ang iyong micro: bit sa iyong computer. Dapat kilalanin ng Mu na gumagamit ka ng isang micro: bit at piliin ang micro: bit 'Mode', ngunit kung hindi, baguhin ito nang manu-mano.

pumili mode
pumili mode

Kumuha ng isang kopya ng robot motor test code mula dito:

Kung hindi ka sanay sa Github, maaari itong maging hindi nakakaintindi! Dalawang madaling paraan upang makuha ang code na ito ay:

  1. I-save ang Raw file sa iyong computer, pagkatapos i-load ito sa Mu:
  2. Kopyahin at i-paste ang lahat ng ibinigay na code sa isang Bagong file sa Mu.
makatipid ng hilaw na file
makatipid ng hilaw na file

Ngayon i-click ang pindutang 'Flash' mula sa toolbar ng Mu, upang maipadala ang iyong bagong code sa micro: bit.

Hindi ito gagana maliban kung ang micro: bit ay naka-plug in

Ang dilaw na ilaw sa likod ng micro: magsisimula ang pag-flash ng kaunti. Kapag natapos na ito, ang iyong code ay nailipat.

SETTING-UP ANG MGA DIREKSYON NG MOTOR

Ang program na ito ay i-on ang mga motor sa iba't ibang direksyon kapag pinindot mo ang pindutang 'A' sa micro: bit.

Ang nais mong mangyari ay:

  • Kapag ang 'A' ay ipinakita, iniwan ang motor pasulong
  • Kapag ipinakita ang 'B', iniwan ang motor paatras
  • Kapag ipinakita ang 'C', tamang motor pasulong
  • Kapag ang 'D' ay ipinakita, kanang motor paatras

Marahil ay hindi ito ang magiging kaso, dahil depende ito sa kung paano mo na-wire ang iyong robot!

Sa tuktok ng code, makakahanap ka ng isang listahan ng mga variable, na tumutukoy sa aling pin sa micro: kontrol ng bit kung aling direksyon ng motor.

Kung gumagamit ka ng isa sa aming mga robot (file), palitan ang mga variable na pangalan sa paligid upang ilipat ang robot sa mga tamang direksyon:

magpalitan ng mga variable ng pin
magpalitan ng mga variable ng pin

Kung gumagamit ka ng isang robot na iyong sarili, suriin kung aling mga pin ang nakakonekta sa driver ng motor bago i-edit ang code.

PAGSUSULIT SA DRIVE

Ngayon suriin kung paano nagmaneho ang iyong robot sa pamamagitan ng pagpapalit ng test code sa pangunahing loop ng ilang sariling code.

Sasabihin mo sa robot na magmaneho sa pamamagitan ng pagtawag sa drive () na pagpapaandar. Tumatagal ito ng dalawang mga argumento - isang halaga para sa kaliwang motor at isang halaga para sa tamang mga motor, sa pagitan ng 0 (off) at 1023 (max na bilis).

Sa pamamagitan ng pagtawag sa drive (500, 500), halimbawa, sinasabi mo sa parehong mga motor na i-on, sa pasulong na direksyon, halos kalahating bilis.

Subukan ang ilang mga pagpipilian upang makakuha ng isang pakiramdam para sa kung paano diretso ito drive at kung gaano kahusay ito lumiliko.

Pahiwatig: ang mga pagsubok sa motor ay nasa loob ng pareho habang True loop, at isang pahayag kung - ang mga motor ay hindi liliko hanggang sa pinindot mo ang A button sa micro: bit, at tuluyan nitong tinitingnan kung pinindot mo ang isang pindutan.

Pahiwatig: ang mga motor ay hindi papatayin hanggang sa sabihin mo sa kanila na! Palagi silang magpapatuloy na gawin ang kanilang huling tagubilin.

OPSYONAL: PAGPAPATINGO NG pagmamaneho SA ISANG LIKAS NA LINYA

Kung ang iyong robot ay hindi magmaneho sa isang tuwid na linya, ang isa sa iyong mga motor ay maaaring maging mas mabilis kaysa sa isa pa.

Matapos suriin na walang pisikal na humihinto sa gulong mula sa malayang pag-on, maaari mong i-edit ang code sa pagpapaandar ng drive upang mabawasan ang bilis ng mas mabilis na motor.

Mag-scroll pataas upang makita ang kahulugan ng pagpapaandar ng drive, at tingnan ang nangungunang dalawang tagubilin:

def drive (L, R):

# Nasa ibaba ang isang pagsasaayos upang iwasto para sa pagkakaiba-iba ng bilis ng motor L = int (L * 1) R = int (R * 1)

Ang dalawang linya na ito ay kasalukuyang kinukuha ang halaga ng L at R, i-multiply ang mga ito ng 1, pagkatapos ay tiyakin na sila ay buong bilang (int) pa rin.

Halimbawa, kung ang iyong kaliwang motor ay mas mabilis, baguhin ang * 1 sa linya nito sa * 0.9, at tingnan kung nagpapabuti ng mga bagay.

Hindi mo magagawang gawin itong perpekto, ngunit maaari mong panatilihin ang pagsasaayos hanggang sa magmaneho ito ng mas mahigpit.

SETTING-UP ANG RADIO

I-set up na ngayon ang radyo, sa pamamagitan ng pagdaragdag ng mga sumusunod na linya sa tuktok ng iyong code:

mag-import ng radyo

radio.config (channel = 7, group = 0, pila = 1) radio.on ()

Papayagan nitong makatanggap ang iyong robot ng mga tagubilin mula sa isa pang micro: bit, ngunit sa ngayon ay makakatanggap ito ng mga tagubilin mula sa anumang iba pang micro: bit.

Ito ay dahil ang channel 7 at pangkat 0 ang mga default na channel.

Baguhin ang mga numerong ito, pagpili ng isang channel sa pagitan ng 0-82 at isang pangkat sa pagitan ng 0-255. Ngayon ang iyong micro: bit ay makakatanggap lamang ng mga tagubilin mula sa iba na may parehong impormasyon sa pagsasaayos.

ang pila = 1 ay nangangahulugang ang micro: kaunti ay mananatili lamang ng isang papasok na mensahe sa bawat oras - nagbibigay ito ng isang bahagyang mas mabilis na oras ng pagtugon kaysa sa default, na kung saan ay 3.

Ngayon ay kailangan mong i-edit ang iyong pangunahing loop code, sa halip na magpatakbo ng mga tagubilin kapag pinindot mo ang isang pindutan, maghintay para sa isang papasok na mensahe sa radyo at tumutugon nang naaangkop.

Subukan ang sumusunod na code bilang isang pagsubok (hindi ito gagawa ng anumang bagay hanggang sa mai-set up mo ang joystick sa Hakbang 2):

habang Totoo:

mensahe = radio.receive () kung mensahe == 'pasulong': drive (500, 500)

Hakbang 2: Pag-set up ng Joystick

I-unplug ang micro ng iyong robot: bit, at isaksak ang micro ng iyong Joystick sa halip

Kumuha ng isang kopya ng code ng pag-set up ng joystick mula dito:

I-set up ang radyo gamit ang parehong pagsasaayos (channel at numero ng pangkat) tulad ng ginawa mo para sa robot - papayagan nitong makipag-usap ang dalawa.

Sa pagtatapos ng programa, simulan ang iyong pangunahing loop:

habang Totoo:

kung button_a.was_pressed (): radio.send ('pasulong')

Ang code na ito ay hindi pa gumagamit ng joystick: kaunti. Gumagamit ito ng pindutan A sa micro: bit upang magpadala ng isang mensahe.

Tiyaking kapwa ang iyong robot at ang iyong micro control: ang mga bit ay may lakas, pagkatapos ay pindutin ang pindutan upang maipadala ang iyong mensahe.

Kung matagumpay na natanggap ang mensahe, at gumagalaw ang iyong robot … mahusay! Tapos ka na sa mga tagubilin sa pag-set up.

MGA TIP NG TROUBLESHOOTING

Kung nakakuha ka ng isang mensahe ng error sa iyong micro control: kaunti… i-debug ang iyong code ng controller

Kung nakakuha ka ng isang mensahe ng error sa iyong robot micro: kaunti … matagumpay na naipadala ang iyong mensahe sa radyo! Ngunit hindi ito maintindihan ng robot, kaya suriin kung ang mensahe na iyong ipinadala, at ang mensahe na sinabi mo sa robot na makinig para sa tugma.

Kung wala man lang nangyari

  • Tiyaking na-flash mo ang tamang code sa bawat micro: bit - madali itong aksidenteng i-flash ang maling isa!
  • Tiyaking tumutugma ang iyong mga numero sa channel at pangkat sa bawat micro: bit

Hakbang 3: Sinusuri ang Mga Halaga ng Joystick

Ang susunod na ilang mga hakbang ay ang lahat gamit ang code ng controller

Bago mo magamit ang joystick sa iyong controller, kailangan mong malaman kung anong mga uri ng mga halaga ang makukuha mo kapag pinilit mo ang stick.

Palitan ang iyong pangunahing loop ng sumusunod na code:

habang Totoo:

joystick = joystick_push () print (joystick) pagtulog (500)

I-flash ang code na ito sa iyong micro: bit, pagkatapos ay i-click ang REPL button sa toolbar ng Mu. Bubuksan nito ang isang terminal sa ilalim ng editor, na magbibigay sa iyo ng isang real-time na link sa micro: bit.

buksan ang REPL
buksan ang REPL

Hindi ito gagana maliban kung ang micro: bit ay naka-plug in

Sa pagbukas ng REPL, pindutin ang pindutan ng pag-reset sa likod ng iyong micro: bit.

Larawan
Larawan

Dapat mong makita ang ilang mga halagang magdala ng 'naka-print' sa iyong screen:

mga halaga sa terminal
mga halaga sa terminal

Itulak ang stick ng joystick at tingnan kung ano ang nangyayari sa mga numero.

Gumawa ng isang tala ng mga halagang ibinigay kapag ang joystick ay nasa gitnang posisyon - sa aking kaso (518, 523).

I-click muli ang button na REPL sa toolbar ng Mu upang isara ito - hindi mo mai-flash ang bagong code sa micro: kaunti habang bukas ito.

Hakbang 4: Pagsasaayos ng Mga variable ng X at Y

Nais mong baguhin ang mga halagang ibinigay ng function ng joystick, upang:

  • sa gitna ito ay zero
  • up ay positibo
  • down ay negatibo.

Tumutugma ito sa mga tagubilin na kailangan ng robot - isang positibong numero upang magmaneho ng pasulong, at isang negatibong numero upang magmaneho paatras.

Tingnan ang mga numero na nakuha mo sa huling hakbang. Ang unang numero ay x, at ang pangalawang numero ay y.

I-edit ang kahulugan ng joystick_push () na nasa programa na, upang mabawasan ang iyong mga halaga mula sa orihinal:

def joystick_push ():

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

Gumamit ng iyong sariling mga numero, maaaring magkakaiba ang mga ito sa minahan

I-flash ang iyong bagong code, buksan ang REPL, pindutin ang pindutan ng pag-reset ng micro: bit at suriin ang iyong mga halaga.

Nakakakuha ka ba ng (0, 0)?

Hakbang 5: Pag-convert ng X at Y Sa Mga Halaga para sa Kaliwa at Kanan na Mga Motors

Sa ngayon, ang joystick na ito ay hindi magiging lubhang kapaki-pakinabang upang magmaneho ng isang robot. Itinulak sa lahat ng paraan, makakakuha ka ng isang halaga tulad ng (0, 500).

Kung ibigay mo ang mga numerong ito sa robot, bubuksan nito ang tamang motor ngunit hindi ang kaliwa, na hindi kung ano ang nais mong mangyari!

Ipinapakita ng diagram na ito kung ano ang nangyayari sa mga halagang x at y kapag inilipat mo ang joystick, at kung ano ang nais naming gawin ng robot kapag inilipat mo ang joystick.

diagram
diagram

Kailangan mong gumamit ng ilang matematika upang ihalo ang mga halagang x at y, upang mabigyan ka ng isang bagay na mas kapaki-pakinabang.

n

ANG MATHS

Magsimula tayo sa pamamagitan ng pagtulak ng joystick sa lahat ng paraan.

Ang isang halimbawa ng mga halagang maaari mong makuha ay:

x = 0

y = 500

Upang maging kapaki-pakinabang sa robot, nais mong makakuha ng mga halagang tulad nito:

kaliwa = 500

kanan = 500

Subukan nating idagdag ang x at y sa iba't ibang mga paraan upang makita kung anong mga numero ang makukuha natin:

x + y = 0 + 500 = 500

x - y = 0 - 500 = -500 y + x = 500 + 0 = 500 y - x = 500 - 0 = 500

Tingnan natin kung ano ang mangyayari kung itulak natin ang joystick hanggang sa kanan.

Ang isang halimbawa ng mga halagang maaari mong makuha ay:

x = 500

y = 0

Upang gawing kanan ang robot, nais mo ang kaliwang motor na magmaneho, at ang tamang motor na magmaneho paatras:

kaliwa = 500

kanan = -500

Subukan nating muli ang aming pormula:

x + y = 500 + 0 = 500

x - y = 500 - 0 = 500 y + x = 0 + 500 = 500 y - x = 0 - 500 = -500

Ihambing ang dalawang hanay ng pormula upang mag-ehersisyo kung aling pagpipilian ang magbibigay sa iyo ng tamang kaliwang halaga, at kung aling pagpipilian ang magbibigay sa iyo ng tamang tamang halaga.

Subukan ito sa ilan sa mga halagang nakukuha mo mula sa iyong sariling joystick, upang matiyak na ang pormula na iyong pinili ay gumagana sa lahat ng oras.

n

Pagpapalawak ng JOYSTICK FUNCTION

Palawakin at i-edit ang function ng joystick upang makagawa ng dalawang bagong variable para sa kaliwa at kanan, at ibalik ang mga halagang iyon sa halip na x at y:

def joystick_push ():

x = pin0.read_analog () - 518 y = pin1.read_analog () - 523 kaliwa = kanan = bumalik sa kaliwa, kanan

I-flash ang iyong bagong code, buksan ang REPL, pindutin ang pindutan ng pag-reset ng micro: bit at suriin ang iyong mga halaga.

Nakukuha mo ba ang mga halagang inaasahan mo?

Kung kailangan mo ng karagdagang tulong, tingnan ang aming halimbawa ng code dito:

Hakbang 6: Pagpapadala ng Mga Halaga Bilang Mga Mensahe sa Radyo

Ngayon mayroon kang ilang mga halagang handa nang ipadala sa iyong robot.

I-edit ang iyong pangunahing loop, upang suriin nito ang mga halaga ng joystick, ngunit pagkatapos sa halip na i-print ang mga halaga, handa silang ihatid bilang isang mensahe sa radyo.

habang Totoo:

joystick = joystick_push () message = str (joystick [0]) + "" + str (joystick [1])

Hindi pa talaga ito magpapadala ng mensahe!

Ano ang nangyayari sa bagong linya ng code na ito?

  • Ang ibig sabihin ng joystick [0] ay ang unang kaunting impormasyon na lumalabas sa pagpapaandar ng joystick (kaliwa)
  • Ang joystick [1] ay ang susunod na impormasyon (kanan)
  • Ang str () ay binago ang pareho sa mga numerong ito sa format ng string (teksto sa halip na mga numero) - kinakailangan upang maipadala ang impormasyon sa radyo.

Magagamit mong makita ang + nangangahulugang karagdagan - maaari itong parehong magdagdag ng mga numero nang magkakasama at magkakasabay na mga string, na nangangahulugang ididikit nito ang dalawang piraso ng impormasyon.

Halimbawa:

150 + 100 = 250

str (150) + str (100) = 150100

Kaya't ang pagdudugtong ay magdidikit ng iyong kaliwa at kanang mga halaga.

Upang mapuwersa ang isang paghihiwalay sa pagitan ng dalawang piraso ng impormasyon (upang malaman ng robot na sila ay dalawang piraso ng impormasyon), pagsamahin ang isang labis na string sa pagitan nila gamit ang "". Ang mga marka ng pagsasalita sa paligid ng espasyo ay nangangahulugan na ito ay isang string.

Panghuli, palawakin ang iyong code upang maipadala ang bagong nilikha na mensahe sa radyo:

radio.send (mensahe)

tulog (10)

Ang pagtulog ay nagpapabagal sa pagpapadala ng mga mensahe upang ang pagtanggap ng micro: medyo hindi masyadong mag-overload ng labis na impormasyon!

I-flash ang code na ito sa iyong micro control: bit at i-debug ang anumang mga error bago lumipat sa susunod na hakbang

Hakbang 7: Pagtanggap ng Mga Mensahe sa Iyong Robot

Bumalik sa iyong robot code mula sa simula - tandaan na i-unplug ang iyong micro control: kaunti upang hindi mo sinasadyang i-flash ang robot code dito

Mag-scroll pababa sa iyong pangunahing loop - alisin ang code ng pagsubok at idagdag ito sa halip:

habang Totoo:

mensahe = radio.receive () print (mensahe) pagtulog (100)

Nagtatakda ito ng isang variable na katumbas ng papasok na mensahe, at inililimbag ang mensahe sa REPL - upang suriin na ang mga mensahe ay dumarating sa inaasahan.

I-flash ang iyong bagong code, konektado sa REPL, pagkatapos ay itulak ang joystick.

Dapat kang makakuha ng isang bagay tulad nito:

Mga halaga ng REPL
Mga halaga ng REPL

MGA TIP NG TROUBLESHOOTING

Kung nakakuha ka ng isang mensahe ng error sa iyong micro control: kaunti… i-debug ang iyong code ng controller

Kung nakakuha ka ng isang mensahe ng error sa iyong robot micro: kaunti … matagumpay na naipadala ang iyong mensahe sa radyo! Ngunit hindi ito maintindihan ng robot, kaya suriin kung ang mensahe na iyong ipinadala, at ang mensahe na sinabi mo sa robot na makinig para sa tugma.

Kung wala man lang nangyari

  • Tiyaking na-flash mo ang tamang code sa bawat micro: bit - madali itong aksidenteng i-flash ang maling isa!
  • Tiyaking tumutugma ang iyong mga numero sa channel at pangkat sa bawat micro: bit

Hakbang 8: Gamit ang Mga Papasok na Mensahe upang Makontrol ang Mga Motors ng Robot

Nakakakuha ka na ngayon ng dalawang numero na ipinapadala sa radyo bilang isang string.

Kailangan mong hatiin ang mensaheng ito sa dalawang mga string, pagkatapos ay i-convert muli ang mga string sa mga numero, at ipasa ito sa pagpapaandar ng drive. Maraming nangyayari nang sabay-sabay!

Bago gawin ito, kailangan mong suriin kung ang mensahe na iyong natatanggap ay nasa tamang format.

Kung walang ipinadadalang mensahe, makakatanggap ka ng 'Wala' sa halip. Kung susubukan mo at hatiin ito, makakakuha ka ng isang mensahe ng error.

habang Totoo:

message = radio.receive () kung ang mensahe ay wala: message = message.split () drive (int (message [0]), int (message [1]))

Ano'ng nangyayari dito?

  • Tatakbo ang bagong code kung ang mensahe ay anupamang iba sa 'Wala'.
  • Ang message.split () ay sumusuri para sa isang puwang sa mensahe (na idinagdag namin sa huling hakbang), at ginagamit ito upang hatiin ang mensahe sa dalawa.
  • Ang int (mensahe [0]), int (mensahe [1]) ay gumagawa ng kabaligtaran ng ginawa namin sa nakaraang hakbang - kinukuha ang bawat piraso ng impormasyon nang paisa-isa at binago ito sa isang integer (isang buong numero).
  • Ang int (mensahe [0]) ay ginagamit bilang halaga para sa kaliwang motor sa pagpapaandar ng drive, at ang int (mensahe [1]) ay ginagamit bilang halaga para sa tamang motor.

Suriin na gumagana ito - lumiliko ba ang mga motor kapag itinulak mo ang joystick?

Kung hindi - oras para sa ilang pag-debug!

Kung oo, kamangha-manghang! Mayroon kang isang gumaganang robot ng remote control!

Gumugol ng ilang oras sa pagsasanay sa iyong robot bago magpatuloy sa susunod na hakbang. Naghahatid ba ito sa paraang inaasahan mo?

Ipapakita sa iyo ng mga susunod na hakbang kung paano gamitin ang mga pindutan sa joystick upang magdagdag ng labis na pag-andar sa iyong robot

Kung nais mong makita ang aming bersyon ng code na ito sa ngayon:

  • Robot:
  • Controller:

Hakbang 9: Paggamit ng Mga Pindutan - Pagtanggap ng Mga Karagdagang Mensahe

Sa ngayon, susubukan ng iyong code na hatiin ang anumang mensahe na wala. Nangangahulugan ito na kung makakatanggap ito, halimbawa, 'hello', makakakuha ka ng isang mensahe ng error.

Upang pahintulutan ang iyong micro: kaunti upang bigyang kahulugan ang iba pang mga mensahe, kakailanganin itong suriin muna ang bawat inaasahang mensahe, pagkatapos ay hatiin lamang ang mensahe kung hindi ito sinabihan na gumawa ng anupaman dito.

Palawakin ang iyong code tulad nito:

kung ang mensahe ay hindi Wala:

kung ang mensahe == 'hello': display.show (Image. HAPPY) elif message == 'duck': display.show (Image. DUCK) iba pa: message = message.split () drive (int (message [0]), int (mensahe [1]))

Una, susuriin nito kung nakatanggap ito ng mensahe na 'hello'. Kung mayroon ito, magpapakita ito ng isang masayang imahe, pagkatapos ay bumalik sa tuktok ng loop at suriin para sa susunod na mensahe.

Kung ang mensahe ay hindi hello, susundan nitong susuriin kung ang mensahe ay 'pato'.

Kung ang mensahe ay hindi alinman sa 'hello' O 'pato, gagawin nito ang huling bagay sa listahan, na hinati ang mensahe at i-on ang mga motor. Hindi nito susubukan na hatiin ang mensahe kung nakatanggap ito ng 'hello' o 'pato', nangangahulugang hindi ka makakatanggap ng isang mensahe ng error mula sa alinman sa dalawang mensahe na ito.

Ang dobleng katumbas na pag-sign ay mahalaga - nangangahulugang 'katumbas ng', kumpara sa isang solong katumbas na pag-sign, na nagtatakda ng isang bagay (kaya ang mensahe = 'hello' ay nangangahulugang itinatakda namin ang variable sa 'hello', mensahe == 'hello' nangangahulugang tinatanong natin kung ang mensahe ay katumbas ng 'hello').

Subukan ito sa pamamagitan lamang ng dalawang mga pagpipilian sa ngayon, upang subukan ito - maaari kang magdagdag ng maraming iba pang mga mensahe hangga't gusto mo sa paglaon.

Link sa nagtatrabaho code:

Hakbang 10: Pagpapadala ng Mga Karagdagang Mensahe Gamit ang Mga Pindutan ng Controller

I-unplug ang micro ng iyong robot: bit, at isaksak ang micro ng iyong Joystick sa halip

Bumalik sa iyong code ng kontrol upang mag-edit.

Katulad ng robot code, nais naming suriin ng tagapamahala kung sinusubukan mong magpadala ng anumang iba pang mga mensahe, bago ipadala ang mga halaga ng joystick.

Sa tuktok ng loop, nais pa rin naming suriin ang kasalukuyang mga halaga ng joystick, ngunit nais din naming suriin kung ang isang pindutan ay kasalukuyang pinindot:

habang Totoo:

joystick = joystick_push () button = button_press ()

Ang button_press () ay nagbabalik ng halagang A, B, C, D, E o F depende sa kung aling pindutan ang kasalukuyang pinindot (kung walang pipilitan, ibabalik nito ang Wala).

Ngayon ay maaari kaming gumawa ng isang if-elif-else na pahayag, tulad ng ginawa namin para sa robot code - gamit ang dalawang mga pindutan, at pagpapadala ng halaga ng joystick kung walang pinindot na pindutan.

kung pindutan == 'A':

radio.send ('hello') sleep (500) elif button == 'B': radio.send ('pato') pagtulog (500) iba pa: message = str (joystick [0]) + "" + str (joystick [1]) radio.send (mensahe) pagtulog (10)

Kapag pinindot ang isang pindutan, ipadala ang isa sa mga mensahe na sinabi mo sa robot na abangan sa nakaraang hakbang.

Ipapadala ang mensahe tuwing pinipindot ang pindutan, at ang mga computer ay mas mabilis kaysa sa mga tao! Kaya't maaaring maipadala nito ang mensahe nang maraming beses bago mo pa nagawang alisin ang iyong daliri sa pindutan.

Ang pagtulog pagkatapos ipadala ang mensahe ay nagpapabagal nito, upang hindi nito masuri nang mabilis ang pindutan - subukan ang ilang mga numero dito upang makuha ang perpektong dami ng oras para sa iyo - masyadong mabagal at hindi rin ito tumutugon. mabilis at makakatanggap ang iyong robot ng napakaraming mga mensahe sa pindutan na maaaring ihinto nito ang pagtugon sa joystick!

Gumagana ba?

Kung nakakakuha ka ng mga mensahe ng error, pag-isipang mabuti kung ano ang iyong nabago, at kung ano ang nangyayari.

Kung nakakuha ka ng isang error sa robot kapag pinindot mo ang isang pindutan sa iyong controller - alam mo na ang mensahe ay tumatawid, ngunit nakalilito ang robot. Suriin na ang mensahe na iyong ipinadala, at ang mensahe na sinabi mo sa robot na hanapin ay pareho.

Link sa nagtatrabaho code:

Hakbang 11: Susunod na Mga Hakbang

Mayroon ka na ngayong kaalaman na kailangan mo upang gumana sa mga motor ng iyong robot, at sa iyong joystick: bit controller

Gamitin ang kaalamang ito upang mapabuti ang dalawang mga programa at gawin ang iyong sarili. Ang ilang mga ideya sa ibaba!

Mayroon kang anim na mga pindutan sa iyong controller! Ano ang gusto mong gawin nila?

  • Paano ang tungkol sa pagprograma ng isang gawain sa sayaw para sa iyong robot na gawin sa utos? Sumulat ng isang algorithm ng mga utos ng drive (), pinaghiwalay ng mga utos ng pagtulog ()!
  • Nais mo bang baguhin ang direksyon na gumagalaw ng robot upang madali itong mag-drive ng baligtad? Isipin ang tungkol sa mga halagang x at y ng iyong joystick. Ano ang kinakatawan nila at paano mo sila mapagagawa?
  • Mayroon bang (o maaari kang magdagdag ng iyong robot) ng karagdagang mga tampok tulad ng LEDs, isang speaker o sensor?

Mga ideya upang mapabuti ang code

  • Matutulungan mo ba ang iyong robot na makayanan ang mga hindi kilalang mensahe sa pamamagitan ng paggamit ng subukan / maliban sa code?
  • Ang mga matematika na ginamit upang makalkula ang kaliwa at kanang halaga mula sa joystick ay hindi nagbibigay sa amin ng buong saklaw ng mga halaga (ang robot na drive ay maaaring tumanggap ng isang numero hanggang sa 1023). Maaari mo bang i-edit ang code na ito upang makakuha ng isang mas mahusay na saklaw?
  • Mayroong iba pang mga pamamaraan ng paghahalo ng mga halaga ng joystick - maaari kang magkaroon ng isang mas mahusay na paraan ng paggawa nito?

Inirerekumendang: