Shop OBEX P1 Docs P2 Docs Learn Events
BS2 Code To Test Roomba SCI — Parallax Forums

BS2 Code To Test Roomba SCI

skynuggetskynugget Posts: 172
edited 2008-05-28 03:54 in BASIC Stamp
Hey all,
I was in need to test all of the sensors on my Roomba Discovery with a BS2. Here is what I came up with, hopefully it can save some of you hackers some time! I am neither a Stamp or Roomba Guru, so its not pritty, and it just about uses every bit of eeprom and ram available on a BS2 to get it done. Hope it helps someone out, if you make it better post it here. :>



' {$STAMP BS2}
' {$PBASIC 2.5}
'roomba sensor test - used to see all of the values from the roomba sci via basic stamp
'puts roomba into safe mode, then debugs

RooDD            PIN 12
RooRXD           PIN 11
RooTXD           PIN 10
LED              PIN  7


fbaud     CON 32  '19200

sbaud     CON 396 '2400

' Roomba commands
RooStart     CON 128
RooBaud      CON 129
RooControl   CON 130
RooFull      CON 132
RooPower     CON 133
RooSpot      CON 134
RooClean     CON 135
RooDrive     CON 137
RooMotors    CON 138
RooSong      CON 140
RooPlay      CON 141
RooSensors   CON 142
RooDock      CON 143

'roomba sensor vars

'packet 1
RooBumpwheel    VAR Byte
RooWall         VAR Bit
RooCliffL       VAR Bit
RooCliffFL      VAR Bit
RooCliffFR      VAR Bit
RooCliffR       VAR Bit
RooVWall        VAR Bit
RooMOTO         VAR Byte
RooDirtL        VAR Byte
RooDirtR        VAR Byte

'Packet 2
RooRemOp        VAR Byte
RooButtons      VAR Byte
RooDistance     VAR Word
RooAngle        VAR Word

'packet 3
RooVolt         VAR Word
RooCState       VAR Nib
RooAmp          VAR Word
RooTemp         VAR Byte
RooCharge       VAR Word
RooCapacity     VAR Word


i VAR Nib 'counter



INIT:
'debug screen
  DEBUG CLS
  DEBUG "           RoomBa Readings           ", CR
  DEBUG "-------------------------------------", CR
  DEBUG "WheelDrops L    C    R   Bump L   R  ", CR
  DEBUG "-------------------------------------", CR
  DEBUG "Cliffs L   FL   FR   R   Wall   VW   ", CR
  DEBUG "-------------------------------------", CR
  DEBUG "MotO     DL   DR   MB   V   SB       ", CR
  DEBUG "-------------------------------------", CR
  DEBUG "Dirt Detect       L         R        ", CR
  DEBUG "-------------------------------------", CR
  DEBUG "OpCode     Btns  Pr   St   Cn   Mx   ", CR
  DEBUG "-------------------------------------", CR
  DEBUG "Distance          Angle              ", CR
  DEBUG "-------------------------------------", CR
  DEBUG "mVolts            mAmps              ", CR
  DEBUG "-------------------------------------", CR
  DEBUG "Temp        ChargeState              ", CR
  DEBUG "-------------------------------------", CR
  DEBUG "Charge            mAmpH              ", CR



' wake up Roomba
  LOW RooDD
  PAUSE 100
  HIGH RooDD
  PAUSE 2000

' pulse dd 3 times to go to 19.2kbps
  FOR i  = 0 TO 2
    LOW RooDD   : LOW LED  :  PAUSE 250
    HIGH RooDD  : HIGH LED :  PAUSE 250
  NEXT


' start up SCI, then downshift speed again to 2400 bps for basic stamp
  SEROUT RooRXD, fbaud, [noparse][[/noparse]RooStart]
  PAUSE 100
  SEROUT RooRXD, fbaud, [noparse][[/noparse]RooBaud, 3] ' 2400
  PAUSE 100
  SEROUT RooRXD, sbaud, [noparse][[/noparse]RooStart]
  PAUSE 100
  SEROUT RooRXD, sbaud, [noparse][[/noparse]RooControl]
  PAUSE 100
  'SEROUT RooRXD, sbaud, [noparse][[/noparse]RooFull]


Main:
  DO
    SEROUT RooRXD, sbaud, [noparse][[/noparse]RooSensors, 1]
    SERIN  RooTXD, sbaud, 2000, NoGo, [noparse][[/noparse]RooBumpwheel,RooWall,RooCliffL,RooCliffFL,RooCliffFR,
                                      RooCliffR,RooVWall,RooMOTO,RooDirtL,RooDirtR]

    SEROUT RooRXD, sbaud, [noparse][[/noparse]RooSensors, 2]
    SERIN  RooTXD, sbaud, 2000, NoGo, [noparse][[/noparse]RooRemOp,RooButtons,RooDistance.HIGHBYTE,RooDistance.LOWBYTE,
                                      RooAngle.HIGHBYTE,RooAngle.LOWBYTE]


    SEROUT RooRXD, sbaud, [noparse][[/noparse]RooSensors, 3]
    SERIN  RooTXD, sbaud, 2000, NoGo, [noparse][[/noparse]RooCState,RooVolt.HIGHBYTE,RooVolt.LOWBYTE,RooAmp.HIGHBYTE,
                                      RooAmp.LOWBYTE,RooTemp,RooCharge.HIGHBYTE,RooCharge.LOWBYTE,
                                      RooCapacity.HIGHBYTE,RooCapacity.LOWBYTE]


    GOSUB DebugOOt
  LOOP


DebugOOt:
'clear error
  DEBUG CRSRXY,0,1 ,"--------------------", CR

'BumpWheel Set
  DEBUG CRSRXY,13,2, DEC roobumpwheel.BIT3
  DEBUG CRSRXY,18,2, DEC roobumpwheel.BIT4
  DEBUG CRSRXY,23,2, DEC roobumpwheel.BIT2
  DEBUG CRSRXY,32,2, DEC roobumpwheel.BIT1
  DEBUG CRSRXY,36,2, DEC roobumpwheel.BIT0

'cliffs
  DEBUG CRSRXY,9,4, DEC RooCliffL
  DEBUG CRSRXY,14,4, DEC RooCliffFL
  DEBUG CRSRXY,19,4, DEC RooCliffFR
  DEBUG CRSRXY,23,4, DEC RooCliffR

'walls
  DEBUG CRSRXY,30,4, DEC RooWall
  DEBUG CRSRXY,36,4, DEC RooVwall

'motor over current
  DEBUG CRSRXY,12,6, DEC Roomoto.BIT4
  DEBUG CRSRXY,17,6, DEC Roomoto.BIT3
  DEBUG CRSRXY,22,6, DEC Roomoto.BIT2
  DEBUG CRSRXY,26,6, DEC Roomoto.BIT1
  DEBUG CRSRXY,31,6, DEC Roomoto.BIT0


'Dirt Detect
  DEBUG CRSRXY, 20,8, DEC RooDirtL
  DEBUG CRSRXY, 30,8, DEC RooDirtR

'remote codes and buttons
  DEBUG CRSRXY,7,10, DEC RooRemOp
  DEBUG CRSRXY,20,10, DEC RooButtons.BIT3
  DEBUG CRSRXY,25,10, DEC RooButtons.BIT2
  DEBUG CRSRXY,30,10, DEC RooButtons.BIT1
  DEBUG CRSRXY,35,10, DEC RooButtons.BIT0

'distance and angle
  DEBUG CRSRXY,9,12, SDEC RooDistance
  DEBUG CRSRXY,26,12, SDEC RooAngle, 11

'volts amps
  DEBUG CRSRXY,7,14, DEC RooVolt
  DEBUG CRSRXY,26,14, SDEC RooAmp, 11

'Temp Chargstate
  DEBUG CRSRXY,5,16, SDEC RooTemp

'DEBUG CRSRXY,26,16, "            "
  SELECT RooCState
    CASE 0
    DEBUG CRSRXY,26,16, "Not Charging", 11
    CASE 1
    DEBUG CRSRXY,26,16, "Recover",11
    CASE 2
    DEBUG CRSRXY,26,16, "Charging",11
    CASE 3
    DEBUG CRSRXY,26,16, "Trickle" ,11
    CASE 4
    DEBUG CRSRXY,26,16, "Waiting"  ,11
    CASE 5
    DEBUG CRSRXY,26,16, "Error"   ,11
  ENDSELECT

'charge AND cap


  DEBUG CRSRXY,7,18, DEC RooCharge
  DEBUG CRSRXY,26,18, DEC RooCapacity, 11


  RETURN

NoGO:
  DEBUG CRSRXY,0,1, "***COMM ERROR!",CR
  GOTO main

Sign In or Register to comment.