Robottiohjelmoinnin harjoitustyö : Bluetooth
Bluetooth
Bluetooth on joskus hieman ongelmallinen, mutta jos onni on myötä, kaikki saattaa sujua näinkin hyvin:
Paritus
1. Varmista, että Bluetooth näkyy:
2. Laita NXT:n Bluetooth-asetuksista näkyvyys päälle ja varmista "Change PIN"-kohdasta, että pin-koodi on asetettu 0000:ksi (suoraviivaisinta). Valitse Set up new device...
3. Odota kunnes NXT löytyy:
4. Avaa PIN options ja valitse Fixed PIN '0000'
5. Aloita pariutuminen painamalla Forward. Jos kaikki meni hyvin, seuraavanlainen ruutu ilmestyy:
6. Kun NXT on paritettu, voidaan sille lähettää ohjelmia ja käskyttää ilman USB-johtoa, testata voi vaikka ohjelmalla nxjcontrol:
NXT-NXT -paritus
Kytke molempien palikoiden bluetooth päälle Bluetooth-valikosta, sitten:
- Ensimmäisellä palikalla, aseta/tarkista PIN-koodi kohdasta Bluetooth → Change PIN. Kun paritusyritys tapahtuu, tällä koodilla NXT vastaa.
- Toisella palikalla, valitse Bluetooth → Search and Pair → valitse löydetty NXT → Pair → valitse sama koodi jonka asetit ensimmäiseen palikkaan. Ruudulle pitäisi tulla
Paired!
Jos/kun vaihdat bluetooth-nimen, poista tiedosto ~/nxj.cache, jotta ohjelmat kuten nxjbrowse etsivät NXT:t uusilla nimillään.
Kahden NXT:n välinen Bluetooth-kommunikaatio
Kun palikat on paritettu keskenään, voidaan niitä hyödyntää eri tavoin.
Toinen NXT kauko-ohjauksessa
Toisen NXT:n käyttäminen ikään kuin päärobotin jatkeena on yksinkertaista. Luokka RemoteNXT mahdollistaa toisen yksikön moottori- ja sensoriporttien käyttämisen kuin ne olisivat paikallisia portteja. Käskytettävään yksikköön ei tarvita erityistä ohjelmaa - komentoyhteyden kuuntelu kuuluu leJOSin toimintoihin. Huomattavaa on (tutoriaalista): Currently, the class is limited and I2C and RCX sensors are not supported, and the motors must be used in a simple way as the regulation thread is not used. Kannattaa myös ottaa viive (sekunnin osia) huomioon.
Esimerkki ohjelmasta, joka tulostaa toisen NXT:n sensoriarvoja ja liikuttaa sen moottoria:
import java.io.IOException; import lejos.nxt.*; import lejos.nxt.comm.*; import lejos.nxt.remote.*; public class Remote { } catch (IOException ioe) { // ala liikuttamaan etäyksikön moottoria A while(!Button.ENTER.isPressed()) { } } |
Viestien vaihtaminen
Sen sijaan, että toinen robotti olisi passiivisesti käskytettävänä, voidaan bluetoothilla lähettää viestejä myös itsenäisten yksiköiden välillä. Yhteydelle voidaan avata DataInputStream ja DataOutputStream, joista luetaan ja joihin kirjoitetaan arvoja. Kommunikaatiota varten voi olla tarpeen kehittää jonkinlainen protokolla roboteille.
Simppeli ping-ohjelma, jonka alussa voi valita toimiiko kuuntelevana vai yhteyden aloittavana osapuolena, kätevä parituksen onnistumisen testaamiseen:
import java.io.*; import java.util.Vector; import javax.bluetooth.RemoteDevice; import lejos.nxt.Button; import lejos.nxt.comm.*; public class Ping { // boolean-arvo initiate määrittää, aloitetaanko NXTConnection conn; if(initiate) { if(conn == null) { } // lähetellään edestakaisin dataa public static void main(String[] args) { while(selection != 8 && selection != 1) |
Laita kuunteleva osapuoli valmiuteen ennen kuin toinen osapuoli muodostaa yhteyden.
PC:n ja NXT:n välinen Bluetooth-kommunikaatio
Suorita ensin paritus tietokoneen ja NXT:n välillä.
Esimerkkikoodissa yhteys muodostetaan niin, että NXT odottaa PC:n ottavan yhteyden siihen, minkä jälkeen NXT voi pyytää PC:tä joko vastaanottamaan tai lähettämään tietoja.
- PC käyttäytyy NXT:n palvelijana.
Luokka RfcommPC on PC:llä ajettava ohjelma (käännä javac:llä), joka ottaa komentoriviparametrina NXT:n bluetooth-nimen, johon muodostaa yhteyden. RfcommTest on NXT:llä ajettava testiohjelma, joka lähettää taulukon tietokoneelle ja pyytää siitä prosessoidun version takaisin. Rfcomm on NXT:lle luokka, joka tekee yhteyden käyttämisestä helppoa.
Huom.! Ilmeisesti leJOSin jar-tiedostoissa on päällekkäinen nimi lejos.nxt.NXT tiedostoissa classes.jar ja pccomms.jar. Jotta RfcommPC toimii, ota CLASSPATHista classes.jar pois.
NXT-osapuoli
Esimerkki (RfcommTest):
import lejos.nxt.Button;
public class RfcommTest { // lähetä koneelle // lue koneelta |
PC-osapuoli
Katso luokan RfcommPC koodia, etenkin listen()-metodia, jossa NXT:n käskyihin vastataan.
Käynnistä ensin NXT:n ohjelma odotustilaan ja sitten:
java RfcommPC "NXT" |
Missä NXT
on palikkasi bluetooth-nimi. Esimerkissä RfcommPC tulostaa sille NXT:n lähettämät tiedot ja vastaa pyyntöihin lähettämällä näistä muokatun taulukon.
Esimerkissä NXT lähettää PC:lle taulukon [1,2,3] ja pyytää PC:ltä taulukon, johon PC vastaa [21,22,23].
Lisätietoa
- Bluetooth-tutoriaali
- Tutoriaali aiheesta NXT-NXT
- Vanhojen kurssisivujen paritusohje - voi olla hyödyksi jos ei tunnu toimivan