' {$STAMP BS2} Change for your Stamp Type, recommend one of the faster stamps.

' {$PBASIC 2.5}

Black CON 0

White CON 255

Blue CON 3

Green CON 28

Red CON 224

Cyan CON Blue + Green

Yellow CON Green + Red

Magenta CON Blue + Red

Reset PIN 3 ' Connect ALL P0-P3 pins with 10K resistors

SData PIN 2

SClock PIN 1

CS PIN 0

dat VAR Byte

ctr VAR Word ' Used in InitLCD & Clear subroutines

x VAR Byte ' X-Coordinate (0 to 129)

y VAR Byte ' Y-Coordinate (0 to 129)

color VAR Byte ' Color to plot

' PAK-XI commands

PASSMODE CON 1 ' Only send position when asked (default)

ACTMODE CON 2 ' Send position when button clicked (not very useful for Stamp)

CLRCTR CON 3 ' Clear X,Y counters and button latch

CLRALL CON 4 ' Same as CLRCTR but also clears input buffer

GETPKT CON 5 ' Send X,Y, button latch packet (5 bytes: Xhigh, Xlow, YHigh, Ylow, Status)

GETPKTZ CON 7 ' Same as GETPKT but also clears counters

NORMMODE CON 9 ' Normal mode (same as pulling IMODE high), resets PAK

RAWMODE CON 10 ' Raw mode (same as grounding IMODE), resets PAK

ESC CON 11 ' Send next byte directly to mouse

INIT CON 13 ' Initialize mouse

LATCH CON 15 ' Read button latch and clear it

PAKRESET CON 255 ' Full reset

' Bits in status byte

YOVERMASK CON $80 ' Y overflow

XOVERMASK CON $40 ' X overflow

YSIGNMASK CON $20 ' Y Sign (1=negative)

XSIGNMASK CON $10 ' X Sign (1=negative)

'MIDBMASK CON 4 ' Middle button (note: some mice won't activate middle button w/o special commands)

RIGHTMASK CON 2 ' Right button

LEFTMASK CON 1 ' Left Button

OPIN CON 8 ' Output to PAK-Pin P8

IPIN CON 9 ' Input from PAK-Pin P9

FPIN CON 13 ' Flow control

BAUD CON 240 ' Baud rate (9600) CHANGE FOR OTHER BS

CPIN CON 200 ' DPI of the mouse (could be 800 or 200)

FRACIN CON 25 ' .0025 inch per count

' Temporary words/bytes

TW VAR Word

TB0 VAR TW.HIGHBYTE

TB1 VAR TW.LOWBYTE

TB2 VAR Byte

TB3 VAR Byte

' X&Y Raw counts

XRAW VAR Word

YRAW VAR Word

' X&Y Position

Xpos VAR Word

Ypos VAR Word

Start:

GOSUB InitLCD

GOSUB Clear

' Reset PAK-XI

SEROUT OPIN,BAUD,[PAKRESET]

PAUSE 500 ' Wait for it to happen

'Main Loop for Reading Trackpad Input

DO

' Get position report

SEROUT OPIN,BAUD,[GETPKT]

SERIN IPIN\FPIN,BAUD,[XRAW.HIGHBYTE, XRAW.LOWBYTE, YRAW.HIGHBYTE, YRAW.LOWBYTE, TB2]

'DEBUG "x=", SDEC W4, " y=", SDEC W5, " status=", HEX TB2, CR

Xpos=ABS(XRAW/CPIN)

IF Xpos>130 THEN Xpos=129

Ypos=ABS(YRAW/CPIN)

IF Ypos>130 THEN Ypos=129

'DEBUG "X=", DEC Xpos, " Y=", DEC Ypos, CR

'Insert Plot Commands

x=Xpos

y=Ypos

color=Blue

GOSUB Plot

LOOP

END

SendCommand:

SHIFTOUT SData, SClock, MSBFIRST, [0\1, dat\8]

RETURN

SendData:

SHIFTOUT SData, SClock, MSBFIRST, [255\1, dat\8]

RETURN

InitLCD:

HIGH CS

PAUSE 10

HIGH SClock

LOW SData

LOW Reset

PAUSE 1

Reset = 1

PAUSE 20

CS = 0

dat = $CA : GOSUB SendCommand

dat = $03 : GOSUB SendData

dat = 32 : GOSUB SendData

dat = 12 : GOSUB SendData

dat = $00 : GOSUB SendData

dat = $BB : GOSUB SendCommand

dat = $01 : GOSUB SendData

dat = $D1: GOSUB SendCommand

dat = $94 : GOSUB SendCommand

dat = $81 : GOSUB SendCommand

dat = 5 : GOSUB SendData

dat = $01 : GOSUB SendData

dat = $20 : GOSUB SendCommand

dat = $0F : GOSUB SendData

PAUSE 100

dat = $A7: GOSUB SendCommand

dat = $BC : GOSUB SendCommand

dat = $00 : GOSUB SendData

dat = 0 : GOSUB SendData

dat = $01 : GOSUB SendData

dat = $00 : GOSUB SendData

dat = $CE : GOSUB SendCommand

dat = 0 : GOSUB SendData

dat = 2 : GOSUB SendData

dat = 4 : GOSUB SendData

dat = 6 : GOSUB SendData

dat = 8 : GOSUB SendData

dat = 10 : GOSUB SendData

dat = 12: GOSUB SendData

dat = 15 : GOSUB SendData

dat = 0 : GOSUB SendData

dat = 2 : GOSUB SendData

dat = 4 : GOSUB SendData

dat = 6 : GOSUB SendData

dat = 8 : GOSUB SendData

dat = 10 : GOSUB SendData

dat = 12 : GOSUB SendData

dat = 15 : GOSUB SendData

dat = 0 : GOSUB SendData

dat = 5 : GOSUB SendData

dat = 10 : GOSUB SendData

dat = 15 : GOSUB SendData

dat = $25 : GOSUB SendCommand

dat = $AF : GOSUB SendCommand

PAUSE 200

FOR ctr = 0 TO 130

dat = $D6 : GOSUB SendCommand

NEXT

RETURN

Plot:

dat = $75 : GOSUB SendCommand

dat = y : GOSUB SendData

dat = 131 : GOSUB SendData

dat = $15 : GOSUB SendCommand

dat = x : GOSUB SendData

dat = 129 : GOSUB SendData

dat = $5C : GOSUB SendCommand

dat = color : GOSUB SendData

RETURN

Clear:

x = 0 : y = 0: color = Yellow: GOSUB Plot

FOR ctr = 1 TO 17424

SHIFTOUT SData, SClock, MSBFIRST, [255\1, dat\8]

NEXT

RETURN



Download Our iPhone App

Stay up to date on the latest news of the future of science and technology from your iPhone with full articles, images and offline viewing



Follow Us On Twitter

Featuring every article from the magazine and website, plus links from around the Web. Also see our PopSci DIY feed



Become a Fan On Facebook

Share links with friends, comment on stories and more


November 2009: Astronaut 3.0

Inside NASA's astronaut bootcamp and the grueling new training regimen for deep space. Plus, ten young geniuses shaking up science today, one writer's quest to analyze every man-made chemical in her body and more.

Check out the issue's full contents online here

Popular Science Photo Pool


Share your photos in the Pop Sci pool at www.flickr.com!
tags_sprite.png
POP_embeddedForm_cover_May09.jpg