Hello, I just got my MadCat wireless controller yesterday and was trying to try it out with this program. However, I’ve made sure that everything is connected and still the viberation motors aren’t working.
The controller i’m using the PS2 madcat wireless (the one advaible on this site).
[code];************************************************
;*** Basic Atom with SSC-32 and PS2 DualShock ***
;* H2 program #2 : Tank move + 1 joystick move *
;********** Bot Board Buzzer support ************
;************************************************
;** Programmer: Laurent Gay, [email protected] **
;************************************************
;
; Control Mode 1 :
; Control the right legs with the right joystick (SSC-32 XR command)
; Control the left legs with the left joystick (SSC-32 XL command)
; the global speed is mixed (SSC-32 XS command)
;
; Push the R3 button (Right joystick push button) to swap between control modes
;
; Control Mode 2 :
; Control All legs with the right joystick (SSC-32 XR-XL command mixed)
; the global speed is mixed too (SSC-32 XS command)
;
; Right and Left buttons adjust the speed limit (Mode 1 & 2)
;
; you may have to push the Analog Button on a MadCatz Wireless controller (if in sleep mode)
;
;************************************************
;
;
;--------------------------------------------------------------------
;-------------Constants
;PS2 Controller / BotBoard I
'DAT con P4
'CMD con P5
'SEL con P6
'CLK con P7
'SSC32 con p15
;PS2 Controller / BotBoard II
DAT con P12
CMD con P13
SEL con P14
CLK con P15
SSC32 con p8
DeadZone con 28 ; must be >= 28
PadMode con $79 ; Dualshock2 mode, use $73 with a Dualshock1
;--------------------------------------------------------------------
;-------------Variables
index var Byte
DualShock var Byte(7)
LastButton var Byte
XR var SWord
XL var SWord
MoveModeH2 var Bit
Speed var Byte
MaxSpeed var Byte
YCoord var Sbyte
ZCoord var Sbyte
WCoord var Sbyte
;--------------------------------------------------------------------
;***************
;*** Program ***
;***************
;-------------Init
;DualShock
pause 500
clear
high CLK
again
low SEL
shiftout CMD,CLK,FASTLSBPRE,$1\8,$43\8,$0\8,$1\8,$0\8] ;CONFIG_MODE_ENTER
high SEL
pause 1
low SEL
shiftout CMD,CLK,FASTLSBPRE,$01\8,$44\8,$00\8,$01\8,$03\8,$00\8,$00\8,$00\8,$00\8] ;SET_MODE_AND_LOCK
high SEL
pause 100
low SEL
shiftout CMD,CLK,FASTLSBPRE,$01\8,$4F\8,$00\8,$FF\8,$FF\8,$03\8,$00\8,$00\8,$00\8] ;SET_DS2_NATIVE_MODE
high SEL
pause 1
low SEL
shiftout CMD,CLK,FASTLSBPRE,$01\8,$43\8,$00\8,$00\8,$5A\8,$5A\8,$5A\8,$5A\8,$5A\8] ;CONFIG_MODE_EXIT_DS2_NATIVE
high SEL
pause 1
low SEL
shiftout CMD,CLK,FASTLSBPRE,$01\8,$43\8,$00\8,$00\8,$00\8,$00\8,$00\8,$00\8,$00\8] ;CONFIG_MODE_EXIT
high SEL
pause 1
low SEL
shiftout CMD,CLK,FASTLSBPRE,$1\8]
shiftin DAT,CLK,FASTLSBPOST,[DualShock(0)\8]
high SEL
pause 1
;serout S_OUT,i57600,"PadMode : ", HEX2 DualShock(0), 13]
Sound 9,[100\4435]
if DualShock(0) <> PadMode then again
MoveModeH2 = 0
MaxSpeed = 100
LastButton(0) = 255
;SSC-32 -> H2 engine
pause 500
serout SSC32,i38400,[13] ;clear the SSC-32 buffers
;Servo Offset Command
;Replace the section between the quotes with the values as described in the tutorial.
;serout SSC32,i38400,"#0PO0 #1PO0 #2PO0 #3PO0 #4PO0 #5PO0 #16PO0 #17PO0 #18PO0 #19PO0 #20PO0 #21PO0",13]
serout SSC32,i38400,“XS0 XSTOP”,13] ;Stop the sequencer if running
serout SSC32,i38400,“LF1700 RF1300 LR1300 RR1700”,13] ;Horizontal
serout SSC32,i38400,“LH1000 LM1900 LL2000”,13] ;Vertical Left
serout SSC32,i38400,“RH2000 RM1100 RL1000”,13] ;Vertical Right
serout SSC32,i38400,“VS2500 HT500”,13] ;Vertical Speed and Horizontal Time
serout SSC32,i38400,“XS0”,13] ;Set Global Speed to 0
;--------------------------------------------------------------------
;-------------Main loop
main
;DS2
low SEL
shiftout CMD,CLK,FASTLSBPRE,$1\8,$42\8]
for index = 0 to 6
shiftin DAT,CLK,FASTLSBPOST,[DualShock(index)\8]
next
high SEL
YCoord = DualShock(6) - 128
if YCoord > DeadZone then
YCoord = YCoord - DeadZone
elseif YCoord < -DeadZone
YCoord = YCoord + DeadZone
else
YCoord = 0
endif
ZCoord = DualShock(3) - 128
if ZCoord > DeadZone then
ZCoord = ZCoord - DeadZone
elseif ZCoord < -DeadZone
ZCoord = ZCoord + DeadZone
else
ZCoord = 0
endif
WCoord = DualShock(4) - 128
if WCoord > DeadZone then
WCoord = WCoord - DeadZone
elseif WCoord < -DeadZone
WCoord = WCoord + DeadZone
else
WCoord = 0
endif
if (DualShock(1).bit2 = 0) and LastButton.bit2 then ;R3 Button test
MoveModeH2 = MoveModeH2 ^ 1
Sound 9,[100\1318]
endif
if (DualShock(1).bit5 = 0) and (MaxSpeed <= 190) then ;Right Button test
MaxSpeed = MaxSpeed + 10
elseif (DualShock(1).bit7 = 0) and (MaxSpeed >= 20) ;Left Button test
MaxSpeed = MaxSpeed - 10
else
goto NoSound1
endif
Sound 9,[100\(MaxSpeed * 10 + 100)]
NoSound1
if MoveModeH2 then ;One Joystick Mode
XR = -ZCoord - WCoord
XL = ZCoord - WCoord
if XR > 100 then
XR = 100
elseif XR < -100
XR = -100
endif
if XL > 100 then
XL = 100
elseif XL < -100
XL = -100
endif
if abs(WCoord) > abs(ZCoord) then
Speed = abs(WCoord) * MaxSpeed / 100
else
Speed = abs(ZCoord) * MaxSpeed / 100
endif
else ;Tank Mode
if abs(WCoord) > abs(YCoord) then
Speed = abs(WCoord) * MaxSpeed / 100
else
Speed = abs(YCoord) * MaxSpeed / 100
endif
XR = -WCoord
XL = -YCoord
endif
serout SSC32,i38400,"XS",DEC Speed," XR",SDEC XR," XL",SDEC XL,13]
LastButton = DualShock(1)
nap 2 ;internal sleep mode, approx 38ms, use value 3,4 or 5 with some slow wireless controller
goto main
[/code]