Home
        Design of a Bluetooth Enabled Android Application
         Contents
1.                               6 1 Table of the first 128 Characters of the ASCII Code  Table 4   First 128 Characters of the ASCII code   Decimal BIN Symbol Description Decimal BIN Symbol Description  0 0 NUL Null char 64 1000000   At symbol  1 1 SOH Start of Heading 65 1000001 A Uppercase A  2 10 STX Start of Text 66 1000010 B Uppercase B  3 11 ETX End of Text 67 1000011 C Uppercase C  4 100 EOT End of Transmission 68 1000100 D Uppercase D  5 101 ENQ Enquiry 69 1000101 E Uppercase E  6 110 ACK Acknowledgment 70 1000110 F Uppercase F  7 111 BEL Bell 71 1000111 G Uppercase G  8 1000 BS Back Space 72 1001000 H Uppercase H  9 1001 HT Horizontal Tab 73 1001001 l Uppercase    10 1010 LF Line Feed 74 1001010 J Uppercase J  11 1011 VT Vertical Tab 75 1001011 K Uppercase K  12 1100 FF Form Feed 76 1001100 L Uppercase L  13 1101 CR Carriage Return 77 1001101 M Uppercase M  14 1110 SO Shift Out   X On 78 1001110 N Uppercase N  15 1111 SI Shift In   X Off 79 1001111 o Uppercase O  16 10000 DLE Data Line Escape 80 1010000 P Uppercase P  17 10001 DC1 Device Control 1  oft  XON  81 1010001 Q Uppercase Q  18 10010 DC2 Device Control 2 82 1010010 R Uppercase R  19 10011 DC3 Device Control 3  oft  XOFF  83 1010011 S Uppercase S  20 10100 DC4 Device Control 4 84 1010100 T Uppercase T  21 10101 NAK Negative Acknowledgement 85 1010101 U Uppercase U  22 10110 SYN Synchronous Idle 86 1010110 V Uppercase V  23 10111 ETB End of Transmit Block 87 1010111 W Uppercase W  24 11000 CAN Cancel 88 1011000 
2.     I have developed a communication protocol that meets the prescribe definition of a  communication protocol as discussed earlier  Additionally I have implemented said  communication protocol and demonstrate its use in the communication between an  Android powered mobile device and a robotic platform over a Bluetooth connection   Finally I have shown that the communication protocol and its application    implementation produce a responsive user experience that is on par with existing radio    controlled robotic platforms     2  METHODOLOGY IMPLEMENTATION    Developing a communication protocol for use between typical electronic devices and  mobile devices such as tablets and cell phones requires that the foundation and principles    rules i e  the protocol  should be transferable across any platform  However due to the  number of mobile platforms available  Windows  iOS  Blackberry  Android   the  number of data transfer methods  Bluetooth  Peer to Peer Wi Fi  Internet  Cell Network   and the number or electronic devices it would be an extensive task to  demonstrate implement the communication protocol across all of the available  platforms  It would also be a trivial task in that  relatively no unique work would be  required  For the most part it would be a task of translating the code from one language  to another  Instead I plan to demonstrate a communication protocol and the  communication between an android device and a microcontroller over Bluetooth using  only open so
3.     _inputing numerical data    simultaneously  it is necessary to delare another    instance so that      the buffers do not clash  That applies to numerical    parsing only     OBJ  uarts    FullDuplexSerial4port     PUB str port stringptr     109      Send string  repeat strsize stringptr     uarts tx port byte stringptr        PUB strln port strAddr      Print a zero terminated string  str port strAddr   uarts tx port CR     PUB dec port value    i    Print a decimal number    decl port value  10 0     PUB decf port value  width    i    Prints signed decimal value in space padded  fixed width field    decl port value width  1     PUB decx port value  digits    i    Prints zero padded  signed decimal string       if value is negative  field width is digits 1    decl port value digits 2     PUB decl port value digits flag    i  x  digits    1   gt  digits  lt   10    x    value    NEGX  Check for max negative  if value  lt  0  value       value x   If negative  make positive     adjust for max negative    uarts tx port         i    1000 000000    110    if flag  amp  3  if digits  lt  10  less than 10 digits     repeat  10   digits   i   10    yes  adjust divisor    repeat digits   if value   gt  i  uarts tx port value   i    0    value     i  result     elseif  i    1  OR result OR  flag  amp  2   uarts tx port  0     elseif flag  amp  1  uarts tx port        i  10    PUB decDp port value places    divisor   prints out a fixed point number with a decimal  point  places  di
4.    2 1 2 Selecting a Microcontroller and Robotic Platform            ceeeeeeeeeeeeeeee 9   2 1 3 Setting up the Development Environment  Android  amp  Propeller         13   2 2 Communication Protocol and Control Logic Design          ssssessssssessessreseesseese 15  2 2 1 Development of a Communication Protocol        ssssesessessessesseseesesseseese 15   2 2 2 Implementing and Demonstrating the Communication Protocol          17   3     RESULTS AND  DISCUSSION reri ao a A a a AR EEA 26  AS CONCLUSIONS Acnee EE E T E N E ERRE 28  5 REFERENCES roere a ET EA T a E tin E T a E 29  6  APPENDICES murna n a a a a O AAEE RENEE A R ERG 31  6 1 Table of the first 128 Characters of the ASCH Code    cece ceseeteeneereeerees 31   6 2 Android Device User Interface Screen Captures  00       ccecceeseeeseeeteeeteeeseeeees 33   6 3 XML Code for Android User Interface and Context Menus              eeeeeeees 37  6 3 1 Main User Interface XML Cod esis  ss cxigncgatasti tu naeatnnacd aetanas eaves tataens 37    6 4    6 5    6 3 2 Discovered and Connected Bluetooth Device List          eeeeeeteeeeees 38  6 3 3 Display Format of Device Names sy is  gacciteseicaatiesicasieswishdatssdles 39  6 3 4 XML Code for Options Menu seis  sis ciaiicdeccaiess satssmcdantnen 39  6 3 5 String Constants Referenced in the User Interface   00 0    eee eee 40  6 3 6 Android Manifest Files a2  ctetcictes te  diccassashaseateuasiui es cueietaacm seats 40  Java Source Code for Android Device    eeeeceesecetecseeenee
5.    A Speed     B Direction         l Data received by Serial Microcontroller I  I BT module and commands read sends l  l converted to  amp  interpreted by commands to l  I serial commands microcontroller servo motors I  kossn nenna an Nee Robotic Platform y    Figure 15   Level 0 System Block Diagram    2 2 2 1 Implementation of the Communication Protocol on the Android Device    To implement the communication protocol on the Android powered mobile device one  must first create an Android application  In addition to the behind the scenes code that  runs the Android application  which is responsible for taking the users input and  converting it into what will eventually become messages sent via the communication  protocol  a large part of the Android application development is the user interface  To  create the user interface for controlling a wheeled robotic platform I decided to mimic as  closely as possible a standard remote that would be used to control a RC car Figure 16   A vertical scrolling bar will be used to control the speed of the robot  while a similar    horizontal scrolling bar will be used to control the direction of the robot     19    a  Us  BlueTest3       V 50  H 50 Forward Start    Left  Neutral     gt  Neutral        Reverse    Figure 16   Android User Interface for Controlling the Robotic Platform    In addition to the controls of the robotic platform the GUI  Graphical User  Interface  needs to provide the user with a method to search for and connect to
6.   CTS     Clear to send   RTS     Request to send   API     Application programming interface  RC     Radio controlled   SDK     Software development kit   IDE     Integrated development environment    MAC     Media Access Control    LIST OF FIGURES    Figure     Rover Revolution Available from Brookstone  2           cccceccccesceeeeeeseeeseeeeeeees 2  Figure 2   Parallax RN 42 Bluetooth Demo  3           ccecccececeseceseceeeceeeeeceeeeeeeeeeeeeeseecaeens 3  Figure 3   MicroTronics Technologies Mobile Control Robot  4             cceeeeseesseeeteeee 3  Figure 4     World Wide Mobile OS Market Share  5           cceceecceesceeseeceteceeeeeeeeeeseeeeaeens 6  Figure 5   Relative Number of Devices by Platform Number   API level   Code Name  8   sl sagen ae Lak steal laded cs atta de Wo dod Coa A atin    a Secon aac toad dialtone inti 8  Figure 6     Mobile Platform  Samsung Galaxy Note II Running Android 4 3 Ice Cream  SandWIC eico oeie e ciate oO nanan tein A N OM hates e A sack aa 9  Figure 7   ActivityBot Robot Kit  9s ace hagtsca heise 10  Figure 8   Propeller Activity Board  10  a  cs2sciysssaesandexdssaxssans tatvnniaawstantanventaryscteariatoons 11  Figure 9   RN 42 Bluetooth Adapter  11  oo    ccceceseceseceeeeeeseeceeceeeeeeeesseecsseeneenaes 12  Figure 10   Assembled Robotic Platform with Bluetooth Adapter           ce eeeeeeeeeeeees 12    Figure 11   System Wiring Diagram for the Robotic Platform and Bluetooth Adapter   13  Figure 12   Android Environment and Eclipse
7.   Copyright  c   EME Systems and others under MIT licence F     See end of file for terms of use         adapted from pcFullDuplexSerial4fc by Tim Moore 2008       Merged Debug PC  Jon Williams  7      Merged Parallax Serial Terminal numeric input  Jeff Martin        Andy Lindsay  Chip Gracey  T   Woke x      Release Notes          These are methods for string and numeric output and input       using fullDuplexSerial4port  my adaptation of Tim Moore s       pcFullDuplexSerial4fc  In the original these were included       in the main program  but here I have broken them off as pass        through routines  and added string and numeric input methods        These methods are called with reference to a port as defined       when FullDuplexSerial4port is initialized  a   Woke x      Ifyou do want to merge these methods back into the main         object  simply remove all the  uarts   object references      108    Woke x     I made these separate  because for my own work I often use a        completely different set of string  amp  numeric i o methods     Woke x    TEKK K K k kK k k k k k k k K k k k k k k kK k k 8 k K k k k k K K 8 k k K K kK k k k K 8 k k k K K K k k 2K K K k K 2K K K k 2k 2K K 2 2K    CON  FF  12   form feed  CR   13   carriage return  NL  13  MAXSTR_ LENGTH  32   this limits the size of a binary string    that can be entered    VAR  byte str_buffer MAXSTR_LENGTH 1   String buffer for numerical  string input only    This is in VAR space  If multiple cogs will be
8.   android minSdkVersion  9   android  targetSdkVersion  17    gt    lt uses permission android name  android permission BLUETOOTH   gt    lt uses permission  android name  android permission BLUETOOTH ADMIN   gt         lt application   android allowBackup  true    android  icon   drawable ic_launcher    android  label   string app name    android  theme   style AppTheme   gt     lt activity  android name  com dynamicsolutions bluetest3 MainActivity   android  label   string app name   gt    lt intent filter gt     lt action android name  android intent action MAIN    gt         lt category  android name  android intent category LAUNCHER    gt    lt  intent filter gt    lt  activity gt    lt activity android name   DeviceListActivity        40    android  label   string select_device   gt    lt  application gt      lt  manifest gt     6 4 Java Source Code for Android Device    6 4 1 Main Activity Java Code    package com dynamicsolutions bluetest3     import android os Bundle    import android os Handler    import android os Message    import android util Log    import android view Menu    import android view MenulInflater   import android view MenulItem   import android view View   import android view View OnClickListener   import android widget Button    import android widget SeekBar    import android widget TextView    import android widget Toast    import android widget SeekBar OnSeekBarChangeListener   import android app Activity    import android bluetooth BluetoothAdap
9.   scale    0  repeat Index from 1 to  ctr   1   scale    ctr   1   Index  if scale    2  dataV    dataV    inByteArr Index    48    100  elseif scale     dataV    dataV    inByteArr Index    48    10  else  dataV    dataV    inByteArr Index    48   rawSpeed    dataV   dio dec DEBUG  dataV    fds tx DEBUG  13   if inByteArr ctr      B   repeat  ctr    inByteArr ctr     fds rx A_PORT   until inByteArr ctr          dataH    0  scale    0  repeat Index from 1 to  ctr   1   scale    ctr   1   Index  if scale     dataH    dataH    inByteArr Index    48    100  elseif scale     dataH    dataH    inByteArr Index    48    10    else    67    dataH    dataH    inByteArr Index    48   rawDirection    dataH   dio dec DEBUG  dataH    fds tx DEBUG  13     PUB Values  fds str DEBUG  String  Values Started       Outputs  Program Started  to the  terminal screen  fds tx DEBUG  13   repeat  waitent clkfreq 20   cnt   if rawSpeed  gt  50 and rawDirection  lt  50  Forward and Left  range    100  speed     range      rawSpeed   50    100    50     100  direction    speed    100      50   rawDirection    100    50      100  Servo    750   direction  rServo    750   speed  elseif rawSpeed  gt  50 and rawDirection  gt  50  Forward and Right  range    100  speed     range      rawSpeed   50    100    50     100  direction    speed    100      rawDirection   50    100    50      100  IServo    750   speed  rServo    750   direction  elseif rawSpeed  lt  50 and rawDirection  lt  50  Reverse and Right  
10.   ut      TERMS OF USE  MIT License    c             Permission is hereby granted  free of charge  to any person obtaining a copy of this  software and associated documentation       files  the  Software    to deal in the Software without restriction  including without  limitation the rights to use  copy        modify  merge  publish  distribute  sublicense  and or sell copies of the Software  and  to permit persons to whom the Software        is furnished to do so  subject to the following conditions       The above copyright notice and this permission notice shall be included in all copies or    substantial portions of the Software       116      THE SOFTWARE IS PROVIDED  AS IS   WITHOUT WARRANTY OF ANY  KIND  EXPRESS OR IMPLIED  INCLUDING BUT NOT LIMITED TO THE       WARRANTIES OF MERCHANTABILITY  FITNESS FOR A PARTICULAR  PURPOSE AND NONINFRINGEMENT  IN NO EVENT SHALL THE AUTHORS  OR       COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM  DAMAGES OR OTHER  LIABILITY  WHETHER IN AN ACTION OF CONTRACT  TORT OR OTHERWISE         ARISING FROM  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    THE USE OR OTHER DEALINGS IN THE SOFTWARE      ee    i    117    
11.  1 bit period    jmpret rxcode2 txcode2  run a chuck of transmit code  then return    mov tl rxent2    check if bit receive period done  sub tl cnt  cmps t1  0 wc   jmp   wait2    test rxmask2 ina wc  receive bit on rx pin  rcer rxdata2  1  djnz rxbits2   bit2  test rxtx mode2  INVERTRX wz  find out if rx is inverted  jmp  receive2  abort if no stop bit  TTA   from    93    norts2    no rts    if c    rts2    rec2i      Receive3    receive3    start3 if c    jmpret rxcode2 txcode2  run a chunk of transmit code  then return    shr rxdata2  32 9  justify and trim received byte    wrbyte rxdata2 rxbuff head_ptr2  7 22   add rx_head2  1   cmpsub rx _ head2 rxsize2      TTA  allows non binary buffer size  wrlong rx_head2 rx_head_ptr2   mov rxbuff head _ptr2 rxbuff ptr2  calculate next byte head_ptr  add rxbuff_head_ptr2 rx_head2       rdlong rx_tail2 rx_tail_ptr2  7 22 or 8 will be patched to jmp  r3 if    mov t1 rx_head2  sub tl rx_tail2 we   add tl rxsize2   fix wrap   TTA  change  cmps tl rtssize2 we    muxc  outa rtsmask2    jmp   receive2    byte done  receive next byte    jmpret rxcode3 txcode3  run a chunk of transmit code  then return    test rxmask3 ina we    jmp   norts3  go check rts if no start bit  mov rxbits3  9    ready to receive byte    mov rxcnt3 bit4 ticks3  1 4 bits    add rxcnt3 cnt    94     bit3     wait3    if nc    if z ne c    serialMirror     norts3    no rts    if c    add rxcnt3 bit ticks3  1 bit period    jmpret rxcode3 txcode3  run a chuck of transmi
12.  42 Bluetooth Module   A TX  l   To RX pin on RN 42 Bluetooth Module   A RX  2   To TX pin on RN 42 Bluetooth Module   A CTS  3   To RTS pin on RN 42 Bluetooth Module   A RTS  4   To CTS pin on RN 42 Bluetooth Module   BAUD  9600   Baud Rate 9600 bps  VAR    long tLow  tHigh  T  dt  stack 700   cntr  inByte  inString  ctr  testStr  15   milis  char    word cntMin    byte i  inByteArr 300   bufferSize    OBJ  fds   FullDuplexSerial4port   dio    datalO4port          pst   Parallax Serial Terminal V1 0   Create the Parallax Serial Terminal    Object for the LCD Screen  amp  Bluetooth module     Need to use pst file in this folder as it has been modified to use Pin 1  amp  12 for serial    comm    61    PUB Main  milis    clkfreq   1_ 000  dira 26  27      11  Set Pin 26  amp  27 to output  outa 26  27      00  Set pin 26  amp  27 to low  dira A_TX     1  outa A_TX     1  Pause 100   outa A_TX     0  fds Init    fds AddPort A_ PORT  A RX  A TX  A CTS  A RTS  0   000000  BAUD   fds AddPort DEBUG  31  30   1   1  0   000000  BAUD    Debug to the terminal       screen    fds Start   fds str  DEBUG  String  Program Started       Outputs  Program Started  to the  terminal screen   fds tx DEBUG  13     Pause 2000   UART startup delay    fds str A_PORT  String          Sends       to the RN 42 to enter    command mode    62    ctr    0  This block of code reads in characters until  13  is    found  inByteArr ctr     fds rx A_PORT   13  represents the Carraige Return  which is sent at t
13.  Android devices run Android  4 0  API 15  or later  Since we want to maintain a similar user experience and style to  what the majority of users are currently used to experiencing  and selecting an older  android version as the target version may make the application appear older and outdated  compared to newer applications Android 4 0  API15     Ice Cream Sandwich    will be  selected as the target Android platform  Ultimately this means that the application  developed will not be capable of running on 19  of Android devices currently in use   however this number will continue to decrease as these devices older are phased out and  users upgrade to newer devices    With a target mobile operating system selected the next choice is selecting a  mobile device that utilizes the selected operating system  Fortunately I currently own  two mobile device that uses the Android operating system  a cellphone and a tablet  Both  devices run Android Ice Cream Sandwich or later operating systems  and while the tablet    may boast higher performance   processing power I have selected the cell phone Figure 6    as the test platform  The reason for this selection was due to the form factor of the  device  the 10    tablet was difficult to hold with two hands and still use my thumbs to  control the device  however the smaller 5    cell phone fit nicely within my hands similar  to a game controller or an R C car controller  Additionally a 7    or 8    tablet would also    likely work just as w
14.  IDE with Code Snippet from BlueTest3    NN 6  8  aO r asi Sw fe Se PRR ERS ea eye AP CE Em Vey eR ey SPR nea eR 14  Figure 13   Spin IDE with Code Snippet from the PBAA_v0 7 spin Program                15  Figure 14   Example Message per the Communication Protocol             ceceeeeeseeeteeneeees 16  Figure 15   Level 0 System Block Diagram 25  enn auc shai wea hae 19  Figure 16   Android User Interface for Controlling the Robotic Platform               0 20  Figure 17   Android User Interface Code Snippet          sssesessssesseseesseessessessressessessressesse 21    Figure 18   Level 1 Block Diagram Android Process for Connecting to a Remote  Bluetooth Devicesin iaria riisiin iaa iei aniti raai tia 22  Figure 19   Level 1 Block Diagram for Reading User Input and Transmitting to a  R  m  te DDS yi Ce garish Sa e e a aa E A A a ach odes arate wae a ties oe 23    Figure 20   Level 1 Block Diagram of the Propeller Microcontroller and the Interaction    between Co FG saat ort as sue e a caat etic mea ua educa ce ecuspeualeattara E E N 24  Figure 21   BlueTest 3 Application Launched from the Application Menu                    33  Figure 22   User Menu within the Application              ccccceeccessceesceeeeceeeeeeeeeeseeesseenteenees 33  Figure 23   List of Bluetooth Devices Found for Pairing           eseeseseessseesesseserssssersessesee 34  Figure 24   Screen Prior to Selecting Start  Slider Bars Disabled            ec eeeeeeteeeeeeee 34    Figure 25   Screen after Selectin
15.  PULSOUT 14  rServo     PUB PULSOUT Pin duration    clkcycles  H    Produces an opposite pulse on the pin for the duration in 2uS increments  Smallest value is 10 at clkfreq   80Mhz  Largest value is around 50 seconds at 80Mhz   BS2 Pulsout 500   1 mS pulse  i   ClkCycles     Duration   us   2   1250    gt  cntMin   duration   clk cycles for 2us       inst  time  min cntMin    dira pin      Set to output   louta pin   set to opposite state  waitcnt clkcycles   cnt    wait until clk gets there  louta pin     70    PRI Pause ms     waitcnt clkfreq   1000   ms   cnt   Convert to mS    6 5 4 FullDuplexSerial4port Spin Library       FullDuplexSerial4portPlus version 1 01     Tracy Allen  TTA   c 22 Jan 2011 MIT license  see end of file for terms of use   Extends existing terms of use      Can open up to 4 independent serial ports  using only one pasm cog for all 4      Supports flow control and open and inverted baud modes     Individually configurable tx and rx buffers for all 4 ports  any size  set in CONstants  section at compile time     Part of the buffer fits within the object s hub footprint  but even so the object is  restartable     Buffers are DAT type variables  therefore a single instance of the object can be    accessed throughout a complex project       Modified from Tim Moore s pcFullDuplexSerial4fc  with further motivation and ideas  from Duane Degn s pcFullDuplexSerial4fc128    Changes and bug fixes include     Flow control is now operational when called for  with
16.  RN 42 Unit  repeat until inByteArr ctr     13  If successfull  CMD  is returned  ctr      inByteArr ctr     fds rx A_PORT   fds tx DEBUG  inByteArr ctr      Pause 1200   Pause for 1 2 seconds  the       message will  be ignored if     additional messages are sent within 1 second of the   S     fds str A_ PORT  String  SU 96       Set up message that sets the    programmed serial baud rate to 9600  fds tx A_PORT  13   If successfull  AOK  is returned  fds tx A_PORT  10     ctr    0    59    inByteArr ctr     fds rx A_PORT   fds tx DEBUG  inByteArr  ctr    repeat until inByteArr ctr     13  ctr    inByteArr ctr     fds rx A_PORT   fds tx DEBUG  inByteArr ctr      fds str A_ PORT  String          Message sent       that tells the RN 42 to  Exit command mode   fds tx A_PORT  13   If successfull  END  is returned   fds tx A_PORT  10     ctr    0  inByteArr ctr     fds rx A_PORT   fds tx DEBUG  inByteArr ctr    repeat until inByteArr ctr     13  ctr    inByteArr ctr     fds rx A_PORT   fds tx DEBUG  inByteArr ctr      6 5 2 RN 42 Bluetooth Module Verification  Spin Source Code     File  PBAA_v0 3 spin    PBAA   Propeller Bluetooth and Android   v0 3   Test the use of get commands on the RN 42 Bluetooth Module    Assumption is that the module is set to 9600 Baud rate    CON    _xinfreq   5_000_000  _clkmode   xtall   pll16x    60     Bluetooth Constants    DEBUG  0   Debug port sends results to Parallax Serial  Terminal   A PORT  1   Bluetooth Module   A RESET  0   To RST pin on RN
17.  correct polarity  bug  correction     Jitter is reduced  unused ports are properly skipped over  bug correction   operation  speed is increased     Stop bit on reception is now checked  and if there is a framing error  the byte is not  put in the buffer     Buffer sizes are arbitrary  each port separate rx  amp  tx up to available memory  Changes in pasm and in Spin methods to accomodate larger buffers  major  reorganization of DAT section       Added strn method for counted string  and rsxHowFull method for buffer size     71      Cut out most of the format methods such as DEC and HEX  expecting those to be  their own object calling rx  tx  str and strn methods   See companion object DatalO4port spin in order to maintain compatibility with    methods in the original pcFullDuplexSerial4fc       lv01    init method returns pointer  rxsize  for data buffers and data structure     1v00    documentation    Ov91    restored DEFAULTTHRESHOLD constant    made default buffer sizes in the DAT section rather than init    removed the numeric methods to their own companion object  datalO4port     0v3      first public release with the jitter and flow control issues fixed  and large buffers     Links    Development of this version        http   forums parallax com showthread php 137349 yet another variant   fullDuplexSerial4portplus   Tim Moore s original pcFullDuplexSerial4fc and updates to allow flow control   http   forums parallaxinc com forums default aspx f 25 amp p 1 amp m 27329 1
18.  for a byte to be received    returns  1 if no byte received   00   FF if byte  t    cnt    repeat until  rxbyte    rxcheck port     gt  0 or  ent   t     clkfreq   1000   gt  ms    PUB rx port    rxbyte    Receive byte  may wait for byte    returns  00   FF   repeat while  rxbyte    rxcheck port    lt  0    PUB tx port txbyte     Send byte  may wait for room in buffer   if port  gt  3  abort  repeat until  tx_tail port   lt  gt   tx_head port    1     txsize port    byte txbuff_ptr port  tx_head port      txbyte  tx_head port      tx_head port    1     txsize port     82    if rxtx_mode port   amp  NOECHO  rx port     PUB txflush port   repeat until  long  tx_tail  port     long  tx_head  port      PUB str port stringptr     Send zstring    strn port stringptr strsize stringptr      PUB strn port stringptr nchar     Send counted string  repeat nchar    tx port byte stringptr        DAT    TKK 3K 3K 3K 3K K  gt K K K 3K 3K 3K 3K 2K 3K   K K 3K 3K 3K 3K FK 2K   K   K   K 2k K 2 3K is 2K K ok       Assembly language serial driver    DKK 3K 3K 3K 3K 3K K K 3K 3K 3K 3K 3K 2K   K   K K K   K K 3K FK FK   K   K   K 2k K 2 3K FK ok 2K ok    org 0      Entry    To maximize the speed of rx and tx processing  all the mode checks are no longer inline   The initialization code checks the modes and modifies the rx tx code for that mode    e g  the if condition for rx checking for a start bit will be inverted if mode INVERTRX     is it  similar for other mode flags    The code is also patc
19.  m276667       http   obex parallax com objects 340  7 24 08 version       http   forums parallaxinc com forums default aspx f 25  amp p 1 amp m 349173  8 14 08 update  flow polarity correction  not in obex   Duane Degn s thread  larger 128 or 512 byte buffers and reusing buffer space   discussion of issues       http   forums parallax com showthread php 129714 Tim Moore s   pcFullDuplexSerial4FC with larger  285 12 byte 29 rx buffer    Juergen Buchmueller  2 port trimmed down version    72        http   forums parallax com showthread php  128 184 Serial Objects for SPIN   Programming amp p 967075 amp viewfull 1 post967075   Serial Mirror  single port but same idea regarding buffers in the DATa space       http   forums parallax com showthread php 943 1 1 SerialMirror A   FullDuplexSerial enhancement       http   obex parallax com objects 189    Re baud rates attainable  hiccups   http   forums parallaxinc com forums default aspx f 25  amp p 1  amp m 282923 m282978       http   forums parallaxinc com forums default aspx  f 25 amp p 1 amp m 334784       http   forums parallax com showthread php  120868 FullDuplexSerial hiccups   Jitter  discussions of jitter in different Prop serial programs  PhiPi s development of  PBnJ full duplex        http   forums parallax com showthread php  129776 Anybody aware of high   accuracy  0 7 or less  serial full duplex driver       http   forums parallax com showthread php  13643 1 Serial objects question   Humanoido s catalog of serial port 
20.  other  discoverable Bluetooth enabled devices  This was implemented utilizing the menu  button  one of the three standard buttons on all android devices   upon selecting the  menu button the user is presented with the option to search for and connect to remote  Bluetooth devices  After which the user is presented with the Names and MAC  Addresses of devices found  See Appendix 6 2 for screen captures of the various screens  a user sees when interacting with the android application  In addition to the movement of  the sliding bars  the values of the sliders are displayed in the top left corner of the  application  this was done to provide the user with additional visual feedback and helps  to verify that the user input is being understood by the Android application  this was also  very helpful in the development and debugging of the application  This feature could be  removed in a final production version of the application and is not critical to the  functionality of the application  Finally  the user interface and its various sub menus and  screens is written in the XML language   format  Figure 17 is a Code Snippet of the  XML code written to display two text views and a button on the user interface  The  XML code used to generate the Android User interface can be found in Appendix 6 3  XML Code for Android User Interface and Context Menus     20      Java   BlueTest3 res layout activity_main xt  File Edit Refactor Source Navigate Search Project Run Window Help       irae 
21.  pin on RN 42 Bluetooth Module    To RX pin on RN 42 Bluetooth Module    To TX pin on RN 42 Bluetooth Module    To RTS pin on RN 42 Bluetooth Module    To CTS pin on RN 42 Bluetooth Module      Baud Rate 9600 bps    long tLow  tHigh  T  dt  stack 700   cntr  inByte  inString  ctr  testStr  15   milis  char    word cntMin    byte i  inByteArr 25   bufferSize    57    OBJ  fds   FullDuplexSerial4port   dio    datalO4port          pst   Parallax Serial Terminal V1 0   Create the Parallax Serial Terminal  Object for the LCD Screen  amp  Bluetooth module   Need to use pst file in this folder as it has been modified to use Pin 1  amp  12 for serial    comm         PUB Main  milis    clkfreq   1_000  dira 26  27      11  Set Pin 26  amp  27 to output  outa 26  27      00  Set pin 26  amp  27 to low  dira A_TX     1  outa A_TX     1  Pause 100   outa A_TX     0  fds Init    fds AddPort A_PORT  A RX  A TX  A CTS  A RTS  0   000000  BAUD   fds AddPort DEBUG  31  30   1   1  0   000000  BAUD    Debug to the terminal       screen    fds Start    58    fds str  DEBUG  String  Program Started       Outputs  Program Started  to the    terminal screen    Pause 2000   UART startup delay    fds str A_PORT  String          Sends       to the RN 42 to enter    command mode    ctr    0  This block of code reads in characters until  13  is  found  inByteArr ctr     fds rx A_PORT   13  represents the Carraige Return  which is sent at the end of  fds tx DEBUG  inByteArr ctr    every message from the
22.  time sensitive tasks  without issues or delays  This translates into the ability to constantly monitor the  incoming Bluetooth communication channel  while simultaneously updating and sending  the time sensitive pulse commands required to control the servo motors driving the  platform  To do this with an Arduino a second motor controller board would be required  to off load the time sensitive pulse commands from the main microcontroller  The  second reason for selecting the Parallax Propeller platform   Propeller Activity Board for  this project was a matter of convenience and available documentation   product support   From a compatibility standpoint by selecting a robotic platform and microcontroller both  from the same manufacturer  compatibility was guaranteed  Additionally Parallax  offered supporting documentation for the use of the Propeller Activity Board with the  ActivityBot which can be found on the product   s web page  9     The same methodology of selecting components from the same vendor  Parallax  in this case  was also leveraged when selecting a Bluetooth adapter for use on the  project  The RN 42 Bluetooth adapter Figure 9 manufactured by Parallax  11  provided  Bluetooth 2 1 2 0 1 2 1 1 communication support to the project  The RN 42 Bluetooth  adapter provides a standard pin breakout connector which can easily be connected to the  breadboard on the Parallax Activity Board and wired to its I O pins  Additionally it can  be set to operate off of and control
23.  z to if_z_or_c using or  doif z or_nc long  002c0000    patch condition if z to if z _or_nc using  or   domuxne long  04000000    patch muxc to muxnc using or   txbitor long  0401    bits to or for transmitting  adding start and stop  bits      Buffer sizes initialized from CONstants and used by both spin and pasm    rxsize long RX_SIZEO    TTA  size of the rx and tx buffers is  available to pasm and spin   rxsizel long RX SIZEI1   these values are transfered from the  declared CONstants   rxsize2 long RX SIZE2   at startup  individually configurable  rxsize3 long RX SIZE3   txsize long TX SIZEO   txsizel long TX_SIZE1   txsize2 long TX SIZE2   txsize3 long TX SIZE3      Object memory from here to the end is zeroed in the init stop method                      Some locations within the next set of values  after being initialized to zero  are then    filled with alternative options    101      That are accessed from both spin and pasm    Dont Change the order of these initialized variables within port groups of 4 without  modifying      the code to match   both spin and assembler    startfill   rxchar byte 0   used by spin rxcheck  for inversion of received data  rxchar1 byte 0   rxchar2 byte 0   rxchar3 byte 0   cog long 0    cog flag id   rxtx_mode long 0  mode setting from values passed in by addport   rxtx model long 0     rxtx_mode2 long 0   rxtx_mode3 long 0   rx_head long 0   rx head pointer  from 0 to size of rx buffer  used in  spin and pasm   rx_head1 long 0   data i
24. 8 words bi  Passed from Spin to Cog on cog initialization z  Spin per port info 4 x 1 byte     Used by Spin     Spin Cog rx tx buffer hub address 4 x 4 words    Passed from Spin to Cog on cog initialization    Spin Cog rx tx index hub address 4 x 4 words F  Passed from Spin to Cog on cog initialization z   Spin per port rx buffer 4 x 64 byte    x  DWD Changed to 4 x 128 bytes    Read by Spin  written by cog i    x    Cog per port rx state 4 x 4 words  overlayed on rx buffer     Used by Cog n  Spin per port tx buffer 4 x 16 byte      75    Woke    Woke           Woke            ES    Woke    Woke    Woke    Woke    Woke           Woke           Woke    Woke    Woke    Woke           Written by Spin  read by Cog    Cog per port tx state 4 x 4 words  overlayed on tx buffer     Used by Cog 7  Cog constants 4 words z  A significant amount of space  4 x 16 words  is used for    pre calculated information  hub addresses  per port      configuration  This speeds up the tx rx routines at the cost      of this space      x  Note  There are 8 longs remaining in the cog s memory  x  expect to do some work to add features          x    DWD Note from Duane  Many of the longs in the cog image    are only used in hub RAM  There is still lots of room    in cog RAM   TTA  agreed  thanks DWD     x   7 1 08  Fixed bug of not receiving with only 1 port enabled     Fixed bug of rts not working on ports 0 2 and3    7 22 08  Missed a jmpret call in port 1 and 3 tx     Fixed a bug in port 3 tx not in
25. Design of a Bluetooth Enabled Android Application for a  Microcontroller Driven Robot  by  Vito M  Guardi  An Engineering Project Submitted to the Graduate  Faculty of Rensselaer Polytechnic Institute  in Partial Fulfillment of the  Requirements for the degree of  MASTER OF ENGINEERING    Major Subject  Mechanical Engineering    Approved        Ernesto Gutierrez Miravete  Project Adviser    Rensselaer Polytechnic Institute  Hartford  CT    May  2014       Copyright 2014  by  Vito M  Guardi  All Rights Reserved    CONTENTS    Design of a Bluetooth Enabled Android Application for a Microcontroller Driven Roboti    LAS TOR TABLES yaan aasnccnd a nr aE aa eia TAa R a AE AE RE iii  LIST OF ACCRONYM S orita ien o eA E E OA E A E N iv  EIS FOF RIGURES oes ee a A nate E 8 N E E N v  ACKNOWLEDGMENT nprap e a a G Gee vii  ABSTRACT Trennen ae a a E T A E viii  1  INTRODUCTION BACKGROUND    ssssssssessssesesessesestsrtsestssesestsresestssesestaresesesseseseste 1  1 1  RAC KRONE a  aoc eeicarareniebaszucclcaonseea stunned etal aes oe a A e a ENE 1   12  RAO WOK hoe ceca hai ad 8 aa cca a hesitated tines M0 arn ucla ean toh india  Sa Jains cadre 1   VS  Objettiv Ecri aioe tijuana Sac tecat aa eh sewage Gc tad ana ceca aden aes 4   2  METHODOLOGY AMPLEMENTATION icc cccsseissseastdeatsacs canine haamaeas 5  2 1 Component and Software Selection               ccsscssccsssccsssssssccsscsssrcsessccssnssencesaces 5  2 1 1 Selecting a Mobile Operating System and a Mobile Device                   5
26. ERTCTS we  c set if inverted  if nz and c or ctsi0 doif_z or nc  if nc jmp  TTA  reversed order to    correctly invert CTS    if nz and nc or ctsi0 doif_z orc    if cjmp    if z moy txcts0 transmit  copy the jmpret over the cts test  if z moys ctsi0  txcts0    patch the jmps to transmit to txcts0  if z add txcode  1  change co routine entry to skip first jmpret     patch rx routine depending on whether rts is used   and if it is inverted    or rtsmask  0 wz  rts pin  z not set ifin use    if nz test rxtx_mode  INVERTRTS wc  if nz and nc or rts0 domuxne    patch muxc to muxnc  if z mov norts0 rec0i    patch to a jmp  receive  if z moys start0  receive  skip all rts processing if not used  or txmask  0 wz  iftx pin not used  if z movi transmit    010111_000   patch it out entirely by making the    jmpret into a jmp  TTA     or rxmask  0 wz  ditto for rx routine  if z movi receive    010111 000   TTA   f MAIN LOOP                89     Receive                                                                                        receive jmpret rxcode txcode    run a chunk of transmit code  then return     patched to a jmp if pin not used  test rxmask ina we  start0 if c jmp  norts0  go check rts if no start bit      have to check rts because other process may remove    chars   will be patched to jmp  receive if no rts  moy rxbits  9  ready to receive byte  moy rxcnt bit4 ticks  1 4 bits  add rxcnt cnt   bit add rxcnt bit ticks  1 bit period   wait jmpret rxcode txcode  run a chu
27. Enabled program  User selects List of List of  s A Scan for x  Scan and Paired devices  Connect    Devices found    Attempt to  Alert User Y connect to Select Devi  selected   Select Device    device  N    Alert User    Figure 18   Level 1 Block Diagram Android Process for Connecting to a Remote Bluetooth Device    In addition to detecting and connecting to a remote Bluetooth device the Android  application is also responsible for obtaining the user   s input through the user interface  and converting the gestures and motions of the user   s hand on the touch screen into input  for controlling the robotic platform  Ultimately  the application takes the user   s input   constructs messages that fit the established communication protocol and then transmits  them over the Bluetooth connection  A block diagram of the process implemented can be  seen in Figure 19  Note that at this point a successful connection with a remote device  has already been established  Also note that this process is repeated as to continuously  monitor user input and transfer data to the remote device  It is also worth noting that data  transmission is triggered by user input  if user input is not received or remains  unchanged over a period of time  data is not transmitted  Keep in mind that this is just  one method for implementing the communication protocol  another approach could have  been to transmit updated values of the sliders at a fixed time interval independent of    whether the input had chan
28. IZE  lt     extra     overlay       ut  ee      TERMS OF USE  MIT License    ecc             Permission is hereby granted  free of charge  to any person obtaining a copy of this  software and associated documentation       files  the  Software    to deal in the Software without restriction  including without  limitation the rights to use  copy        modify  merge  publish  distribute  sublicense  and or sell copies of the Software  and  to permit persons to whom the Software        is furnished to do so  subject to the following conditions       The above copyright notice and this permission notice shall be included in all copies or  substantial portions of the Software              THE SOFTWARE IS PROVIDED  AS IS   WITHOUT WARRANTY OF ANY  KIND  EXPRESS OR IMPLIED  INCLUDING BUT NOT LIMITED TO THE       WARRANTIES OF MERCHANTABILITY  FITNESS FOR A PARTICULAR  PURPOSE AND NONINFRINGEMENT  IN NO EVENT SHALL THE AUTHORS  OR      107      COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM  DAMAGES OR OTHER  LIABILITY  WHETHER IN AN ACTION OF CONTRACT  TORT OR OTHERWISE       ARISING FROM  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    THE USE OR OTHER DEALINGS IN THE SOFTWARE     CO l    ENEN    6 5 5 DatalO4port Spin Library    TKK 3K 3K 3K 3K K K K 3K 3K 3K 3K 2K 2K K K K 3K 3K 3K FK 2K   K   K K K 3K 3K 3K FK FK K   K K OIE 3K 3K FK FK FK   K   K K 2K 3K 3K FK FK FK K   K K   K 3K 3K FK FK FK K   K 2K 2K K K ok       DatalO4port version 1 0 1 22 2012 k      Author  Tracy Allen      
29. InMax port  stringptr   1     PUB StrInMax port  stringptr  maxcount    char  ticks     from PST  modified  Receive a string of characters  either carriage return terminated or maxcount in length   and stores it  zero terminated   starting at stringptr  Waits until either full string received or maxcount characters  received   Parameters   stringptr   pointer to memory in which to store received string characters   Memory reserved must be large enough for all string characters plus a zero  terminator  maxcount   1      maxcount   maximum length of string to receive  or  1 for unlimited       113    maxcount  lt    MAXSTR_ LENGTH    repeat maxcount  While maxcount not reached  if  byte stringptr       uarts rx 0      NL  Get chars until NL  quit  byte stringptr  byte stringptr 1     NL      Zero terminate string     overwrite NL or append 0 char    PUB StrInB port  stringptr  seconds    char  ticks  ticks    clkfreq seconds cnt  repeat MAXSTR_ LENGTH  repeat  char    uarts rxcheck port   until char  gt   1  case char  32  126   byte stringptr       char   encompasses all numeric chars in dec and hex  8  127  stringptr    13   quit  if ticks    cnt  lt  0  quit  byte stringptr      PUB DecIn port    value    PST   Receive carriage return terminated string of characters representing a decimal value     Returns  the corresponding decimal value        StrInMax port   str_buffer  MAXSTR LENGTH   value    StrfoBase  str_buffer  10     114    PUB HexIn port    value     from PST   Re
30. Module    64    A RX  2   To TX pin on RN 42 Bluetooth Module    A CTS  3   To RTS pin on RN 42 Bluetooth Module  A RTS  4   To CTS pin on RN 42 Bluetooth Module  BAUD  9600   Baud Rate 9600 bps   VAR    long tLow  tHigh  T  dt  stack 700   cntr  inByte  inString  ctr  testStr 15   milis   char us  dataV  dataH  scale  rawSpeed  rawDirection  speed   Servo  rServo  direction   range   word cntMin    byte i  inByteArr 300   bufferSize  cntB  temp  Index    OBJ  fds    FullDuplexSerial4port   dio    datalO4port     PUB Main  milis    clkfreq   1_ 000    dira 26  27      11  Set Pin 26  amp  27 to output  outa 26  27      00  Set pin 26  amp  27 to low  dira A_TX     1   outa A_TX     1   rawSpeed    50    rawDirection    50    65    IServo    750  rServo    750    Pause 100     outa A_TX     0    fds  Init    fds AddPort A PORT  A RX  A TX  A CTS  A RTS  0   000000  BAUD   fds AddPort DEBUG  31  30   1   1  0   000000  BAUD    Debug to the terminal       screen    fds Start    fds str DEBUG  String  Program Started       Outputs  Program Started  to the  terminal screen    fds tx DEBUG  13     Pause 2000   UART startup delay  cognew Values   stack 0      Start a new cog to manage the servo pulses  Pause 250     cognew ServoPulse  Wstack 300      repeat  repeat  ctr    0  inByteArr ctr     fds rx A_PORT   until inByteArr ctr      A  or inByteArr ctr      B   if inByteArr ctr      A     66    repeat  ctr    inByteArr ctr     fds rx A_PORT   until inByteArr ctr          dataV    0
31. Three 115 1110011 S Lowercase s  52 110100 4 Four 116 1110100 t Lowercase t  53 110101 5 Five 117 1110101 u Lowercase u  54 110110 6 Six 118 1110110 v Lowercase v  55 110111 7 Seven 119 1110111 w Lowercase w  56 111000 8 Eight 120 1111000 x Lowercase x  57 111001 9 Nine 121 1111001 y Lowercase y  58 111010 Colon 122 1111010 Z Lowercase z  59 111011 p Semicolon 123 1111011   Opening brace  60 111100  lt  Less than  or open angled bracket  124 1111100   Vertical bar  61 111101   Equals 125 1111101   Closing brace  62 111110 X Greater than  or close angled 126 1111110 7 Equivalency sign    bracket  tilde  63 111111   Question mark 127 1111111 Delete             32                6 2 Android Device User Interface Screen Captures    9 22 PM           gt       ye    7   Advanced AIDE AT amp T Code AT amp T   AT amp T  Task Killer  Scanner Connect f FamilyMap        Ge ih iE    ops A    AT amp T AT amp T AT amp T AT amp T Smart ESE  Locker NEW ef  Colmuus Iai  relep facie  Wi Fi d    JE  O EJ    Calculator Calenda saeta ChatON    o iy  A Color Contacts Downloads    Matchen    ET A    ow  Drive Dropbox Earth mai       Figure 21   BlueTest 3 Application Launched from the Application Menu        a   I   46  gg 9 22 PM  ic BlueTest3   V 50   H 50 Start    gt      Cu    Scan and Connect    Make device discoverable    Figure 22   User Menu within the Application    33     aa        f Select a device to connect to  Paired Devices  FORS AEGSE ES    RN42 966D  00 06 66 48 96 6D     asyBT   g
32. X Uppercase X  25 11001 EM End of Medium 89 1011001 Y Uppercase Y  26 11010 SUB Substitute 90 1011010 Z Uppercase Z  27 11011 ESC Escape 91 1011011   Opening bracket  28 11100 FS File Separator 92 1011100   Backslash  29 11101 GS Group Separator 93 1011101 Closing bracket  30 11110 RS Record Separator 94 1011110 A  Caret   circumflex  31 11111 US Unit Separator 95 1011111   Underscore  32 100000 Space 96 1100000 Grave accent  33 100001   Exclamation mark 97 1100001 a Lowercase a  34 100010 j Double quotes  or speech marks  98 1100010 b Lowercase b  35 100011   Number 99 1100011 c Lowercase c                         31                                                                                     36 100100   Dollar 100 1100100 d Lowercase d  37 100101   Percent 101 1100101 e Lowercase e  38 100110  amp  Ampersand 102 1100110 f Lowercase f  39 100111 i Single quote 103 1100111 g Lowercase g  40 101000   Open parenthesis  or open bracket  104 1101000 h Lowercase h  41 101001   Close parenthesis  or close bracket  105 1101001 i Lowercase i  42 101010 x Asterisk 106 1101010 j Lowercase j  43 101011   Plus 107 1101011 k Lowercase k  44 101100 F Comma 108 1101100   Lowercase    45 101101   Hyphen 109 1101101 m Lowercase m  46 101110 Period  dot or full stop 110 1101110 n Lowercase n  47 101111   Slash or divide 111 1101111 o Lowercase o  48 110000 0 Zero 112 1110000 p Lowercase p  49 110001 1 One 113 1110001 q Lowercase q  50 110010 2 Two 114 1110010 r Lowercase r  51 110011 3 
33. a getExtras   getString  DeviceListActivity  EXTRA DEVICE ADDRESS       Get the bluetooth Device object  BluetoothDevice device    mBluetoothAdapter getRemoteDevice  address                      46       Attempt to connect to the device   Toast makeText  getBaseContext     Attempting to connect to      address  Toast  LENGTH SHORT   show      mDataService connect  device                    The Handler that gets information back from the  BluetoothDataTransferService  private final Handler mHandler   new Handler        Override  public void handleMessage  Message msg     switch  msg what     case MESSAGE TOAST   Toast makeText  getBaseContext      msg getData   getString TOAST   Toast LENGTH SHORT   show     break   case MESSAGE READ           resolveData msgFull      break       End of switch      End of handleMessage      End of mHandler             private void resolveData  String inputString      String message    ABCDE             String test   mResolverService SortInputData  inputString          Toast makeText  getBaseContext    test   Toast LENGTH SHORT   show             TextView txtOut    TextView  findViewById R id txtOut    txtOut setText  test      byte   send   message getBytes     mDataService write  send                 End if           end main    6 4 2 Bluetooth Data Transfer Service    package com dynamicsolutions bluetest3        import java io IOException   import java io InputStream     47    import java io OutputStream   import java nio charset Charset   
34. accomodate all of the buffers      if the sum totals to 308  then the buffers exactly fit within the    object footprint     PUB Init   Always call init before adding ports    Stop   bytefill  startfill  0    endfill  startfill     initialize head tails port info and hub  buffer pointers   return  rxsize  TTA returns pointer to data structure  buffer  sizes     PUB AddPort port rxpin txpin ctspin rtspin rtsthreshold mode baudrate      Call AddPort to define each port     port 0 3 port index of which serial port     rx tx cts rtspin pin number XXX PINNOTUSED if not used     rtsthreshold   buffer threshold before rts is used XXX DEFAULTTHRSHOLD    means use default      mode bit 0   invert rx XXX INVERTRX   mode bit 1   invert tx XXX INVERTTX    mode bit 2   open drain source tx XXX OCTX    78      mode bit 3   ignore tx echo on rx XXX NOECHO      mode bit 4   invert cts XXX INVERTCTS    mode bit 5   invert rts XXX INVERTRTS    baudrate  if cog OR  port  gt  3   abort    if rxpin  lt  gt   1  long  rxmask  port       lt  rxpin  if txpin  lt  gt   1  long  txmask  port       lt  txpin  if ctspin  lt  gt   1  long  ctsmask  port       lt  ctspin  if rtspin  lt  gt   1  long  rtsmask   port       lt  rtspin  if  rtsthreshold  gt  0  AND  rtsthreshold  lt  rxsize port      variable buffer size    long   rtssize  port     rtsthreshold  else  long   rtssize   port     rxsize port  3 4  buffer TTS ref RX_BUFSIZE  long  rxtx_mode  port     mode  if mode  amp  INVERTRX  byte  rxchar  po
35. android   xmlns tools  http   schemas android com tools   android layout width  fiil parent     android layout_height  fill parent   tools context   MainActivity   android orientation  horizontal   gt      lt TextView android id    tid txtoOut   android layout_width  fill parent   android layout height  wrap_content   gt      lt Button    android id    id btn_Send    android  layout _width  wrap content   android layout_height  wrap_ content   android  layout_alignParentTop  true   android  layout _centerHorizontal  true   android text  Start    gt         lt TextView    android   android   android   android   android   android        id    tid textViewl1   layout_width  wrap_ content   layout_height  wrap_ content   layout_alignParentLeft  true   layout_alignParentTop  true   text  V     gt              37     lt TextView    android   android   android   android   android   android        id   tid textView2   layout_width  wrap_content   layout_height  wrap_ content   layout _alignParentLeft  true   layout_below    tid txtOut   text  H     gt               lt TextView    android   android   android   android   android   android        id    tid vTextView   layout_width  wrap_content   layout _height  wrap_ content   layout_above    id hTextView   layout toRightOf    id textView2   text  50    gt                        lt TextView    android   android   android   android   android   android   android        id   t tid hTextView   layout_width  wrap_content    layout _height  
36. apter  mBluetoothAdapter   BluetoothAdapter getDefaultAdapter                 Check to see if bluetooth is supported and if not alert  the user  if  mBluetoothAdapter    null      Toast makeText  this   Bluetooth is not supported on  this device   Toast LENGTH LONG   show     finish     return                mResolverService   new DataResolverService  this  mHandler           Send Button          btnSend    Button  findViewById R id btn_ Send    hText    TextView  findViewById R id hTextView     hSeek    SeekBar  findViewById R id hSeekBarl                   vText    TextView  findViewBylId R id vTextView     vSeek    SeekBar  findViewById R id vSeekBarl1             hSeek setProgress  50    hSeek setEnabled  false    vSeek setProgress  50    vSeek setEnabled  false             42    hSeek setOnSeekBarChangeListener  new  OnSeekBarChangeListener         Override  public void onStopTrackingTouch SeekBar seekBar       hSeek setProgress  50            Override  public void onStartTrackingTouch SeekBar seekBar        TODO Auto generated method stub          Override  public void onProgressChanged SeekBar seekBar  int  progress   boolean fromUser       String stringH   Integer toString progress     hText setText  stringH      String messageB    B     String messageF          byte   sendB   messageB getBytes     mDataService write  sendB     try            Thread  sleep 1       catch  InterruptedException e        TODO Auto generated catch block  e printStackTrace              Log 
37. atform   Additionally I will describe at a high level  the control logic implemented on both the  Android device and the Propeller controlled robotic platform     2 2 1 Development of a Communication Protocol    In its most basic form the communication protocols purpose is to serve as a common  language that can be interpreted by any device design to accept the language and rules of  the communication protocol  A device receiving a message per the communication  protocol would not care how the message was generated or by what type of device the  message was generated from  Additionally  the device generating the message would not  care what type of device the message is going to  This is because compatibility between  the two devices is guaranteed based on following the rules of the protocol    To suit the needs of this project while remaining general enough that its  implementation could be widely accepted I set out to create as basic a communication    protocol as possible  This was in an attempt to make the requirements imposed on    15    devices as basic as possible in order to capture as many devices as possible  The rules of  the protocol are as follows    1  The device should parse all messages and transmit them a single byte of data at  a time    2  The data must be transmitted as 8 bit ASCII  American Standard Code for  Information Interchange  characters    3  The first character must be an Alpha and is the Index that represents the  parameter the following data wi
38. c or ctsi2 doif_z or c  if cjmp    if z moy txcts2 transmit2  copy the jmpret over the cts test  if z moys ctsi2  txcts2    patch the jmps to transmit to txcts0  if z add txcode2  1  change co routine entry to skip first jmpret    or rtsmask2  0 wz    if nz or dira rtsmask2    TTA  rts needs to be an output  if nz test rxtx _mode2  INVERTRTS we   if nz and nc or rts2 domuxnc    patch muxc to muxnc   if z mov norts2 rec2i  patch to a jmp  receive2   if z movs start2  receive2  skip all rts processing    or txmask2  0 wz  iftx pin not used    if z movi transmit2    010111_000   patch it out entirely by making the  jmpret into a jmp  TTA   or rxmask2 40 wz    ditto for rx routine  if z movi receive2   010111 000   TTA       port 1 initialization                                                                test rxtx_model  OCTX wz    init tx pin according to mode  test rxtx_model  INVERTTX we    if z nec or _ outa txmaskl    if z or dira txmask1  if z eqc or txoutl domuxnc    patch muxc to muxnc  if nz moyd txoutl  dira  change destination from outa to dira    test rxtx_model  INVERTRX wz    wait for start bit on rx pin  if nz xor startl doifc2ifnc  if cjmp to if nc  or ctsmaskl  0 wz    if nz test rxtx_model  INVERTCTS we    87    if nz and c or ctsil doif z or nc  if nc jmp  TTA  reversed order to  correctly invert CTS    if nz and nc or ctsil doif z or c  if cjmp    if z moy txctsl transmitl  copy the jmpret over the cts test  if z moys ctsil  txcts1    patch the jmps to tra
39. ceive carriage return terminated string of characters representing a hexadecimal value     Returns  the corresponding hexadecimal value         StrInMax port   str_buffer  MAXSTR LENGTH   value    StrToBase  str_buffer  16     PUB BinIn port    value      from PST    Receive carriage return terminated string of characters representing a binary value   Returns  the corresponding binary value  Note that the constant MAXSTR LENGTH  limits the   of digits       StrInMax port   str_buffer  MAXSTR LENGTH   value    StrToBase  str_buffer  2     PRI StrToBase stringptr  base    value   chr  index    from PST    Converts a zero terminated string representation of a number to a value in the designated  base     Ignores all non digit characters  except negative     when base is decimal  10        value    index    0  repeat until   chr    byte stringptr  index        0   chr     15     chr  amp   11011111   39  chr  gt  56   Make  0     9   A   F   a   f  be 0   15  others out of range  if  chr  gt   1  and  chr  lt  base     Accumulate valid values  into result  ignore others    value    value   base   chr    115    if  base    10  and  byte stringptr          If decimal  address  negative sign  ignore otherwise    value      value    DAT    TKK K 3K 3K 3K 24g K K 3K 3K 3K 3K 3K 2K   K   K K K 3K 3K 3K FK 2K   K   K K 2K 2s 2 2k 2K 2K K ok       Assembly language serial driver      TKK 3K 3K 3K 3K K K K 3K 3K 3K 3K 2K 2K   K   K K K 3K 3K 3K FK FK FK   K   K 2k 2g 2 2k 2K 2K  gt K ok  
40. ces setAdapter  mPairedDevicesArrayAdapter          lstPairedDevices setOnItemClickListener  mDeviceSelectedListener             Find and set up list view for new devices   ListView lstNewDevices    ListView   findViewById R id new device list     lstNewDevices setAdapter  mNewDevicesArrayAdapter                lstNewDevices setOnItemClickListener  mDeviceSelectedListener                Register for broadcasts when a device is found  IntentFilter filter   new   IntentFilter  BluetoothDevice ACTION FOUND     this registerReceiver mReceiver  filter              Register for broadcasts when discovery has finished  filter   new   IntentFilter  BluetoothAdapter ACTION DISCOVERY FINISHED     this registerReceiver mReceiver  filter            Get the local bluetooth adapter  mBtAdapter   BluetoothAdapter getDefaultAdapter             Get a set of currently paired devices  Set lt BluetoothDevice gt  pairedDevices    mBtAdapter getBondedDevices                  If there are paired devices add them to the Array       Adapter  if  pairedDevices size    gt 0          findViewBylId R id title paired devices   setVisibility  View  VISIBL          E         for  BluetoothDevice device   pairedDevices     mPairedDevicesArrayAdapter add  device getName         n    device getAddress          End for      End of if  else            53    String noDevices    getResources    getText  R string none paired   toString     mPairedDevicesArrayAdapter add noDevices          End else               End 
41. cess I set a bench mark for the minimum  number of data transfers or parameter updates that needed to be able to occur per second   This was in an attempt to quantify the responsiveness of the platform and the  implementation of the communication protocol  Additionally  it would help flush out if  the protocol had any inherent attributes that were not conducive to rapid data transfer  I  initially had set out to show that the given parameters could be updated 4 times per  second  this should ensure that the robotic platform would be responsive and react to  user input without a significant visual delay  With some simple testing I observed that    the configuration was capable of preforming over 20 updates per second  The capability    26    for this high refresh rate meant that the robotic platform would be able to react to the  users input with virtually no visual delay  on par with existing R C solutions and    products currently on the market     A video of the application and robotic platform in action has been uploaded to You    Tube  16      27    4  CONCLUSIONS    The intent of this project was to demonstrate the possibility to create a communication  protocol that could be implemented over Bluetooth between a mobile device and a  robotic platform  The intent being that if the robotic platform was designed to receive  messages per the protocol  it could be implemented without creating a unique application  on the mobile device for each robotic platform    I have shown 
42. ck of transmit code  then return  mov tl rxcnt    check if bit receive period done  sub tl cnt  cmps t1  0 wc  if nc jmp   wait  test rxmask ina wc  receive bit on rx pin  rcer rxdata  1  djnz rxbits   bit  get remaining bits  test rxtx mode  INVERTRX wz _    find out if rx is inverted  if z ne c jmp  receive  abort if no stop bit  TTA   from  serialMirror   jmpret rxcode txcode  run a chunk of transmit code  then return  shr rxdata  32 9  justify and trim received byte    90    nortsO  rts    wc    if c    rts0    rec0i      Receivel    receivel    startl if c    wrbyte rxdata rxbuff head _ptr  7 22   lwr  add rx_head  1  cmpsub rx_head rxsize    TTA  allows non binary buffer size  wrlong rx_head rx_head_ptr   8   2wr  moy rxbuff head_ptr rxbuff ptr  calculate next byte head_ptr  add rxbuff head_ptr rx_head  rdlong rx tail rx tail ptr   7 22 or 8  will be patched to jmp  r3 if no     Ird   moy tl rx_head  sub tl rx_tail we    calculate number bytes in buffer   TTA  add  and tl    7F    fix wrap   add tl rxsize   fix wrap   TTA  change  cmps tl rtssize wc    is it more than the threshold   muxc outa rtsmask  set rts correctly   jmp  receive  byte done  receive next byte   jmpret rxcodel txcodel  run a chunk of transmit code  then return    test rxmaskl ina we    jmp  norts1  go check rts if no start bit  mov rxbits1  9  ready to receive byte    mov rxcntl bit4 ticks   1 4 bits    add rxcntl cnt    91     bit1     waitl    if nc    if z ne c    serialMirror     norts 1    no r
43. creasing tx ptr     7 24 08  Added version variable to change if need multiple      copies of the driver z    x    TEKK K kk k k k k k k k k k k k K k k k k K K k 8 k 2K K k k k K K 8 k k K K K k k k fg 8 k k 2k 2K K k k fe 2K K K k 2 2K 2K 3K 3k 2k 2K 2 2K 2k    CON  NOMODE    000000  INVERTRX    000001  INVERTTX    000010  OCTX    000100    76    NOECHO    001000       INVERTCTS    010000   INVERTRTS    100000   PINNOTUSED      tx tx cts rts pin is not used   DEFAULTTHRESHOLD  0   zero defaults to 3 4 of buffer  length   BAUD1200   1200   BAUD2400   2400   BAUD4800   4800   BAUD9600   9600   BAUD19200   19200   BAUD38400   38400   BAUDS57600   57600   BAUD115200   115200      The following constants declare the sizes of the rx and tx buffers      Enter in the needed size in bytes for each rx and tx buffer     These values can be any size within available memory  They do not have to be a power  of two       Unused buffers can be reduced to 1 byte     RX_SIZEO   200   receive buffer allocations  RX_SIZE1   200   RX_SIZE2   80   RX_SIZE3   80   TX_SIZEO   20   transmit buffer allocations  TX_SIZE1   20   TX_SIZE2   20   TX_SIZE3  20      T1    RXTX_BUFSIZE    TX_SIZEO   TX_SIZE1   TX_SIZE2   TX_SIZE3     RX_SIZEO   RX_SIZE1  RX_SIZE2   RX_SIZE3      total buffer footprint in bytes     77 longs  308 bytes are available for buffers within the hub  footprint of the object     the final instruction in this program allocates additional buffer  space beyond that if necessary     to 
44. d  OutputService    Output B Complete     byte   sendH   stringH getBytes     mDataService write  sendH      try         Thread  sleep 1       catch  InterruptedException e        TODO Auto generated catch block  e printStackTrace             Log d  OutputService    Output H Complete     byte   sendF   messageF getBytes     mDataService write sendF    try    Thread  sleep 1      catch  InterruptedException e        TODO Auto generated catch block  e printStackTrace             Log d  OutputService    Output F Complete       43    vSeek setOnSeekBarChangeListener  new  OnSeekBarChangeListener         Override  public void onStopTrackingTouch SeekBar seekBar     vSeek setProgress  50            Override  public void onStartTrackingTouch SeekBar seekBar        TODO Auto generated method stub          Override  public void onProgressChanged SeekBar seekBar  int  progress   boolean fromUser     String stringV   Integer toString progress     vText setText  stringV     String messageA    A    String messageF         byte   sendA   messageA getBytes     mDataService write sendA     try         Thread  sleep 1       catch  InterruptedException e        TODO Auto generated catch block  e printStackTrace              Log d  OutputService    Output A Complete     byte   sendV   stringV getBytes     mDataService write  sendV     try         Thread  sleep 1       catch  InterruptedException e        TODO Auto generated catch block  e printStackTrace              Log d  OutputService    Out
45. d 2 0 1 6 ECLAIR 0 1  Android 2 0 5 ECLAIR   Android 1 6 4 DONUT   Android 1 5 3 CUPCAKE   Android 1 1 2 BASE 1 1   Android 1 0 1 BASE    Android applications designed for and that utilize features available only in later  versions of Android will not be capable of running on earlier version or API levels of the  operating system  Therefore the selection of a platform will mean that all devices    running an older version of Android will be incompatible  reducing the number of    devices capable of running the application  Since our application will require Bluetooth  functionality we can eliminate any platform versions that did not support Bluetooth  The  Bluetooth Adapter Class  7  was first incorporated into Android 2 0  API level 5 AKA  Eclair  which sets the minimum API level that will be able to support our needs   Additionally Android publishes statistics on a monthly basis that tells us the relative    number of devices that run a given platform version  8      Distribution  e  oom 8 1 1        Froyo  2 3 3   Gingerbread 10 17 8   2 3 7  3 2 Honeycomb 13 0 1   4 0 3   Ice Cream 15 14 3   4 0 4 Sandwich ae  4 1 x Jelly Bean 16 34 4   4 2 x 17 18 1  ce Cream Sandwich g  4 3 18 8 9   4 4 KitKat 19 5 3     Data collected during a 7 day period ending on April 1  2014   Any versions with less than 0 1  distribution are not shown     Figure 5   Relative Number of Devices by Platform Number   API level   Code Name  8     Based on Figure 5 as of April 2014 approximately 81  of
46. dditionally the    ActivityBot is compatible with a number of microcontroller boards produced by    Parallax        Figure 7   ActivityBot Robot Kit  9     When selecting a microcontroller for this project I considered a number of factors to  help make my decision  Factors considered included startup cost  open source IDE   compatibility with existing add ons   robotic platforms  the availability of documentation  and the architecture   processing power of the microcontroller  I found that there were  two microcontroller platforms at the forefront of the hobby   armature robotics  community  the Arduino platform and the Parallax Propeller platform  Both platforms  compared equally across many aspects as both offered products with a 32 bit processor   both offer free open source IDE   s  both are in the same price range  both offer a large  number of add ons   compatible robotic platforms and both have a large online support  community  I did however find two differences that for my application were the deciding  factor in selecting the Propeller Activity Board from Parallax Figure 8 over a similar  board from Arduino  The Propeller microcontroller has a unique architecture unlike  many others including the Arduino  while most contain a single processor or cog the    Propeller contains 8 independent 32 bit processors     10    Propeller       Activity Board              Figure 8   Propeller Activity Board  10     This allows for a consolidated package that can perform multiple
47. del  transmitl   rxcode2 if never mov _ rxcode2  receive2   txcode2 if never mov txcode2  transmit2   rxcode3 if never moy rxcode3  receive3   txcode3 if never mov _ txcode3  transmit3    84    j INITIALIZATIONS                  port 3 initialization                                                                test rxtx_mode3 4OCTX wz    init tx pin according to mode  test rxtx_mode3  INVERTTX we  if z ne cor outa txmask3  if z or dira txmask3   patch tx routine depending on invert and oc     if invert change muxc to muxnc   if oc change outa to dira  if z eq cor txout3 domuxne    patch muxc to muxnc  if nz movd txout3  dira  change destination from outa to dira   patch rx wait for start bit depending on invert  test rxtx mode3  INVERTRX wz    wait for start bit on rx pin  if nz xor start3 doifc2ifnc  if cjmp to if nc   patch tx routine depending on whether cts is used   and if it is inverted  or ctsmask3  0 wz    cts pin  z not set if in use  if nz test rxtx_mode3  INVERTCTS we  c set if inverted  if nz and c or ctsi3 doif_z or nc    if  nc jmp  TTA  reversed order to  correctly invert CTS  if nz and ne or ctsi3 doif_z or c    if cjmp   f not cts remove the test by moving   the transmit entry point down 1 instruction   and moving the jmpret over the cts test     and changing co routine entry point    if z moy txcts3 transmit3  copy the jmpret over the cts test  if z moys ctsi3  txcts3    patch the jmps to transmit to txcts0  if z add txcode3  1  change co routine entry to 
48. done while other cogs work to interpret the data received and    generate the pulse commands require to run the platforms motors              I Cog 0 i    Shared Global Memory i  Initialize drive l    i aw comman oe  l variables to R d j i l  osition      neutral values i data ee aide l                          J  l Initialize serial l    jcommunication  l  I ports  l Launch cog 1 i l l  l l Read raw data l l Raad l  Launch cog2   I l Commands l  l l l  Wait to receive l interpret and l l  l data l l convert to i l Generate Pulse i  l i l potisni     i l to servos i  l Interpret data l l  and store   l Si l Pause  20 milli   l  l according to l l l   econds  index l Commands l l  m        j     bl         Ll Ll Ll            Figure 20   Level 1 Block Diagram of the Propeller Microcontroller and the Interaction between    Cogs    A block diagram of the processes executed on each cog as well as the interaction    between cogs and the shared global memory can be seen in Figure 20  Additionally the    24    Spin source code implemented on the Propeller microcontroller can be found in    Appendix 6 5 3 with supporting libraries in appendix sections 6 5 4 and 6 5 5     25    3  RESULTS AND DISCUSSION    To determine if the attempt to create and implement a communication protocol between  a mobile device and a robotic platform was successful I determined it was best to  implement the device on physical hardware  This would provide means of comparison  between existing radio controll
49. eContext    address toString     Toast LENGTH SHORT   show         Set the results and finish the activity  setResult  Activity RESULT OK  intent    finish           End of on item click       End mDeviceSelectedListener                     The Broadcast Receiver for when devices are found and discovery  is finished  private final BroadcastReceiver mReceiver   new       BroadcastReceiver       Override  public void onReceive  Context context  Intent intent     String action   intent getAction         When discovery finds a device  if  BluetoothDevice ACTION FOUND equals action         Get the Bluetooth Device from the Intent  BluetoothDevice device    intent getParcelableExtra  BluetoothDevice EXTRA DEVICE      T   its already paired skip is since its             already been listed  if  device getBondState       BluetoothDevice BOND BONDED                mNewDevicesArrayAdapter add device getName       n     device getAddress         End if      End if  else if     BluetoothAdapter ACTION DISCOVERY FINISHED equals action      setProgressBarIndeterminateVisibility  false    setTitle R string select device    if  mNewDevicesArrayAdapter getCount       0      String noDevices    getResources    getText  R string none found   toString     mNewDevicesArrayAdapter add noDevices        End if      End else if                    End onRecieve      End Broadcast Receiver                  End of DeviceListActivity Class    55    6 4 4 Data Resolver Service    package com dynamicsoluti
50. echnologies Mobile Controlled Robot    http   www projectsof805 1 com mobile controlled robot    5  Mobile Operating System World Wide Market Share     International Business Times       http   www ibtimes com android vs ios whats most popular mobile operating system        your country  1464892        6  Android platform names  API levels  and Code names  http   developer android com guide topics manifest uses sdk element html    7  Bluetooth Adapter Class  http   developer android com reference android bluetooth BluetoothAdapter html        8  Relative number of devices running a given Android version or API level  http   developer android com about dashboards index html    9  ActivityBot Robot Kit manufactured by Parallax  http   www parallax com product 32500        10  Propeller Activity Board Manufactured by Parallax  http   www parallax com product 32910    11  RN 42 Bluetooth Adapter manufactured by parallax  http   www parallax com product 30086    12  Android Developers Website  http   developer android com index html    13  Android SDK download link  http   developer android com sdk index html    14  Parallax Main Webpage          http   www parallax com     29     15  Propeller software and driver download    http   www parallax com downloads propeller tool software     16  You Tube video of application and robotic platform in action    http   youtu be ytDogEmw2ZQ    30    6  APPENDICES                                                                               
51. ed robotic platforms  even something as simple as an RC  car would serve as an acceptable analog for comparison    Along the way I uncovered several unforeseen challenges that did create good  learning opportunities  some directly relevant to my work and others not as much  One  such example was the use of the Easy Bluetooth Module which was offered by Parallax  for some period of time  The most notable difference between the Easy Bluetooth  Module and the RN 42 Bluetooth Adapter was the lack of RTS CTS flow control for the  asynchronous serial interface between the Bluetooth module and the microcontroller   While initially I did not believe this would be an issue  I was unable to write an  application that was able to maintain a good connection  The adapter and the Propeller  were constantly getting out of sync causing slow transfer rates and data loss  This issue  was especially challenging to debug as it was difficult to determine if the issue was with  the data being transmitted over Bluetooth or if it was the sync between the module and  the Propeller  However  I am now confident that the lack of flow control was the source  of the problem as all sync issues were resolved with the implementation of the RN 42  module with no major changes to the structure of the Propeller code  It is also worth  noting that the Easy Bluetooth module is now discontinued  however Parallax does still  offer support for the product on their web page    As an additional means for measuring suc
52. eeeeeeceseceseeeeeneeerees 41  6 4 1 Main Activity Java Odes oie  ceshenerea ice uij an tovecaetiestohcnuaeve ous 41  6 4 2 Bluetooth Data Transfer Service    ecesscesssssseseeccescctsseseeneesoeeess 47  643 Devic Eist ACtvityeosiensseean a e E a a an a 52  GAA    Data Resolver Service se arii a a e a ie ean a eaei 56  ActivityBot Propeller  Spin Source Code        sssssssesessseessessesseossessresresseesreseessee 56  6 5 1 RN 42 Bluetooth Module Configuration  Spin Source Code                56  6 5 2 RN 42 Bluetooth Module Verification  Spin Source Code                   60  6 5 3 ActivityBot  Spin Source Code Implemented on the Propeller   Microcontroller sisien eo ctu Da cane Sah Si fencetecg 64  6 5 4 FullDuplexSerial4port Spin Library 200 0    ce eecceesseceteceteeeeeeeeteeesseees 71  6 5 5  DatalO4port Spin Library cucei nasa cawedys secarederdetanivansceadeeestedac gen enaaeyeeeeeas 108    ii    LIST OF TABLES    Table 1   List of Android API Levels and Corresponding Code Names  6               0008 7  Table 2   Correlation between Index  its Meaning on the Android Device and the Robot  Aiea erst stitial Act nl E E etl Dell Dalen Succ Ach ET E E 9s aah el tail  17  Table 3   Correlation between Numerical Value  its Physical Implementation on the  Android Application and the Robotic Platform for Parameters A  amp  Buu    eeeeeeeeeeee 18  Table 4   First 128 Characters of the ASCII code wo    cei cceesssesecseeeecsseeeceseeeeeaeesseaeens 31    iii    LIST OF ACCRONYMS  
53. ell  and ultimately it   s a matter of personal taste     a  SAMSUNG    12 45    Thu  Nov 15  Tala        PEERS  AccuWeatiey       Figure 6     Mobile Platform  Samsung Galaxy Note II Running Android 4 3 Ice Cream Sandwich    2 1 2 Selecting a Microcontroller and Robotic Platform    The robotic platform could take many forms for one to demonstrate control of it  It could  be as simple as just a microcontroller with an output to a monitor   terminal showing the  change in variables being controlled  However this method of implementation would not  provide a good feel for the speed and responsiveness of the control of the robot  To  better perceive   judge these qualities I decided it would be best to implement a robotic  platform capable of movement  This would provide a platform that could be compared to  the responsiveness found and expected by users of existing    Radio    controlled robotic  platforms  I selected the ActivityBot Robot Kit  Figure 7  as shown with optional  Propeller Activity Board Attached  manufactured by Parallax  The ActivityBot Kit  provides a platform that is capable of movement as provided by the two wheels  connected directly to continuous rotation servos  Since it only has two wheels a third  sliding post is provided for stability  It also changes direction using skid steering  that is  to turn left the right wheel must be rotating faster than the left wheel  It is also capable of    turning in place by rotating the wheels in opposite directions  A
54. ent                    End of write       private void connectionFailed              End of connection failed    public synchronized void connected  BluetoothSocket socket   BluetoothDevice device  final String socketType       Start the thread to manage the connection and perfor       transmission       mConnectedThread   new ConnectedThread socket  socketType     mConnectedThread start             End of connected    private class ConnectedThread extends Thread    private final BluetoothSocket mmSocket   private final InputStream mmInStream   private final OutputStream mmOutStream     public ConnectedThread BluetoothSocket socket  String  socketType     mmSocket   socket   InputStream tmpIn   null   OutputStream tmpOut   null           Get the bluetooth socket input and output streams  try     tmpIn   socket getInputStream      tmpOut   socket getOutputStream         End of try  catch  IOException e       Log e TAG   temp sockets not created   e        End of Catch          mminStream   tmpIn   mmOutStream   tmpOut             public void run      byte   buffer   new byte 1024      50    int bytes   String end           StringBuilder curMsg   new StringBuilder             Keep listening to the input stream while connected  while true       try      while   1     bytes    mmIinStream read buffer         curMsg append new String buffer  0   bytes  Charset  forName  UTF 8         String fullMessage    curMsg toString       mHandler obtainMessage  MainActivity MESSAGE READ   fu
55. fill  rx head ptr     rx_head    TTA  note  addresses of the head and    tail counts are passed to the cog   rx head ptrl     rx_head1   if that is confusing  take heart  These  are pointers to pointers to pointers   rx_head_ptr2     rx_head2   rx_head_ptr3     rx_head3    80    rx tail ptr     rx_tail   rx tail ptrl     rx_taill  rx tail ptr2     rx_tail2  rx tail ptr3     rx_tail3  tx_head_ptr     tx_head  tx_head_ptrl     tx_head1  tx_head_ptr2     tx_head2  tx_head_ptr3     tx_head3  tx_tail_ptr     tx_tail  tx_tail_ptrl     tx_taill  tx_tail_ptr2     tx_tail2  tx_tail_ptr3     tx_tail3  okay    cog    cognew  entry   rx_head    1    PUB Stop    Stop serial driver   frees a cog  if cog  cogstop cog    1     PUB getCogID   result    return cog  1    PUB rxflush port    Flush receive buffer  here until empty     repeat while rxcheck port    gt  0    PUB rxHowFull port     TTA  added method   returns number of chars in rx buffer  return   rx_head port    rx_tail port     rxsize port      rxsize port     rx_head and rx_tail are values in the range 0  lt       lt  RX _BUFSIZE    81    PUB rxcheck port    rxbyte    Check if byte received  never waits    returns  1 if no byte received   00   FF if byte     TTA  simplified references  if port  gt  3  abort  rxbyte    if rx_tail port   lt  gt  rx_head port   rxbyte    rxchar port    byte rxbuff_ptr port  rx_tail port    rx_tail port      rx_tail port    1     rxsize port     PUB rxtime port ms    rxbyte   t    Wait ms milliseconds
56. for accepting  connection attempts  the module must first be configured  This is done via the  asynchronous serial interface with RTS CTS flow control which can be established  between the Propeller and the Bluetooth module  Supporting documentation and the  products user manual go into sufficient detail on how to set up and configure the    Bluetooth module based on the desired application  both are available on the product   s    23    webpage  11   Additionally the Propeller  Spin code used to configure and then verify  the state of the Bluetooth adapter can be found in Appendix sections 6 5 1 and 6 5 2    The task of implementing the communication protocol on the ActivityBot robotic  platform utilizes the multiple cores of the Propeller microcontroller  Since the  communication protocol does not specify when or how frequent data will be transmitted  and received  the robotic platform must be ready and capable of receiving a message at  any time  For example on a single processor microcontroller  if a message was received  while the microcontroller was processing a piece of data that was received earlier or  outputting a pulse command to one of the servo motors the incoming message could be  missed  However  since the Propeller microcontroller is capable of preforming multiple  tasks simultaneously by utilizing its 8 processors or cogs  it can have one processor that  is solely devoted to listening for incoming data  helping to ensure a message is not  missed  This can be 
57. for the pin used for cts input       a single bit set  a mask for the pin used for rts output       bit ticks for start bit  1 4 of standard bit      clock ticks per bit      threshold in count of bytes above which will assert rts      Hub address of data received  base plus offset      pasm writes WRBYTE to hub at this address       Hub address of data tranmitted  base plus offset    pasm reads RDBYTE from hub at this address     105    txbuff tail ptr2 long 0   txbuff tail ptr3 long 0   rx head ptr long 0   pointer to the hub address of where the head and  tail offset pointers are stored   rx head ptrl long 0   these pointers are initialized in spin but then used  only by pasm   rx head _ptr2 long 0   the pasm cog has to know where in the hub to  find those offsets    rx head _ptr3 long 0   rx _tail ptr long 0   rx_tail ptrl long 0   rx_tail_ptr2 long 0   rx_tail_ptr3 long 0   tx_head_ptr long 0   tx_head_ptrl long 0   tx_head_ptr2 long 0   tx_head_ptr3 long 0   tx_tail_ptr long 0   tx_tail_ptr1 long 0   tx_tail_ptr2 long 0   tx_tail_ptr3 long 0    endfill  FIT    End of the object memory zeroed from startfill to endfill in the init stop      The above is all of the necessary code that must fit in the cog      The following are extra bytes if necessary to provide the required rx and tx buffers       the number required is computed from the aggregate buffer size declared  minus the    above initialized but recycled variables     106    extra byte 0  RXTX BUFSIZE    RXTX BUFS
58. g Start  Slider Bars Enabled ou    eeeeeeeeeeeteeneeees 35    Figure 26   Screen Requesting the User to Enable Bluetooth on the Device                   35  Figure 27   Alerting the User of Successfully Enabling Bluetooth       0    cece ceeeeeeeeeee 36  Figure 28   Alerting the User  Bluetooth Failed to Initialize    ee eeeeeeeeeeeeeeeeeneeees 36  Figure 29   Example of User Inputs  c cscccationcaessetundysaeacauaaeniengeenoetidy onan oseesoanns 37    vi    ACKNOWLEDGMENT    To my parents who have taught me the importance and value of education and to my    loving wife whose support has kept me going when I might have otherwise quit     vii    ABSTRACT    The objective of this paper is to show that it is possible to create a single Android  application capable of working with a number of electronic devices typically used within  the hobby and armature robotics field  without the devices creator having to know  anything about developing an Android application  To do this  a standard  communication protocol must be established between Android powered devices and  other electronic devices  To limit the scope of this task  this paper considers  communication between an electronic device powered by a typical microcontroller and  an Android 4 0  Jelly Bean  or later powered device  Additionally communication  between the two devices takes place over Bluetooth communication channels V2 1 or    later     Vill    1  INTRODUCTION BACKGROUND  1 1 Background    All communications betwee
59. ged  The Java source code associated with the block diagram    22    from Figure 19 can be found in Appendix 6 3 6  Likewise relevant screen captures of the    user interface can be found in Appendix 6 2                 User   lifted  finger off  lider               User selects  start from the  mobile device    Wait for user input  I change in status  of slider bars           slider bar          Horizontal          Return slider to                 a     Transmit bytes Neutral or  device over Bluetooth Vertical     Index   Slider  Position      Prefix    Construct full  message  Add Index B  Prefix    Figure 19   Level 1 Block Diagram for Reading User Input and Transmitting to a Remote Device               Add Index A       Parse message  into bytes    2 2 2 2 Implementation of the Communication Protocol on the Robotic Platform    The task of implementing the communication protocol on the robotic platform  and Propeller microcontroller is similar to that of its implementation on the Android  device  However  there is one key difference that simplifies to some degree the task on  the robotic platform  no user interface is required  While instead of interfacing with a  user and obtaining input  the Propeller microcontroller is tasked with reading input per  the communication protocol and outputting signals to drive the platforms motors    To establish communication between the Bluetooth module and the Propeller  microcontroller as well as setting the module in the correct mode 
60. h interprets the tones of the numeric keys being pressed through the headphone  jack  Commands are sent by pressing one of the numeric key on the operator   s cell  phone  frequencies are transmitted over the cell network   towers  received on the  platform mounted cell and interpreted by the microcontroller as commands  The benefits  of this set up is that it requires no additional software to be installed on the cellphone  as    it utilizes existing functionality built in to make phone calls        Figure 3   MicroTronics Technologies Mobile Control Robot  4     The downside is that the system is limited to only 12 unique codes correlating to the 12  keys on   frequencies created by a phone  10 Numeric keys 0 through 9  the pound key  and the asterisk key  and only one command can be sent at a time  Another difference is  that the signals are sent over a cellphone network  so the range is only limited by the size  of the cell network  however the devices will only work where cell service exists and are  dependent on a network outside the users control  The Bluetooth connection I have  proposed does have a limited range which is many times smaller than that of a modern  cell network  However  it is not subject to the infrastructure requirements of a cell  network  i e  it will operate where cell coverage is not provided  Additionally the  Bluetooth network is completely in the users control and can be optimized to meet the    requirements of the application     1 3 Objective
61. he end of  fds tx DEBUG  inByteArr ctr      every message from the RN 42 Unit  repeat until inByteArr ctr     13  If successfull  CMD  is returned  ctr      inByteArr ctr     fds rx A_PORT   fds tx DEBUG  inByteArr ctr      Pause 1200   Pause for 1 2 seconds  the       message will  be ignored if     additional messages are sent within 1 second of the     S       fds str A_ PORT  String  D     fds tx A_ PORT  13   fds tx A_ PORT  10     repeat 11   ctr    0   inByteArr ctr     fds rx A_PORT    fds tx DEBUG  inByteArr ctr     repeat until inByteArr ctr     13  ctr    inByteArr ctr     fds rx A_PORT   fds tx DEBUG  inByteArr  ctr      63    fds str A_ PORT  String          Message sent       that tells the RN 42 to    Exit command mode    fds tx A_PORT  13   If successfull  END  is returned  fds tx A_ PORT  10     ctr    0  inByteArr ctr     fds rx A_PORT   fds tx DEBUG  inByteArr ctr    repeat until inByteArr ctr     13  ctr    inByteArr ctr     fds rx A_PORT   fds tx DEBUG  inByteArr ctr      6 5 3 ActivityBot  Spin Source Code Implemented on the Propeller  Microcontroller     File  PBAA_v0 7 spin    PBAA   Propellar Bluetooth and Android     v0 7   Working control of platfrom and successfull bluetooth comm    CON    _xinfreq   5_000_000  _clkmode   xtall   pll16x     Bluetooth Constants    DEBUG  0   Debug port sends results to Parallax Serial  Terminal   A PORT  1  Bluetooth Module   A RESET  0   To RST pin on RN 42 Bluetooth Module   A TX  l   To RX pin on RN 42 Bluetooth 
62. he keyboard manufacture to develop and produce a keyboard without requiring them to    write custom software for the computer    1 2 Prior Work    Much work has been done amongst the amateur robotic community to develop platforms  that are controlled by mobile devices as shown in  3  and  4   Additionally several  companies offer small robotic devices that can be controlled by mobile devices typically  from the Android of Apple operating systems  These systems come with proprietary  software for both the robot and the mobile device that is specifically designed to control    only the device sold by the manufacture  Figure 1  the Rover Revolution available from    Brookstone  is one such example which allows the end user to remotely operate the  device from an application on an Apple or Android device  This device also has  advanced capabilities that allow the user to remotely control the vehicle while also  streaming video from an onboard camera  Due to the high bandwidth requirements to  support streaming video the device utilizes WIFI instead of Bluetooth or other lower  frequency RF communication protocols   2  Note that this software nor the  communication protocol is distributed as open source software for others to modify  or    implement in their own projects and applications        Figure 1   Rover Revolution Available from Brookstone  2     Parallax a popular supplier of microcontrollers and other components commonly  used by armature robotic developers  offers tutor
63. hed depending on whether a cts or rts pin are supplied  The normal      routines support cts rts processing  If the cts rts mask is 0  then the code is patched    83     to remove the addtional code  This means I O modes and CTS RTS handling adds no  extra code      in the rx tx routines which not required     Similar with the co routine variables  If a rx or tx pin is not configured the co routine     variable for the routine that handles that pin is modified so the routine is never called   We start with port 3 and work down to ports because we will be updating the co routine  pointers    and the order matters  e g  we can update txcode3 and then update rxcode3 based on  txcode3     TTA   coroutine patch was not working in the way originally described   TTA   patched      unused coroutines jmprets become simple jmps       Tim s comments about the order from 3 to 0 no longer apply       The following 8 locations are skipped at entry due to if_never      The mov instruction and the destination address are here only for syntax      the important thing are the source field     primed to contain the start address of each port routine      When jmpret instructions are executed  the source adresses here are used for jumps      And new source addresses will be written in the process     entry   rxcode if never moy rxcode  receive   set source fields to initial entry points  txcode if never mov __ txcode  transmit   rxcodel if never mov rxcodel  receive l   txcodel if never mov txco
64. ials and educational material for many  of their products  In one such tutorial  shown in Figure 2  Parallax demonstrates the  ability to send commands to a Propeller microcontroller remotely from a PC via a  Bluetooth Serial Port Profile   3  Additionally the example provides open source  software for the microcontroller  mainly programs that were already available as  published open source library   s tied together with a single custom application  The  example utilizes an RN 42 Bluetooth adapter and the user sends commands to the  microcontroller via a serial terminal like HyperTerminal or in the case of the example  the Parallax Serial Terminal  This example will be used a starting point for my work on  the microcontroller side of the task  While this application demonstrates the ability to  send data over a Bluetooth connection it has essentially used the Bluetooth connection to    replace the wired connection with the computer  User input is no different than if the    computer was directly wired to the computer and no generic communication protocol is    established        Figure 2   Parallax RN 42 Bluetooth Demo  3     An alternative approach to controlling a robot via a cell phone was demonstrated by  MicroTronics Technologies  4  the device is shown in Figure 3  In this application a call  is placed from a user   s cell phone to a cell phone mounted on the remote platform  The  platform mounted cell is connected to the microcontroller through a decoding module  whic
65. ilar processing  power  memory  RAM and ROM   screen size  screen resolution  touch screen  capability  battery life  Bluetooth  Wi Fi  GPS and cell network capabilities  With no  limiting factors on the selection of an OS from an available   required hardware  standpoint  the decision came down to two factors  the market share or number of  devices in service for the operating system and the ability to provide an open source  solution  Googles Android OS is known for its open source developer friendly  environment and as of May 2012 it has surpassed Apple IOS in terms of market share in  mobile devices  Figure 4  As of the end of 2013 Android represents over 43  of the    market compared to Apple its closest competitor which has just over 20  of the market     LATE 2009 JAN 2010 MAY 2012  HTC Samsung and Google launches its first mobile device  For the first time  Android surpasses  Motorola launch the Nexus One  It   s not very successful  Apple iOS    market share   A id   ndroid powered MAY 2010    emos Google launches Android 2 2  Froyo   the  first mobile OS capable of mutltiasking   Apple s iOS still lacked this type of   functionality        NOW  Android has more than double  Apple iOS    market share          Android  43     iOS  20 6     Symbian  5 8    Nokia    Series 40  13 2    Nokia     BlackBerry  3 5   Samsung  4 7   Windows  1 8     Figure 4     World Wide Mobile OS Market Share  5     With the Android OS selected as the operating system of choice for develop
66. import java util UUID     import android bluetooth BluetoothAdapter   import android bluetooth BluetoothDevice   import android bluetooth BluetoothSocket   import android content Context    import android os Build    import android os Handler    import android util Log    import android widget Toast                 public class BluetoothDataTransferService         Member Fields   private ConnectThread mConnectThread   private final BluetoothAdapter mAdapter   private final Handler mHandler    private ConnectedThread mConnectedThread              UUID for this application   MY _UUID is the secure UUID from  the google bluetooth chat example  private static final UUID MY UUID    UUID  fromString  00001101 0000 1000 8000   O0805f9b34 fb       UUID fromString   fa87c0d0 afac 1llde 8a39   0800200c9a66           public BluetoothDataTransferService  Context context  Handler  handler     mAdapter   BluetoothAdapter getDefaultAdapter     mHandler handler     public synchronized void connect  BluetoothDevice device        Start the tread to connect with the given devic  mConnectThread   new ConnectThread  device     mConnectThread start             private class ConnectThread extends Thread    private final BluetoothSocket mmSocket   private final BluetoothDevice mmDevice   private String mSocketType    Secure            public ConnectThread BluetoothDevice device     mmDevice   device   BluetoothSocket tmp   null     48       Get a bluetoothSocket for a connection with the  given Blue
67. in my creation of an Android application that outputs messages per the  communication protocol and development of a robotic platform that accepts messages  per the communication protocol and response with the appropriate actions that it is  possible to implement such a communication protocol  However  there is still further  work to be done  as I have thus far only defined two parameters in the communication  protocol  speed and direction or A and B  While these two parameters are sufficient for a  simple two wheeled robot they would not be sufficient for control of say a helicopter  which would require at least 4 parameters for control over roll  pitch  yaw  and elevation   I can envision a protocol that takes advantage of the full 52 upper and lower case  characters for all sorts of different parameters and for all sorts of different robotic  platforms  Additionally  the protocol can also be utilized to transmit data from the  robotic platform back to the Android application possible using upper versus lower case    letters to distinguish the difference of in the direction of flow of the data     28    5  REFERENCES     1  Definition of a communication protocol    http   www webopedia com TERM C communications_protocol html           2  Rover Revolution    App Controlled Wireless Spy Vehicle  http   www brookstone com rover revolution wireless spy vehicle   3  Parallax RN 42 Bluetooth to PC demo  http   learn parallax com project rm 42 bluetooth pc demo    4  MicroTronics T
68. ion on the Android    Application and the Robotic Platform for Parameters A  amp  B             Parameter A Parameter B          Numeric Value            Android Correlation Robotic Platform Correlation Android Correlation Robotic Platform Correlation                100 Slider in topmost position Full speed forward Slider in rightmost position Full turn right  Slider in central position Neutral Slider in center position Neutral        Full turn left             Slider in bottommost position Full speed reverse Slider in leftmost position       Additionally  before we can dive into the implementation of the protocol on the  Android and robotic platforms  it is important to create a roadmap or high level system  block diagram describing the flow of input form the user to the eventual signals that will  be sent to the motors on the robotic platform  The block diagram governing the entire  system can be seen in Figure 15  This diagram shows which tasks will be the  responsibility of the Android device and which operations the robotic platform will be  responsible for  Additional block diagrams showing in greater detail the operations on  the individual devices as well as their interaction are included in later sections of this    report     18     eek Sn Re Le a ee a ee ae re ta aaa    Android Device    I User scans for   l and connects User input on   l to a remote BT Android Device  Device    ESS ee eee ee    to data  amp  sent  via Bluetooth        l  Input converted      l  l 
69. led by 3 3V which aligns with the 3 3V powered    Propeller microcontroller     11       Figure 9   RN 42 Bluetooth Adapter  11     The RN 42 module communicates with the Propeller microcontroller via asynchronous  serial interface with RTS CTS flow control at a user programmed baud rate which was  set to 9600 bps for compatibility with the microcontroller  Further support information  and examples of use with the Propeller microcontroller can be found on the product   s  web page  11     The fully assembled Robotic Platform is shown in Figure 10     USB Programming  amp  Debug Port       Figure 10   Assembled Robotic Platform with Bluetooth Adapter    while the system wiring schematic is shown in Figure 11     12             Continuous Continuous  Rotation Servo Rotation Servo  Right          Figure 11   System Wiring Diagram for the Robotic Platform and Bluetooth Adapter    2 1 3 Setting up the Development Environment  Android  amp  Propeller    Providing a full description of how to download  install  and configure the Android and  Propeller development environments is outside the scope of this project  However below  is a brief description of the software required as well as links to web pages that will go  into full detail on the subject    Google has a website  12  completely devoted to Android Developers  this site  provides developers with free training modules  full library support of the Android APIs   Application Programming Interfaces  and instructions on how to d
70. ll be relative to    4  The characters following the index  i e  the second and so forth bytes must be  numeric as the expectation is they will be converted to and stored as a single  number  This number can contain up to 10 characters and its numeric value must  not exceed 2 147 483 647  This value may be positive or negative    5  The last character of the message must be an          Exclamation Point   This acts  as a stop byte and lets the program know that the message is complete    An example of a message written to the rules of the communication can be seen in  Figure 14  Note that the example message shown    X123     is displayed in its symbol  format per the ASCII code  A conversion chart between the Symbol  Decimal  and  Binary formats for the first 128 ASCII characters is included in Appendix 6 1     Communication Protocol    X 123            The first character or The characters to The         character is      Index    represents the follow will represent used as a unique   parameter being sent the value of the stop byte or   in the message  In this parameter specified identifier  Upon   program the character by Index A  They will receiving this   A or    Index    A be interpreted as a character the   designates the value of number and program knows the   the vertical slider bar  therefore must be message has ended   numeric     Figure 14   Example Message per the Communication Protocol    16    As an example    X123     broken down and converted to binary forma
71. llMessage   sendToTarget       curMsg delete 0  bytes            End of try  catch  IOException e       connectionLost      break      End of Catch      End of while     End of run                public void cancel      try    mmSocket close        end of try  catch  IOException e        TODO  handle exception     End of cancel     End of cancel                    Write to the connected OutStream      param buffer The bytes to write  xy  public void write  byte   buffer     String good   new String  buffer   Charset  forName   ISO 8859 1       buffer   good getBytes  Charset  forName    ISO 8859   1       try    mmOutStream write  buffer           end of try  catch  IOException e              end of catch    51        En       6 4 3        End of write     End of ConnectedThread          d of BluetoothData    Device List Activity    package com dynamicsolutions bluetest3     import java util Set     import android app Activity   import android bluetooth BluetoothAdapter   import android bluetooth BluetoothDevice     import android content  import android content Context   import android content     BroadcastReceiver       Intent        import android content IntentFilter     import android os Bundle   import android view View        import android view View OnClickListener   import android view Window     import android widget AdapterView    import android widget AdapterView OnItemClickListener   import android widget ArrayAdapter    import android widget Button    import and
72. ment   the next question that arises is which variant or platform version will be targeted for the  application development  Platform versions in Android are tracked by API level  and to    most they are known by their clever nick names like Gingerbread  Ice Cream Sandwich    or Kit Kat  Google has made a pattern out of naming their new platform versions after  desserts or snacks in alphabetical order  Table 1 contains a list of the current API levels   Android version numbers and platform code names from version 1 0 or    Base    to their  latest version Android 4 4   API 19 or    Kit Kat     API levels are analogous to the  different versions of Windows operating system like XP  Vista  Windows 7 or Windows  8  Each new API brings in various software and hardware support updates like the ability    to support a GPS module or the ability to support multi point touch screen displays     Table 1   List of Android API Levels and Corresponding Code Names  6     Platform Version API Level VERSION_CODE    19    Android 4 4 KITKAT   Android 4 3 18 JELLY_BEAN_MR2  Android 4 2  4 2 2 17 JELLY_BEAN_MR1  Android 4 1  4 1 1 16 JELLY BEAN  Android 4 0 3  4 0 4 15 ICE CREAM SANDWICH MR1  Android 4 0  4 0 1  4 0 2 14 ICE_CREAM SANDWICH  Android 3 2 13 HONEYCOMB _MR2  Android 3 1 x 12 HONEYCOMB MR1  Android 3 0 x 11 HONEYCOMB  Android 2 3 4 10 GINGERBREAD MR1  Android 2 3 3   Android 2 3 2 9 GINGERBREAD  Android 2 3 1   Android 2 3   Android 2 2 x 8 FROYO   Android 2 1 x 7 ECLAIR MR1  Androi
73. mit     txjmp2 jmp ctsi2  byte done  transmit next byte    Transmit3                                                                                        transmit3 jmpret txcode3 rxcode  run a chunk of receive code  then return    99    txcts3    ctsi3 if z    test ctsmask3 ina wc    if flow controlled dont send  rdlong tl tx_head_ptr3  cmp tl tx_tail3 wz    jmp   transmit3  may be patched to if z or_c or if_z_or_nc       rdbyte txdata3 txbuff_tail_ptr3  add tx_tail3  1  cmpsub tx tail3 txsize3 wz    TTA  for individually sized buffers     will zero at rollover    if z    if nz    txbit3    txout3     wait3    if nc    wrlong tx_tail3 tx_tail_ptr3  moy txbuff_tail_ptr3 txbuff_ptr3  reset tail_ptr if we wrapped  add txbuff tail ptr3  1    otherwise add 1    jmpret txcode3 rxcode    shl txdata3  2  or txdata3 txbitor  ready byte to transmit  moy txbits3  11    mov txcnt3 cnt    shr txdata3  1 we  muxc outa txmask3  maybe patched to muxnc dira txmask    add txcnt3 bit_ ticks3  ready next cnt    jmpret txcode3 rxcode  run a chunk of receive code  then return  mov tl txcnt3    check if bit transmit period done  sub tl cnt  cmps t1  0 wc   jmp   wait3    100    djnz txbits3  txbit3    another bit to transmit     txjmp3 jmp ctsi3    byte done  transmit next byte     The following are constants used by pasm for patching the code  depending on options    required   doifc2ifnc long  003c0000    patch condition if c to if_ne using xor   doif z or c long  00380000    patch condition if
74. n devices require that the devices agree on the format of the  data  The set of rules defining said format is called a protocol  1   Communication  protocols are almost everywhere we look from computers to televisions to basic mp3  players  They can even be compared to social mannerisms in today   s culture  Take the  activity of answering a phone  when someone answers the phone they say    Hello    or  some other equivalent greeting  This first phrase lets the person on the other end of the  phone know that its their turn to speak and that the person they have called is ready to  receive information  This can be equated to flow control within a communication  protocol which is used to let one device know that another device is ready for some  communication or data transfer to occur    If a product developer wishes to make an electronic device that allows the end user  to control said electronic device from their smart phone or tablet  since there is currently  no industry standard open source communication protocol applicable to this scenario   they would be forced to develop their own basic protocol  They would not only have to  develop the software on the electronic device side but they would also have to design a  custom application for the end users cell phone or tablet  As a basic example consider  a  company which designs keyboards for computers  There is a standard communication  protocol and standard human interface driver for all modern USB keyboards  This allows  t
75. nsmit to txcts0  if z add txcodel  1  change co routine entry to skip first jmpret     patch rx routine depending on whether rts is used   and if it is inverted    or rtsmaskl  0 wz    if nz or dira rtsmask1    TTA  rts needs to be an output  if nz test rxtx_model  INVERTRTS we   if nz and nc or rtsl domuxne    patch muxc to muxnc   if z mov nortsl recli    patch to a jmp  receivel   if z movs  startl  receivel  skip all rts processing    or txmaskl  0 wz _    if tx pin not used  if z movi transmitl    010111_000   patch it out entirely by making the  jmpret into a jmp  TTA   or rxmaskl  0 wz    ditto for rx routine    if z movi receivel    010111_000   TTA       port 0 initialization                                                                test rxtx_mode OCTX wz    init tx pin according to mode  test rxtx_mode  INVERTTX we  if z nec or _ outa txmask  if z or dira txmask   patch tx routine depending on invert and oc   if invert change muxc to muxnc   if oc change out  to dira  if z eq or  txout0 domuxne    patch muxc to muxnc    if nz moyd txout0  dira  change destination from outa to dira    88       patch rx wait for start bit depending on invert  test rxtx_mode  INVERTRX wz  wait for start bit on rx pin  if nz xor  start0 doife2ifnc    if _c jmp to if nc     patch tx routine depending on whether cts is used   and if it is inverted    or ctsmask  0 wz    cts pin  z not set if in use    if nz or  dira rtsmask    TTA  rts needs to be an output  if nz test rxtx_mode  INV
76. objects       http   forums parallax com showthread php  128 184 Serial Objects for SPIN     Programming    Tim Moore s release notes follow    Also note by Duane Degn     Not all these comments apply to FullDuplexSerial4port   iy    TKK 3K 3K 3K 3K K K K 3K 3K 3K 3K 2K 2K K   K K 3K 3K 3K FK 2K   K   K   K K 3K 8 3K FK FK K   K 2K 3K 3K 28 3K FK FK   K   K K 2K 3K 3K FK FK FK   K   K 2 FK 3K 2 FK FK FK 2K 2K 2s ok 2K K ok     Based on X      Full Duplex Serial Driver v1 1        Author  Chip Gracey z      Copyright  c  2006 Parallax  Inc  i         See end of file for terms of use        x Tim Moore 2008      173    Woke           Woke    Woke    Woke    Woke                                Woke    Woke    Woke    Woke    Woke                         Woke    Woke    Woke    Woke                                Woke    Woke    Woke    Woke           Modified to support 4 serial ports i   It should run 1 port faster than FullDuplexSerial or run     up to 4 ports t   Merged 64 byte rx buffer change z   Merged Debug_PC  Jon Williams  k    TTA  cut the numeric methods  see datalO4port spin    to maintain compatibility with pcFullDuplexSerial4fc i  or use other numeric methods such as  simpleNumbers     Uses DAT rather than VAR so can be used in multiple objects    If you want multiple objects using this driver  you must    copy the driver to a new file and make sure version long is      unique in each version    Added txflush     Optimization perf     1 port up to 750kbps t   2 por
77. oe Oy anne ae MIPS OV OVI OVI Fei we Oe  I Package Explorer 5  amp         f MainActivityjava d activity_main xml  amp   J  DataResolverService java  J  DeviceListActivityjava  3  Bluet      appcompat_v7  lt RelativeLayout xmlns android  http   schemas android com apk res android     xmlns tools  http   schemas android com tools   android  layout_width  fill parent    android  layout_height  fill parent   tools context   MainActivity         appcompat_v7_2  G appcompat_v7_3  19 BlueTest3    G sliderTest android orientation  horizontal   gt    U sliderTest2   G sliderTest3  lt TextView android  id    id txtout       G testApp android  layout_width  fill parent     android  layout_height  wrap content   gt                        id id   t id btn_Send   layout_width  wrap content   layout_height  wrap content    layout_alignParentTop  true        layout_centerHorizontal  true              amp  id text  Start       gt   id   tid textView1l   layout_width  wrap content     layout_height  wrap_ content     layout_alignParentLeft  true      android  layout_alignParentTop  true       amp  android text  V     gt     Figure 17   Android User Interface Code Snippet    In addition to the user Interface the behind the scenes control logic written in  Java for the Android application has an even larger role to play  This is where all of the  activity takes place to support the user interface  interpret user input  manage the  Bluetooth connection   data transmissions  and last but certainl
78. of OnCreate       protected void onDestroy    super onDestroy         Make sure we are not still discovering devices  mBtAdapter cancelDiscovery                  Unregister broadcast listeners  this unregisterReceiver  mReceiver                End of on destroy       Starts device discovery with the bluetooth adapter  private void discoverDevices         indicate scanning in the title  set ProgressBarIndeterminateVisibility  true    setTitle R string scanning            Turn on the subtitle for new devices       findViewByld R id title new devices   setVisibility  View  VISIBLE         T   we are already discovering stop it          if  mBtAdapter isDiscovering       mBtAdapter cancelDiscovery          end if       Request discovery from Bluetooth Adapter  mBtAdapter startDiscovery           end of discoverDevices       The on click listener for all of the devices in the ListViews  private OnItemClickListener mDeviceSelectedListener   new  OnItemClickListener       public void onItemClick  AdapterView lt   gt  av  View v  int  arg2  long arg3        Cancel discovery if it is still active  mBtAdapter cancelDiscovery                  Get the MAC address  which is the last 17    characters in the View  String info     TextView  v  getText   toString     String address   info substring info length     17        create the result Intent and include the MAC  address   Intent intent   new Intent      intent putExtra  EXTRA DEVICE ADDRESS  address         54    Toast makeText  getBas
79. oid com apk res android   gt    lt item android id    tid scan_and_connect   android icon   android drawable ic_menu_search   android title   string scan_and_connect    gt      lt item       39     lt item android id    id discoverable   android  icon   android drawable ic_menu_mylocation   android title   string discoverable   gt    lt  menu gt     6 3 5 String Constants Referenced in the User Interface     lt  xml version  1 0  encoding  utf 8   gt    lt resources gt      lt string name  app_ name  gt BlueTest3 lt  string gt     lt string name  scan_and_connect  gt Scan and Connect lt  string gt     lt string name  discoverable  gt Make device discoverable lt  string gt     lt string name  title paired _devices  gt Paired Devices lt  string gt     lt string name  title new_devices  gt New Devices lt  string gt     lt string name  btn_scan  gt Scan for Devices lt  string gt     lt string name  scanning  gt Scanning for devices lt  string gt     lt string name  none paired  gt No devices have been paired lt  string gt     lt string name  select_device  gt Select a device to connect  to lt  string gt     lt string name  none_ found  gt No devices found lt  string gt                           lt  resources gt     6 3 6 Android Manifest File     lt  xml version  1 0  encoding  utf 8   gt     lt manifest xmlns android  http   schemas android com apk res android   package  com dynamicsolutions bluetest3   android  versionCode  1   android  versionName  1 0   gt         lt uses sdk
80. ons bluetest3        import android content Context   import android os Handler     public class DataResolverService           Member Fields   private final Handler mHandler    private StringBuilder masterString   new StringBuilder      private String end              public DataResolverService  Context context  Handler handler     mHandler   handler     public String SortInputData String inputString     String completeSegment   masterString append inputString       String temp   masterString toString     int endIdX   masterString indexOf  end    if   1    endIdx       completeSegment   masterString substring 0  endIdxX    masterString delete 0  endIdX 1            return completeSegment        else       return  Working                    End of DataResolver       6 5 ActivityBot Propeller  Spin Source Code  6 5 1 RN 42 Bluetooth Module Configuration  Spin Source Code     File  PBAA_v0 2 spin    PBAA   Propeller Bluetooth and Android    v0 2   This application programs the RN 42 to communicate with a 9600 Baud rate    56    commands      New to Version 0 2    CON    _xinfreq   5_000_000  _clkmode   xtall   pll16x     Bluetooth Constants    DEBUG  0  Terminal   A PORT  1  A RESET  0  A TX  l  A RX  2  ACTS  3  A RTS  4    BAUD  9600    VAR    It also demonstrates how to enter command mode and also how to exit it     The program also demonstrates how to record the responses received after issuing      Debug port sends results to Parallax Serial     Bluetooth Module      To RST
81. ownload and install  the latest Android development environment also called the Android SDK  Software  Development Kit   13   The kit includes the Eclipse IDE  Integrated Development  Environment  the ADT  Android Developer Tools  plugin and other required items  A  full list of system and software requirements is available on the webpage as well  Java is  the foundation or base of the Android programming language with specific libraries    added for the increased or specific functionality of Android powered devices  The    13    Android development environment and Eclipse IDE is shown in Figure 12 with a code    snippet from the BlueTest3 application     Java   BlueTest3 src com dynamicsolutions biuetest3 MainActivity java   ADT   On        BOQ HE  Sere      java           a mBluetoo rAdapter  Bit   F REQUEST ENABLE BT inl  a      REQUEST_CONNECT_DEV  OT MESSAGE_READ   int   F MESSAGETOAST   int  St TOAST Strirc  2 mDataService   Bluetccth    mResolverService   Datak       Saved Filters   Search tor messages  Accepts Java regexes  Pretix with pid  app  tag  or text  to limit scope verbose v  H  amp   DE   All messages  no filters        Writable Smait Insert 152 30 Matam T  Sign in te Google     Figure 12   Android Environment and Eclipse IDE with Code Snippet from BlueTest3 Application    Parallax  14  also provides an abundant amount of support information for the  Propeller microcontroller  Additionally the software and drivers required to set up the  Propeller developmen
82. put V Complete     byte   sendF   messageF getBytes     mDataService write sendF     try            Thread  sleep 1       catch  InterruptedException e        TODO Auto generated catch block  e printStackTrace              Log d  OutputService    Output F Complete              btnSend setOnClickListener  new OnClickListener            44    public void onClick View arg0     vSeek setEnabled  true     hSeek setEnabled  true             F            End of onCreate     Override  public void onStart      super onStart          If bluetooth is not enabled request that it is enabled  if   mBluetoothAdapter isEnabled       Intent enableBTIntent   new  Intent  BluetoothAdapter  ACTION REQUEST ENABLE     startActivityForResult  enableBTIntent   REQUEST ENABLE BT                                         End of onStart     Override  public synchronized void onResume      super  onResume                 End of on resume     Override   public void onDestroy      super onDestroy     if  timer    null      timer cancel          End of if       End of on destroy           Override  public void onActivityResult  int requestCode  int resultCode   Intent data     switch  requestCode     case REQUEST CONNECT DEVICE     When DeviceListActivity returns with a device to  connect to if results ok  then launch connectDevice  if  resultCode    Activity RESULT OK     connectDevice  data            break   case REQUEST ENABLE BT   if  resultCode    Activity  RESULT OK        Bluetooth is now enabled  no
83. range    100  speed     range      50   rawSpeed    100    50     100  direction    speed    100      50   rawDirection    100    50      100  Servo    750   direction  rServo    750   speed    elseif rawSpeed  lt  50 and rawDirection  gt  50  Reverse and Left    68    range    100  speed     range      50   rawSpeed    100    50     100  direction    speed    100      rawDirection   50    100    50      100  IServo    750   speed  rServo    750   direction  elseif rawDirection    50 and rawSpeed  gt  50  speed      rawSpeed   50    2   IServo    750   speed  rServo    750   speed  elseif rawDirection    50 and rawSpeed  lt  50  speed      50   rawSpeed    2   IServo    750   speed  rServo    750   speed  elseif rawSpeed    50 and rawDirection  gt  50  speed      rawDirection   50   2   IServo    750   speed       rServo    750   speed  elseif rawSpeed    50 and rawDirection  lt  50  speed      50   rawDirection   2   IServo    750   speed  rServo    750   speed    else  IServo    750  rServo    750    PUB ServoPulse    fds str DEBUG  String  Pulse out Started       Outputs  Program Started  to the    terminal screen    69    fds tx DEBUG  13     us    clkfreq   1_000_ 000    define what a micro second is    tLow    clkfreq   50  Duration of time between pulses  standard 20  mS or 0 020 Seconds     dira  14  15     Set P14 and P15 to output    T    cnt  T is set to the current number of clock ticks when  line is executed    repeat  T    tlLow  waitcnt T   PULSOUT 15  IServo  
84. rection  This will also be true for almost  all wheeled robotic platforms  Indexes and their corresponding incarnations on the    Android device and ActivityBot are listed in Table 2     Table 2   Correlation between Index  its Meaning on the Android Device and the Robot    Android Correlation   Robotic Platform Correlation  Vertical Slider Position         B   Horizontal Slider Position    Furthermore  to properly implement the communication protocol  limits and  boundaries of the parameters being transmitted must be defined and correlated in terms  of numeric value  their physical appearance on the user interface and their expected  effect on the robotic platform  Table 3 contains the numeric value boundaries and their    correlation to the Android application and the Robotic platform  Note that the values are    17    to a degree arbitrary  as the important item is consistency in their meaning between the  Android application and the robot  The values selected and their correlations were  chosen based in that they appeared convenient and logical  As shown below in Table 3  the numeric value 100 represent full speed forward on the robotic platform and on the  android application it represents the vertical slider in its topmost position  The  parameters are arbitrary in the sense that the numeric value 150 representing full speed    forward could be implemented with little to no effect on the results     Table 3   Correlation between Numerical Value  its Physical Implementat
85. rlay  buffers  txdata  txbits  txcnt  txdatal  txbits1    long  long  long  long  long    103    txcntl long 0  txdata2 long 0  txbits2 long 0  txcnt2 long 0  txdata3 long 0  txbits3 long 0  txcnt3 long 0  rxdata long 0  rxbits long 0  rxcnt long 0  rxdatal long 0  rxbits1 long 0  rxcntl long 0  rxdata2 long 0  rxbits2 long 0  rxent2 long 0  rxdata3 long 0  rxbits3 long 0  rxcnt3 long 0  tl long 0   this is a temporary variable used by pasm  rxmask long 0   a single bit set  a mask for the pin used for receive     zero if port not used for receive    rxmask1 long 0  rxmask2 long 0  rxmask3 long 0  txmask long 0   a single bit set  a mask for the pin used for transmit     zero if port not used for transmit    txmask1 long 0  txmask2 long 0  txmask3 long 0    104    ctsmask    zero if port not using cts    ctsmask1  ctsmask2  ctsmask3    rtsmask    zero if port not using rts    rtsmask 1  rtsmask2  rtsmask3  bit4 ticks  bit4_ticks1  bit4_ticks2  bit4_ticks3  bit_ticks  bit_ticks1  bit_ticks2  bit_ticks3  rtssize   to stop flow  rtssize 1  rtssize2    rtssize3    rxbuff head_ptr    long 0  long 0  long 0  long 0  long 0  long 0  long 0  long 0  long 0  long 0  long 0  long 0  long 0  long 0  long 0  long 0  long 0  long 0  long 0  long 0  long  long    rxbuff_head_ptrl    initialized in spin to base address    rxbuff_head_ptr2  rxbuff_head_ptr3    txbuff_tail_ptr  txbuff tail ptr1    initialized in spin to base address    long  long    long    long      a single bit set  a mask 
86. roid id    id title new_devices           android layout_width  match_parent      android layout_height  wrap_ content   android text   string title new devices   android visibility  gone    android  background   666    android  textColor   fff   android paddingLeft  5dip    gt            lt ListView android id    id new_device list     android layout_width  match_parent   android layout_height  wrap_ content   android stackFromBottom  true   android  layout weight  1    gt      lt Button android id    tid btn_scan   android layout_width  match_parent   android layout_height  wrap_ content   android text   string btn_ scan    gt               lt  LinearLayout gt     6 3 3 Display Format of Device Names     lt  xml version  1 0  encoding  utf 8   gt     lt TextView xmlns android  http   schemas android  android layout_width  match_parent   android layout_height  wrap_ content   android  textSize  18sp   android padding  5dip    gt      com apk res android     6 3 4 XML Code for Options Menu   lt  xml version  1 0  encoding  utf 8   gt    lt menu xmlns android  http   schemas android com apk res android   gt    lt item android id    id scan_and_connect   android icon   android drawable ic_menu_search   android title   string scan_and_connect    gt   android id    id discoverable   android  icon   android drawable ic_menu_mylocation   android title   string discoverable   gt    lt  menu gt   lt  xml version  1 0  encoding  utf 8   gt    lt menu xmlns android  http   schemas andr
87. roid widget ListView    import android widget TextView    import android widget Toast     public       class DeviceListActivity extends Activity      private BluetoothAdapter mBtAdapter   private ArrayAdapter lt String gt  mPairedDevicesArrayAdapter   private ArrayAdapter lt String gt  mNewDevicesArrayAdapter       Return Intent extras  public static String EXTRA DEVICE ADDRESS      device address          Override  protected void onCreate  Bundle savedInstanceState     super  onCreate  savedInstanceState         Set up the display window    requestWindowFeature  Window  FEATURE INDETERMINATE PROGRESS     setContentView R layout device list           Set results as canceled in case the user backs out  setResult  Activity RESULT CANCELED             Initialize the button to perform device discovery   Button btnScan    Button  findViewById R id btn_scan      btnScan setOnClickListener  new OnClickListener      public void onClick View v             52    discoverDevices     v setVisibility  View  GONE             End of setOnClickListener         Initialize the array adapters  One for the paired devices  and one for the newly discovered devices   mPairedDevicesArrayAdapter   new ArrayAdapter lt String gt  this   R layout device name     mNewDevicesArrayAdapter   new ArrayAdapter lt String gt   this   R layout device_name             Find and set up the list view for paired devices  ListView lstPairedDevices    ListView   findViewBylId R id paired_ devices list     lstPairedDevi
88. rt      ff  long  bit_ticks  port      clkfreq   baudrate   long  bit4_ticks  port     long  bit_ticks  port   gt  gt  2    PUB Start   okay    Call start to start cog    Start serial driver   starts a cog     returns false if no cog available    79       TTA  modified for       default rts threshold 3 4 of     tx buffers will start within the object footprint  overlaying certain locations that were  initialized in spin   for use within the cog but are not needed by spin thereafter and are not needed for    object restart     txbuff_tail_ptr    txbuff_ptr     buffers    TTA  all buffers are calculated as  offsets from this address    txbuff_tail_ptrl    txbuff_ptrl    txbuff ptr   txsize    pase addresses of the  corresponding port buffer     txbuff_tail_ptr2    txbuff_ptr2    txbuff_ptrl   txsizel       txbuff_tail_ptr3    txbuff_ptr3    txbuff_ptr2   txsize2  rxbuff_head_ptr    rxbuff ptr    txbuff_ptr3   txsize3   rx buffers follow  immediately after the tx buffers  by size    rxbuff_head_ptrl    rxbuff_ptrl    rxbuff_ptr   rxsize    II    rxbuff head_ptr2    rxbuff_ptr2    rxbuff ptrl   rxsizel       rxbuff head_ptr3    rxbuff_ptr3    rxbuff_ptr2   rxsize2    note that txbuff ptr     rxbuff ptr3 are the base  addresses fixed    in memory for use by both spin and pasm    while txbuff tail ptr     rxbuff head ptr3 are  dynamic addresses used only by pasm    and here initialized to point to the start of the    buffers     the rx buffer  3 comes last  up through address   end
89. s enqueued to this offset above base   rxbuff ptr   rx_head2 long 0   rx_head3 long 0   rx tail long 0   rx tail pointer  ditto  zero to size of rx buffer   rx taill long 0   data is dequeued from this offset above base   rxbuff ptr   rx_tail2 long 0   rx_tail3 long 0   tx_head long 0   tx head pointer    from 0 to size of tx buffer  used in  spin and pasm   tx_head1 long 0   data is enqueued to this offset above base   txbuff_ptr   tx_head2 long 0    102    tx_head3  tx_tail  tx_taill  txbuff_ptr  tx_tail2  tx_tail3  rxbuff_ptr  buffers  rxbuff_ptrl  rxbuff_ptr2  rxbuff_ptr3  txbuff_ptr  buffers  txbuff_ptr1  txbuff_ptr2  txbuff_ptr3    long  long  long    long  long    long    long  long  long  long    long  long  long      Start of HUB overlay      tx tail pointer  ditto  zero to size of rx buffer      data is transmitted from this offset above base       These are the base hub addresses of the receive      initialized in spin  referenced in pasm and spin      these buffers and sizes are individually configurable      These are the base hub addresses of the transmit      Some locations within the next set of values  after being init d to zero  are then filled    from spin with options      That are transferred to and accessed by the pasm cog once started  but no longer needed    in spin       Therefore  tx and rx buffers start here and overlays the hub footprint of these variables      tx_ buffers come first  0 1 2 3  then rx buffers 0 1 2 3 by offset from  buffers     ove
90. skip first jmpret     patch rx routine depending on whether rts is used    85       and if it is inverted    or rtsmask3 40 wz    if nz or _ dira rtsmask3   TTA  rts needs to be an output  if nz test rxtx _mode3  INVERTRTS we   if nz and nc or rts3 domuxne    patch muxc to muxnc   if z mov norts3 rec3i    patch rts code to a jmp  receive3  if z movs start3  receive3  skip all rts processing    or txmask3  0 wz  iftx pin not used  if z movi transmit3    010111_000   patch it out entirely by making the  jmpret into a jmp  TTA     or rxmask3 4 0 wz    ditto for rx routine  if z movi receive3    010111_000   TTA     in pcFullDuplexSerial4fc  the bypass was ostensibly  done    by patching the co routine variables     but it was commented out  and didn t work when  restored      so I did it by changing the affected jmpret to jmp     Now the jitter is MUCH reduced     port 2 initialization                                                                test rxtx_mode2 4OCTX wz    init tx pin according to mode  test rxtx_mode2  INVERTTX we    if z nec or _ outa txmask2    if z or dira txmask2  if z eq c or txout2 domuxnc    patch muxc to muxnc  if nz movyd txout2  dira  change destination from outa to dira    test rxtx mode2  INVERTRX wz    wait for start bit on rx pin  if nz xor start2 doifc2ifnc  if cjmp to if nc  or ctsmask2  0 wz    if nz test rxtx_mode2 4INVERTCTS we    86    if nz and c or ctsi2 doif_z or nc  if nc jmp  TTA  reversed order to  correctly invert CTS    if nz and n
91. t  0 17 A0 01 6D 5C    UConnect  00 06 F5 FB 4E 82    UConnect  04 98 F3 E6 AF 0D    Figure 23   List of Bluetooth Devices Found for Pairing           aa    RS   4    dm 9 23 PM  feJ BlueTest3   V 50   H 50 Start      m    Figure 24   Screen Prior to Selecting Start  Slider Bars Disabled    34     aa     ENIK fg 9 23 PM    g   BlueTest3  V 50  H 50 Start       Figure 25   Screen after Selecting Start  Slider Bars Enabled    Bluetooth permission request    Application is requesting permission to  turn on Bluetooth  Allow     Copied to clipboard       Figure 26   Screen Requesting the User to Enable Bluetooth on the Device    35     ana joo    im BlueTest3       V 50  H 50 Start    Bluetooth Enabled    Figure 27   Alerting the User of Successfully Enabling Bluetooth    faa  Saving screenshot       Apps    x  E 3 A Fo    AdVahced AIDE AT amp T Code AT amp T A AT amp T  Task Killet  Scanner Connect   FE    ae    AT amp T ATAT  Locker WENCEL LECEN     T      AT   oE 31  Bluetooth Calculator 3 amera ChatON  Chat        gt   Chrome L   Contacts Downloads    Matcher    aay 25  TA e f    Drive Bluetooth failed to initialize  exiting  1CeBOOK       Figure 28   Alerting the User  Bluetooth Failed to Initialize    36     ae  OS OH  E    P3  Js  BlueTest3       V 80  H 30    Start    Figure 29   Example of User Input    6 3 XML Code for Android User Interface and Context Menus    6 3 1 Main User Interface XML Code     lt RelativeLayout    xmlns android  http   schemas android com apk res 
92. t code  then return  moy tl rxcnt3    check if bit receive period done  sub tl cnt  cmps t1  0 we   jmp     wait3    test rxmask3 ina wc    receive bit on rx pin  rer rxdata3  1  djnz rxbits3   bit3  test rxtx_mode3  INVERTRX wz _    find out if rx is inverted  jmp  receive3    abort if no stop bit  TTA   from    jmpret rxcode3 txcode3  run a chunk of transmit code  then return    shr rxdata3  32 9    justify and trim received byte    wrbyte rxdata3 rxbuff_head_ptr3  7 22   add rx_head3  1   cmpsub rx_head3 rxsize3    TTA  allows non binary buffer size  wrlong rx_head3 rx_head_ptr3  8   moy rxbuff_head_ptr3 rxbuff_ptr3    calculate next byte head_ptr  add   rxbuff_head_ptr3 rx_head3       rdlong rx_tail3 rx_tail_ptr3  7 22 or 8  may be patched to jmp  r3 if    mov t1 rx_head3  sub tl rx_tail3 we  add tl rxsize3   fix wrap   TTA  change    cmps tl rtssize3 wc  is buffer more that 3 4 full     95    rts3    muxc outa rtsmask3                rec31 jmp  receive3  byte done  receive next byte  TRANSMIT  transmit jmpret txcode rxcodel    run a chunk of receive code  then return     patched to a jmp if pin not used  txcts0 test ctsmask ina wc _    if flow controlled dont send  rdlong tl tx_head_ptr   7 22    head 0   cmp tl tx tail wz  tail 0   ctsi0 if z jmp  transmit  may be patched to if z or corif z or nc       rdbyte txdata txbuff_tail_ptr  8   add tx_tail  1    cmpsub tx tail txsize wz   TTA  for individually sized buffers  will    zero at rollover    if z    if nz    wrlong t
93. t environment can be found on the company   s main web page  15    One downside to the Propeller microcontroller is that the language used to program it  is  specific to the microcontroller  and is known as Spin  shown in Figure 13 with a code  snippet  However in recent months Parallax has launched a new complier for the  Propeller microcontroller that utilizes the C programming language  information about  this compiler can also be found on the company   s webpage  16   I have chosen to use the  Spin language for this project as at the time of writing this paper there are more support  libraries and examples written for the Spin language and compiler than its C based    counterparts     14    a Propeller Tool   PBAA v0 7  File Edit Run Help    PBAA_vO7       FulSowce f Condensed  C Summay     Documentation                bu   CMUsersWVioWRPRMatiersProject Spn Code spn      d  Sp AA  EJ  Masters Project  Jp Android code Archive  J Archive                 lt i PSO ASEH  gt     datalO4port  spin a       FullDuplexSerial spin  fullDuplexSerial4port  spin  GrouploSet spin  LedOnOffP4 spin   LedOnP4 spin   OutputT oLCD spin   Parallax Serial Terminal V1 0 spin  Parallax Serial Terminal spin    Figure 13   Spin IDE with Code Snippet from the PBAA_v0 7 spin Program    2 2 Communication Protocol and Control Logic Design    In the next section I will elaborate on the communication protocol designed and created  for implementation between the mobile operating system and the robotic pl
94. t up to 230kbps t   3 port up to 140kbps     4 port up to 100kbps     Tested 4 ports to 115Kbps with 6MHz crystal    These are approx theoretical worse case you may get faster    if port is active but idle t  Added RTS CTS flow control      x    There is no perf penalty supporting 4 serial ports when they      are not enabled     There is no perf penalty supporting CTS and RTS i  Enabling CTS on any port costs 4 clocks per port s  Enabling RTS on any port costs 32 clocks per port F    Main Rx Tx loop is  256 clocks per port  without CTS RTS     compared with FullDuplexSerial at  356 clocks    i    x    74                  Mok    Woke    Woke    Woke                                Woke    Woke    Woke    Woke    Woke                          ES    Woke    Woke    Woke                                Woke     m    Woke    Woke     E3    There is a cost to read write a byte in the transmit  i  receive routines  The transmit cost is greater than the    receive cost so between propellors you can run at max baud    rate  If receiving from another device  the sending device    needs a delay between each byte once you are above  470kbps    with 1 port enabled x  x    TTA  I have not updated the following comments  7  Size      Cog Initialzation code 1 x 8   4 x 25      Cog Receive code 4 x 30 words     Cog Transmit code 4 x 26 words     Spin Cog circular buffer indexes 4 x 4 words t    Used in both spin and Cog and read written in both      directions  gt   Spin Cog per port info 4 x 
95. t would be  displayed as    1011000110001110000110011100001     This communication protocol  establishes the ability to send up to 52 unique parameters  includes upper and lower case  alphas  with assigned values up to 10 characters long  The reason for the 10 character  2 147 483 647 numeric value limitation is due to the 32 bit architecture of the Propeller  microcontroller  The value 2 147 483 647 which can be represented in binary as     1111111111111111111111111111111    is the largest value that can be stored in a    single variable or register of a 32 bit microcontroller     2 2 2 Implementing and Demonstrating the Communication Protocol    To demonstrate the applicability of the protocol designed  I implemented its use on the  communication between a mobile operating system  Android  and a robotic platform  the  Parallax ActivityBot over Bluetooth  In the actual implementation of the communication  protocol an additional level of detail is required  As noted earlier the first character  transmitted in the message represents the Index or parameter of the data being  transferred  In practical terms it is a label for the data so that when the data is received  the receiving device knows how to handle it  To properly use the index I must establish  the index values required and assign them their respective functions  Due to the simple  nature of the robotic platform selected all that is needed to control its movement is a  value to control its speed and a value for its di
96. ter    import android bluetooth BluetoothDevice    import android content Intent     p    import java util Timer     j    import java util TimerTask                 public class MainActivity extends Activity      Declare variables and constants      Declare buttons  Button btnSend        Declare Seek Bars  SeekBar hSeek   SeekBar vSeek   TextView hText   TextView vText          Timer declarations   static final int UPDATE INTERVAL   250   private Timer timer   new Timer      int i        The local Bluetooth Adapter  private BluetoothAdapter mBluetoothAdapter   null     41       Intent request codes  private static final int REQUEST ENABLE BT   1   private static final int REQUEST CONNECT DEVICE   2              Message types sent form the BluetoothDataTransferService  handler   public static final int MESSAGE READ   2    public static final int MESSAGE TOAST   5        Key names received from the BluetoothDataTransferService  handler  public static final String TOAST    toast              public static String EXTRA DEVICE ADDRESS    device address                        Member of object for the data transfer service  private BluetoothDataTransferService mDataService   null             Member of object for the data resolver servic  private DataResolverService mResolverService   null               Override   public void onCreate  Bundle savedInstanceState     super  onCreate  savedInstanceState     setContentView R layout activity main               Get the default bluetooth ad
97. tify the user       45    Toast makeText  this   Bluetooth Enabled    Toast LENGTH SHORT   show        else              The user chose not to enable bluetooth or  there was an error  Toast makeText  this   Bluetooth failed to  initialize  exiting    Toast  LENGTH SHORT   show     finish             end request code switch      end on activity result       Creates an option menu for when the user presses the menu key   Override  public boolean onCreateOptionsMenu  Menu menu     MenuInflater inflater   getMenuInflater     inflater inflate R menu option_ menu  menu    return true        End of onCreateOptionsMenu           Override  public boolean onOptionsItemSelected MenuItem item     Intent serverIntent   null   switch  item getItemId       case R id scan_and_connect     Launch the device list activity to see existing   find new  and select a device to connect to  serverIntent   new Intent  this   DeviceListActivity class     startActivityForResult  serverIntent   REQUEST CONNECT DEVICE     return true   case R id discoverable     Enable bluetooth device discovery  Toast makeText  getBaseContext     Discover    Toast LENGTH SHORT   show     return true        end switch  return false       end of onOptionsItemSelected                   private void connectDevice Intent data       TInitialize the BluetoothDataTransferService to perform  bluetooth connections  mDataService   new BluetoothDataTransferService  this        mHandler       Get the MAC Address  String address    dat
98. tl muxc outa txmask1    maybe patched to muxnce dira txmask    add txcntl bit ticks   ready next cnt     waitl jmpret txcodel rxcode2  run a chunk of receive code  then return  mov tl txcntl  check if bit transmit period done  sub tl  cnt  cmps t1  0 we  if nc jmp   waitl    djnz txbits1  txbit1  another bit to transmit     txjmp1 jmp ctsil    byte done  transmit next byte     Transmit                                                                                         transmit2 jmpret txcode2 rxcode3  run a chunk of receive code  then return  txcts2 test ctsmask2 ina wc  ifflow controlled dont send    rdlong tl tx_head_ptr2  cmp tl tx_tail2 wz    ctsi2 if z jmp  transmit2  may be patched to if z or c orif z or nc       rdbyte txdata2 txbuff_tail_ptr2    98    add tx_tail2  1  cmpsub tx tail2 txsize  wz    TTA  for individually sized buffers   will zero at rollover  wrlong tx_tail2 tx_tail_ptr2  if z moy txbuff_tail_ptr2 txbuff_ptr2  reset tail_ptr if we wrapped  if nz add txbuff tail ptr2  1  otherwise add 1    jmpret txcode2 rxcode3    shl txdata2  2  or txdata2 txbitor  ready byte to transmit  moy txbits2  11    mov txcnt2 cnt    txbit2 shr txdata2  1 we  txout2 muxc outa txmask2  maybe patched to muxnc dira txmask    add txcnt2 bit ticks2  ready next cnt     wait2 jmpret txcode2 rxcode3  run a chunk of receive code  then return  mov tl txcnt2    check if bit transmit period done  sub tl cnt  cmps t1  0 wc  if nc jmp   wait2    djnz txbits2  txbit2  another bit to trans
99. toothDevice  try    tmp    device createRfcommSocketToServiceRecord  MY UUID        End try  catch  IOException e                   End Catch  mmSocket   tmp      End of ConnectThread   public method       public void run      setName   ConnectThread    mSocketType         Always cancel discovery because it will slow down  the connection    mAdapter cancelDiscovery         Make a connection to the bluetooth socket  try      This is a blocking call and will only return  on a successful connection or an exception  mmSocket connect         End try  catch  IOException e       Close the socket  try               mmSocket close        End try  catch  IOException E2                End catch  connectionFailed     return       End catch             Reset the ConnectThread because we re don  synchronized  BluetoothDataTransferService this     mConnectThread   null                   Start the connected thread  connected  mmSocket  mmDevice  mSocketType          End run       public void cancel      try     mmSocket close       catch  IOException e                End of cancel             End of ConnectThread   private class    49    public void write  byte   out         Create temporary object   ConnectedThread r      Synchronize a copy of the connected thread   synchronized  this        should check for a connected thread here first     need to add code      r   mConnectedThread        End of synchronized     Perform the write unsynchronized   r write  out     Log d  Data Transfer    S
100. ts    if c    add rxcntl bit ticks1  1 bit period    jmpret rxcodel txcodel  run a chuck of transmit code  then return  mov tl rxcntl    check if bit receive period done  sub tl cnt  cmps tl  0 wc   jmp   waitl    test rxmaskl ina wc  receive bit on rx pin  rcer rxdatal  1    djnz rxbitsl   bitl    test rxtx model   INVERTRX wz  find out if rx is inverted    jmp  receivel    abort if no stop bit  TTA   from    jmpret rxcodel txcodel  run a chunk of transmit code  then return    shr rxdatal  32 9    justify and trim received byte    wrbyte rxdatal rxbuff_head_ptrl  7 22   add rx_head1  1   cmpsub rx_head1 rxsizel    TTA  allows non binary buffer size  wrlong rx_head1 rx_head_ptr1   moy rxbuff_head_ptrl rxbuff_ptr1    calculate next byte head_ptr  add rxbuff_head_ptrl rx_head1       rdlong rx_taill rx_tail_ptrl  7 22 or 8 will be patched to jmp  13 if  mov t1 rx_head1  sub tl rx taill we    add tl rxsizel   fix wrap   TTA  change    92    rtsl    recli    cmps tl rtssizel we    muxc  outa rtsmask1    jmp  receivel    byte done  receive next byte      Receive                                                                                           receive2    start2 if c     bit2     wait2    if nc    if z ne c    serialMirror     jmpret rxcode2 txcode2  run a chunk of transmit code  then return    test rxmask2 ina we    jmp  norts2  go check rts if no start bit    moy rxbits2  9  ready to receive byte  mov rxcnt2 bit4 ticks2  1 4 bits    add rxcnt2 cnt    add rxcnt2 bit ticks2 
101. urce hardware and software  This will allow me to develop the  communication protocol in a cost effective manner while still remaining flexible so that    it can be expanded to other operating systems and devices as need dictates     2 1 Component and Software Selection    To develop and implement a communication protocol between a mobile device and  another electronic device several pieces of both software and hardware are required  On  the mobile device side both an IDE  Integrated Development Environment  and SDK   Software Development Kit  are required for programming the electronic device   Additionally a physical device will be required for implementation   testing  On the  Electronic device side an IDE and SDK are required for programming the  microcontroller as well a physical microcontroller and robotic platform for  implementation testing  Additionally since Bluetooth will be used for data transfer  between the devices  a Bluetooth module that is compatible with the selected    microcontroller is required     2 1 1 Selecting a Mobile Operating System and a Mobile Device    There are many choices to pick from when it comes to selecting a mobile platform      operating system to demonstrate communication via Bluetooth with a microcontroller     The leading operating systems include Google   s Android  Apple   s IOS  Windows  Mobile  and Blackberry all of which offer products of similar technological  implementations  That is all of these devices are available with sim
102. visor    1  repeat places  divisor    divisor   10  dec port value divisor   uarts tx port         decx port   value  divisor places     PUB hex port value  digits     Print a hexadecimal number  value  lt  lt    8   digits   lt  lt  2  repeat digits  uarts tx port lookupz  value  lt    4   amp   F    0    9    A    F       111    PUB ihex port value  digits     Print an indicated hexadecimal number  uarts tx port         hex port value digits     PUB bin port value  digits     Print a binary number  value  lt  lt   32   digits  repeat digits  uarts tx port  value  lt    1   amp  1    0      PUB padchar port count  txbyte   repeat count    uarts tx port txbyte     PUB ibin port value  digits     Print an indicated binary number  uarts tx port         bin port value digits   PUB putc port txbyte     Send a byte to the terminal    uarts tx port txbyte     PUB newline port   putc port CR     PUB cls port   putc port FF     PUB getc port     112      Get a character      will not block if nothing in uart buffer  return uarts rxcheck port     return rx    con   the following added from PST primarily for data input   PUB StrIn port stringptr     TTA from PST   Receive a string  carriage return terminated  and stores it  zero terminated  starting at  stringptr   Waits until full string received   Parameter   stringptr   pointer to memory in which to store received string characters   Memory reserved must be large enough for all string characters plus a zero    terminator         Str
103. wrap_ content   layout_alignBaseline    tid textView2   layout _alignBottom    id textView2   layout_alignLeft    tid vTextView   text  50    gt                              lt SeekBar    android   android   android   android   android   android      lt SeekBar    android   android   android   android   android     id   t tid vSeekBar1   layout_width  250dip   layout_height  wrap_ content   layout_alignParentLeft  true   layout _centerVertical  true   rotation  270    gt        id   t tid hSeekBar1    layout _width  250dip    layout _height  wrap_ content    layout alignParentRight  true   layout _alignTop    id vSeekBar1    gt     6 3 2 Discovered and Connected Bluetooth Device List     lt  xml version  1 0  encoding  utf 8   gt   g     lt LinearLayout    xmlns android  http   schemas android com apk res android   android  layout width  match parent   android  layout height  match parent   android orientation  vertical   gt            lt TextView android id    id title paired devices     android   android   androidi  android   android   android     layout_width  match_parent   layout_height  wrap content   text   string titie paired devices   visibility  gone    background   666    textColor   fff           38    android paddingLeft  5dip    gt      lt ListView android id    id paired_devices_list        android  layo  android  layo  android  stac  android  layo    ut _width  match parent   ut_height  wrap_ content   kFromBottom  true   ut_weight  1   gt      lt TextView and
104. x tail tx_tail ptr   8   moy txbuff tail ptr txbuff ptr  reset tail_ptr if we wrapped  add txbuff tail ptr  1  otherwise add 1    jmpret txcode rxcodel  shl txdata  2  or txdata txbitor  ready byte to transmit    moy txbits  11    mov txcnt cnt    96    txbit shr txdata  1 wc  txout0 muxc outa txmask  maybe patched to muxnce dira txmask    add txcnt bit ticks  ready next cnt       wait jmpret txcode rxcodel    run a chunk of receive code  then return  moy tl txcnt    check if bit transmit period done  sub tl  cnt  cmps t1  0 we  if nc jmp   wait  djnz txbits  txbit  another bit to transmit   txjmp0 jmp ctsi0    byte done  transmit next byte    Transmit                                                                                         transmitl jmpret txcodel rxcode2  run a chunk of receive code  then return  txcts1 test ctsmaskl ina wc  ifflow controlled dont send    rdlong tl tx_head_ptr1  cmp tl tx taill wz    ctsil if z jmp  transmitl  may be patched to if z or_c or if_z_or_nc       rdbyte txdatal txbuff tail ptr1  add tx taill  1  cmpsub tx taill txsizel wz   TTA  for individually sized buffers   will zero at rollover  wrlong tx_taill tx_tail_ptrl  if z moy txbuff tail ptrl txbuff ptr1  reset tail_ptr if we wrapped  if nz add txbuff tail ptrl  1    otherwise add 1    97    jmpret txcodel rxcode2  run a chunk of receive code  then return    shl  txdatal  2  or  txdatal txbitor  ready byte to transmit  moy txbits1  11    mov txcntl cnt    txbit  shr txdatal  l we  txou
105. y not least to implement  mistake proofing features like ensuring the Bluetooth device is enabled before starting  the application  Figure 18 is a block diagram that represents the process for connecting  to a remote discoverable Bluetooth enabled device from the Android device  Note that  the application ensures that Bluetooth is enabled on the mobile device  requesting user  input when required or else the application is terminated  Note also that it is possible to  write an application that will on its own enable Bluetooth communication without  notifying or requesting permission from the user  However this is generally frowned  upon by the Android development community as well as most application users as there  is an implicit trust among users that one would not have written an application that may  harm their device or act in any malicious manner  When applications start to modify the  state of the device without first requesting permission that trust can be lost very quickly  and is not likely to be regained  Java source code supporting the Android application can    be found in Appendix 6 4  Additionally  screen captures of the user interface showing    21    the automated prompts as well as the other screens the user will see during the Bluetooth    connection process can be seen in Appendix 6 2 Android Device User Interface Screen                         Captures   User launches ls BT N N User  ears Enabled h  Application 2 selection N  Application Starts Bluetooth 
    
Download Pdf Manuals
 
 
    
Related Search
    
Related Contents
Utilisation des fonctionnalités de l`outil CARMEN :  取扱説明書  [くらし応援室(西)]総括表(PDF形式:18KB)  Panasonic ET60 Flat Panel Television User Manual  Data Sheet  Radio Shack 63-993 User's Manual    Copyright © All rights reserved. 
   Failed to retrieve file