onsdag den 19. januar 2011

NXT Programming, lesson 16

Dato: 4-1-2010
Varighed: 4 timer
Deltagere: Nick og Allan

Formål:


At få bluetooth forbindelsen mellem Android 2.2 telefonen (Nexus One) og NXT-enheden så det er muligt at sende informationer fra telefonen til legorobotten. Hermed kan telefonen ses som en sensor som robotten bruger til at "se" med.

Plan:
Få oprettet forbindelse mellem NXT'en og telefonen vha. bluetooth.

Bluetoothforbindelsen:
At oprette en direkte bluetoothforbindelse mellem en androidenhed og en Lego NXT med LeJOS var absolut ikke nogen let løst opgave, da dokumentationen i begge systemers API'er i høj grad kan opfattes som værende mangelfuld. For det første beskrev LeJOS API'en ikke at for at komme i kontakt med NXT'en skal der benyttes en helt bestemt unikt session id til bluetooth forbindelsen, som efter noget søgen viste sig at være: "00001101-0000-1000-8000-00805F9B34FB"(http://lejos.sourceforge.net/forum/viewtopic.php?t=1991&sid=6b5c1c11d3e2a2ddb82e18706d5622d9).

For det andet tog det noget tid at finde ud af hvordan man fik LeJOS til at forstå det byte-array som android sendte over bluetooth forbindelsen. Vi endte med en løsning, hvor et byte-array gemmes for derefter at blive konverteret til en streng, så der kan arbejdes med den:

DataInputStream dis = btc.openDataInputStream();
byte[] b = new byte[1000];
dis.read(b);
String a = new String(b);

Denne løsning sætter selvfølgelig en øvre grænse på længden af beskederne, men da der i forvejen er en sådan restriktion indbygget i bluetooth protokol implementationen i LeJOS, er 1000 nok. Vi skal dog finde ud af præcis hvad denne restriktion er.

Sidst men ikke mindst skulle følgende parameter benyttes på NXT'en i waitForConnection(): NXTConnection.RAW for at gøre det muligt at NXT'en kunne læse andoid telefonens byte array.

Resultat:
Der er oprettet en bluetooth forbindelse mellem telefonen og NXT'en som sender en pixel række hvert 200 ms.

Ingen kommentarer:

Send en kommentar