Hrmm, ok thanks for you honest answers. Probably would take me even longer to program…
Im at 70% trial completion maybe i’ll just do it the ol’ fashion way.
Hrmm, ok thanks for you honest answers. Probably would take me even longer to program…
Im at 70% trial completion maybe i’ll just do it the ol’ fashion way.
Not that building a programmable stick isn’t something worth doing in its own right, but I should point out that the trophies are really there to keep you entertained. If they’re not fun…perhaps there are more rewarding things to persue.
Version 5 of the programmable joystick
k so i got a hori command stick ps and im just wondering how the hell do you get it to preform moves for you. Like how do you program the macros in this thing? I get the combos put in but i cant ever seem to exit and then take control of the stick again and press the command button to do a combo or anything…
I think you have to hit com + button to get it to execute a macro.
Which button? Com + ?
I think it’s one macro per button.
Tried using GIMX to do macros via PC to PS3 (usb connection)
[media=youtube]mTl5PNUb318[/media]
http://blog.gimx.fr/ Software is programmed by Matlo, still work in progress but very impressive.
1P only for Windows, via USB connection.
2P support through linux via Bluetooth.
If Namco adds command capture support for TTT2 then 1P only shouldn’t be as much of an issue.
Minimum cost would be about
http://www.pjrc.com/store/teensy.html $16
www.ebay.com CP2102 $3
Breadboard/wiring $not much
Macro support via text file.
Wow, I haven’t posted in this thread for a while. I’ve worked up a setup that should be fairly easy for most people to piggyback onto their joysticks, but before I show it off, I wanted to check something.
If I’m connecting pins from the arduino to a joystick (Cthulhu/PS360/Hori) should I be using resistors. And if so, what value would be appropriate. I’ve never used them and never had a problem, but in addition to using a disclaimer about try at your own risk, if I’m promoting this method I wouldn’t mind suggesting something sensible so that people don’t damage their hardware.
Thanks all.
you guys seem to be wasting quite a bit of money on an Arduino when IMO it’s not necessary. You could have used an ATMega AT90USB162 ATMEGA32U2 AVR usb controller. There is another programmable joystick controller project being made that is specifically taylored to Mame that uses the above CPU’s and in particular, a Minimus usb board which costs about less than $20 dollars. There’s a guy in that thread that is selling them pretty cheap as well.
It’s more about easy than cheap, but most people don’t want to do their own stuff anyway.
For the PS3 you can also bluetooth emulate a sixaxis.
Arduino pins are IIRC 40 uA per pin, and the current generation of sticks runs 5v, so if you’re going to stick in current limiting resistors they should be bigger than 125 k ohm.
No offense but an Arduino + Cthulhu isn’t exactly an “easy” solution.
IIRC, the pins are current limited to 20-25mA.
Using a 125k ohm in serial would break the setup; the cthulhu’s use a 10k pull up to 5v, so if the 'duino was trying to activate the pin, the voltage seen on that pin by the Cthulhu would be 5*(125k/135k)= 4.62v. The Cthulhu wouldn’t see it as pressed, and the 'duino wouldn’t be able to do its job.
If you want to make sure that in the case of a bad wiring job, the 'duino pins wouldn’t be subjected to more than that 20mA, use a 250 ohm. In the case of a short through the resistor, 20mA is lost as heat and the boards should both be fine. When the 'duino activates a signal line, the voltage seen by the Cthulhu would be 5*(250/10250)=0.12v, plenty for the Cthulhu to properly see the line as low.
[media=youtube]MBXa_1dYSJo[/media]
Arduino duemilanove / uno version
8 pins 1 player support
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); //sets up the pins for the LCD. Note, cannot use 9 or 10 as these are used by the interrupt timer
//int backLight=13;
//int pins[10]={15,16,17,18,19,2,3,11,12,13}; //**
int controller_used=1;
//int p1[] = {22,24,26,28,30,32,34,36};
int p1[] = {15,16,17,18,19,2,3,11};
int P1=1;
int invert_controls=0;
int button=0; int last_button;
byte record1[360];
int loop_frame=148; int loop_number=3; int repetition=0;
unsigned long time1; unsigned long time2; unsigned long time3; unsigned long time4;
int lag=0;
int mode = -1;
int current_slot = 0; int cursor_position = 0;
int pressed=0; int unpressed=1; int all_unpressed=255;
int F=16656; int frame_count=0;
int n;
void setup() {
pinMode(12,OUTPUT);
pinMode(13,OUTPUT);
digitalWrite(12,HIGH);
digitalWrite(13,LOW);
for(n=0;n<8;n++)
{pinMode(p1[n],OUTPUT);
digitalWrite(p1[n],unpressed); }
lcd.begin(16,2);
Serial.begin(115200);
for(n=0;n<361;n++){record1[n]=all_unpressed; }
}
void dispP1(){
for(n=0;n<8;n++){lcd.setCursor(n,1);lcd.print(bitRead(record1[current_slot],n));
}}
void loop() {
time2=micros();
if((time2)>(time1+F)) {
time1=micros();
if(mode==1) {time4=(micros()-time3);time3=micros();Serial.println(time4);
if(P1==1){for(n=0;n<8;n++)
{digitalWrite(p1[n],(bitRead(record1[frame_count],n)));
}}
if(frame_count>359){mode=-1;for(n=0;n<8;n++)
{digitalWrite(p1[n],unpressed); }}
}
if(mode==3) {
if(P1==1){for(n=0;n<8;n++)
{digitalWrite(p1[n],(bitRead(record1[frame_count],n)));
}}
if((frame_count==loop_frame) && (repetition>0))
{repetition--;frame_count=-1;}
if(frame_count>359){mode=-1;for(n=0;n<8;n++)
{digitalWrite(p1[n],unpressed); }}
}
if(mode==2) {
if(P1==1){for(n=0;n<8;n++){bitWrite(record1[frame_count],n,digitalRead(p1[n]));
}}
if(frame_count>359){mode=-1;}
}
if(mode==0){
if(P1==1){for(n=0;n<8;n++){bitWrite(record1[current_slot],n,digitalRead(p1[n]));
}}
if(P1==1){dispP1();}
current_slot++;delay(300);
if(P1==1){dispP1();}
mode=-1;}
if (analogRead(0)<50){button=6;}
if (analogRead(0)>100 && analogRead(0)<200){button=8;}
if (analogRead(0)>300 && analogRead(0)<350){button=2;}
if (analogRead(0)>450 && analogRead(0)<550){button=4;}
if (analogRead(0)>700 && analogRead(0)<750){button=5;}
if (analogRead(0)>1000){button=0;}
if (button==4){
if ((cursor_position>0) && (last_button==0)){cursor_position--;mode=-1;}
}
if (button==6){
if((cursor_position==9) && (last_button==0)){
if (p1[0]==15){invert_controls=1;}
if (p1[0]==16){invert_controls=2;}
if(invert_controls==2) {p1[0]=15; p1[1]=16;}
if(invert_controls==1) {p1[0]=16; p1[1]=15;}
invert_controls=0;
//15,16,17,18,19,2,3,11
}
if((cursor_position <9) && (last_button==0)){cursor_position++;mode=-1;}
}
if(button==8){
if((cursor_position==0) && (last_button==0) && (current_slot<359)){
current_slot++;mode=-1;
if(P1==1) {dispP1();} }
if((cursor_position==1) && (last_button==0) && (current_slot<359)){
current_slot++;mode=-1;
if(P1==1) {dispP1();} }
if((cursor_position==2) && (last_button==0) && (current_slot<359)){
current_slot++;mode=-1;
if(P1==1) {dispP1();} }
if((cursor_position==3) && (last_button==0) && (current_slot<359)){
if(P1==1) {record1[current_slot+1]=record1[current_slot]; record1[current_slot]=all_unpressed;
}
current_slot++;mode=-1;
if(P1==1){dispP1();}}
if((cursor_position==4) && (last_button==0) && (current_slot<359)){
if(P1==1) {record1[current_slot+1]=record1[current_slot];
}
current_slot++;mode=-1;
if(P1==1){dispP1();} }
if((cursor_position==5) && (last_button==0) && (current_slot<359)){
if(P1==1) {for(n=359;n>=current_slot;n--){record1[n+1]=record1[n];}
record1[current_slot]=all_unpressed;}
current_slot++;mode=-1;
if(P1==1){dispP1();}}
if(cursor_position==6){F++;}
if((cursor_position==7) && (loop_frame<359))
{delay(50);loop_frame++;}
if((cursor_position==8) && (loop_number<40) && (last_button==0))
{loop_number++;}
if(cursor_position==9){
unpressed=1;pressed=0;all_unpressed=255;
for(n=0;n<8;n++){
digitalWrite(p1[n],unpressed); }
for(n=0;n<361;n++){record1[n]=all_unpressed; }}
}
if ((button==2)){
if ((cursor_position==0) && (last_button==0) && (current_slot>0)){
current_slot--;mode=-1;
if(P1==1){dispP1();}}
if ((cursor_position==1) && (last_button==0) && (current_slot>0)){
current_slot--;mode=-1;
if(P1==1){dispP1();}}
if ((cursor_position==2) && (last_button==0) && (current_slot>0)){
current_slot--;mode=-1;
if(P1==1){dispP1();}}
if ((cursor_position==3) && (current_slot>0) && (last_button==0)){
if(P1==1) {record1[current_slot-1]=record1[current_slot]; record1[current_slot]=all_unpressed;
}
current_slot--;mode=-1;
if(P1==1){dispP1();}}
if ((cursor_position==4) && (current_slot>0) && (last_button==0)){
if (P1==1) {record1[current_slot-1]=record1[current_slot];
}
current_slot--;mode=-1;
if(P1==1){dispP1();}}
if ((cursor_position==5) && (current_slot>0) && (last_button==0)){
if (P1==1) {for(n=current_slot;n<359;n++){record1[n-1]=record1[n];}}
current_slot--;mode=-1;
if(P1==1){dispP1();}
}
if(cursor_position==6){F--;}
if((cursor_position==7) && (loop_frame>0))
{delay(50);loop_frame--;}
if((cursor_position==8) && (loop_number>0) && (last_button==0))
{loop_number--;}
if(cursor_position==9){
unpressed=0;pressed=1;all_unpressed=0;
for(n=0;n<8;n++){
digitalWrite(p1[n],unpressed); }
for(n=0;n<361;n++){record1[n]=all_unpressed; }}
}
if(button==5){
if((cursor_position==0) && (last_button==0))
{mode=0;}
if((cursor_position==1) && (last_button==0))
{frame_count=-1;mode=1;}
if((cursor_position==2) && (last_button==0)){
if(P1==1)
{for(n=0;n<360;n++){record1[n]=all_unpressed;}frame_count=-1;mode=2;}
}
if((cursor_position==3) && (last_button==0))
{frame_count=-1;mode=1;}
if((cursor_position==4) && (last_button==0))
{frame_count=-1;mode=1;}
if((cursor_position==5) && (last_button==0))
{frame_count=-1;mode=1;}
if((cursor_position==7) && (last_button==0))
{repetition=loop_number;frame_count=-1;mode=3;}
if((cursor_position==8) && (last_button==0))
{repetition=loop_number;frame_count=-1;mode=3;}
if(cursor_position==9)
{if(P1==1){for(n=0;n<360;n++){record1[n]=all_unpressed;}frame_count=-1;cursor_position=0;current_slot=0;}
loop_frame=148;loop_number=3;lag=0;lcd.clear();}
}
//CUT HERE TO SPEED UP LCD
lcd.setCursor(0,0);lcd.print(current_slot);
lcd.setCursor(4,0);lcd.print(cursor_position);
lcd.setCursor(7,0);lcd.print(loop_number);
lcd.setCursor(10,0);lcd.print(loop_frame);
if(cursor_position==6){lcd.setCursor(11,1);lcd.print(F);}
time2=micros();
//CUT HERE TO SPEED UP LCD
frame_count++;
last_button=button;
}
}
Arduino mega version
32 pins, 2P support
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
int controller_used=1;
int p1[] = {22,24,26,28,30,32,34,36};
int p2[] = {23,25,27,29,31,33,35,37};
int p3[] = {38,40,42,44,46,48,50,52};
int p4[] = {39,41,43,45,47,49,51,53};
int invert_controls=0;
int P1=0;
int P2=0;
int button=0; int last_button;
byte record1[360]; byte record2[360];
byte record3[360]; byte record4[360];
int loop_frame=148; int loop_number=3; int repetition=0;
unsigned long time1; unsigned long time2; unsigned long time3; unsigned long time4;
int lag=0;
int mode = -1;
int current_slot = 0; int cursor_position = 0;
int pressed=0; int unpressed=1; int all_unpressed=255;
int F=16656; int frame_count=0;
int n;
void setup() {
for(n=62;n<66;n++){pinMode(n,OUTPUT);digitalWrite(n,HIGH);}
for(n=66;n<70;n++){pinMode(n,OUTPUT);digitalWrite(n,LOW);}
for(n=0;n<8;n++)
{pinMode(p1[n],OUTPUT);pinMode(p2[n],OUTPUT);pinMode(p3[n],OUTPUT);pinMode(p4[n],OUTPUT);
digitalWrite(p1[n],unpressed); digitalWrite(p2[n],unpressed);
digitalWrite(p3[n],unpressed);digitalWrite(p4[n],unpressed);}
lcd.begin(16,2);
Serial.begin(115200);
for(n=0;n<361;n++){record1[n]=all_unpressed; record2[n]=all_unpressed;
record3[n]=all_unpressed; record4[n]=all_unpressed;}
}
void dispP1(){
for(n=0;n<8;n++){lcd.setCursor(n,1);lcd.print(bitRead(record1[current_slot],n));
lcd.setCursor(n+8,1);lcd.print(bitRead(record3[current_slot],n));}}
void dispP2(){
for(n=0;n<8;n++){lcd.setCursor(n,1);lcd.print(bitRead(record2[current_slot],n));
lcd.setCursor(n+8,1);lcd.print(bitRead(record4[current_slot],n));}}
void loop() {
time2=micros();
if((time2)>(time1+F)) {
time1=micros();
if(mode==1) {time4=(micros()-time3);time3=micros();Serial.println(time4);
if(P1==1){for(n=0;n<8;n++)
{digitalWrite(p1[n],(bitRead(record1[frame_count],n)));
digitalWrite(p3[n],(bitRead(record3[frame_count],n)));}}
if(P2==1){for(n=0;n<8;n++)
{digitalWrite(p2[n],(bitRead(record2[frame_count],n)));
digitalWrite(p4[n],(bitRead(record4[frame_count],n)));}}
if(frame_count>359){mode=-1;for(n=0;n<8;n++)
{digitalWrite(p1[n],unpressed); digitalWrite(p2[n],unpressed);
digitalWrite(p3[n],unpressed); digitalWrite(p4[n],unpressed);}}
}
if(mode==3) {
if(P1==1){for(n=0;n<8;n++)
{digitalWrite(p1[n],(bitRead(record1[frame_count],n)));
digitalWrite(p3[n],(bitRead(record3[frame_count],n)));}}
if(P2==1){for(n=0;n<8;n++)
{digitalWrite(p2[n],(bitRead(record2[frame_count],n)));
digitalWrite(p4[n],(bitRead(record4[frame_count],n)));}}
if((frame_count==loop_frame) && (repetition>0))
{repetition--;frame_count=-1;}
if(frame_count>359){mode=-1;for(n=0;n<8;n++)
{digitalWrite(p1[n],unpressed); digitalWrite(p2[n],unpressed);
digitalWrite(p3[n],unpressed); digitalWrite(p4[n],unpressed);}}
}
if(mode==2) {
if(P1==1){for(n=0;n<8;n++){bitWrite(record1[frame_count],n,digitalRead(p1[n]));
bitWrite(record3[frame_count],n,digitalRead(p3[n]));}}
if(P2==1){for(n=0;n<8;n++){bitWrite(record2[frame_count],n,digitalRead(p2[n]));
bitWrite(record4[frame_count],n,digitalRead(p4[n]));}}
if(frame_count>359){mode=-1;}
}
if(mode==0){
if(P1==1){for(n=0;n<8;n++){bitWrite(record1[current_slot],n,digitalRead(p1[n]));
bitWrite(record3[current_slot],n,digitalRead(p3[n]));}}
if(P2==1){for(n=0;n<8;n++){bitWrite(record2[current_slot],n,digitalRead(p2[n]));
bitWrite(record2[current_slot],n,digitalRead(p2[n]));}}
if(P2==1){dispP2();}
if(P1==1){dispP1();}
current_slot++;delay(300);
if(P2==1){dispP2();}
if(P1==1){dispP1();}
mode=-1;}
if (analogRead(0)<50){button=6;}
if (analogRead(0)>100 && analogRead(0)<200){button=8;}
if (analogRead(0)>300 && analogRead(0)<350){button=2;}
if (analogRead(0)>450 && analogRead(0)<550){button=4;}
if (analogRead(0)>700 && analogRead(0)<750){button=5;}
if (analogRead(0)>1000){button=0;}
if (button==4){
if ((cursor_position>0) && (last_button==0)){cursor_position--;mode=-1;}
if ((cursor_position==0) && (last_button==0)){controller_used++;if(controller_used>3){controller_used=1;}}}
if(controller_used==1){P1=1;P2=0;}
if(controller_used==2){P1=0;P2=1;}
if(controller_used==3){P1=1;P2=1;}
if (button==6){
if((cursor_position==9) && (last_button==0)){
if((P1==1)&&(p1[0]==22)){invert_controls=1;}
if((P1==1) && (p1[0]==24)){invert_controls=2;}
if(invert_controls==1) {p1[0]=24; p1[1]=22;}
if(invert_controls==2) {p1[0]=22; p1[1]=24;}
invert_controls=0;
if((P2==1) && (p2[0]==23)){invert_controls=3;}
if((P2==1) && (p2[0]==25)){invert_controls=4;}
if(invert_controls==3) {p2[0]=25; p2[1]=23;}
if(invert_controls==4) {p2[0]=23; p2[1]=25;}
invert_controls=0;
}
if((cursor_position <9) && (last_button==0)){cursor_position++;mode=-1;}}
if(button==8){
if((cursor_position==0) && (last_button==0) && (current_slot<359)){
current_slot++;mode=-1;
if(P2==1) {dispP2();}
if(P1==1) {dispP1();} }
if((cursor_position==1) && (last_button==0) && (current_slot<359)){
current_slot++;mode=-1;
if(P2==1) {dispP2();}
if(P1==1) {dispP1();} }
if((cursor_position==2) && (last_button==0) && (current_slot<359)){
current_slot++;mode=-1;
if(P2==1) {dispP2();}
if(P1==1) {dispP1();} }
if((cursor_position==3) && (last_button==0) && (current_slot<359)){
if(P1==1) {record1[current_slot+1]=record1[current_slot]; record1[current_slot]=all_unpressed;
record3[current_slot+1]=record3[current_slot]; record3[current_slot]=all_unpressed;}
if(P2==1) {record2[current_slot+1]=record2[current_slot]; record2[current_slot]=all_unpressed;
record4[current_slot+1]=record4[current_slot]; record4[current_slot]=all_unpressed;}
current_slot++;mode=-1;
if(P2==1){dispP2();}
if(P1==1){dispP1();}}
if((cursor_position==4) && (last_button==0) && (current_slot<359)){
if(P1==1) {record1[current_slot+1]=record1[current_slot];
record3[current_slot+1]=record3[current_slot];}
if(P2==1) {record2[current_slot+1]=record2[current_slot];
record4[current_slot+1]=record4[current_slot];}
current_slot++;mode=-1;
if(P2==1){dispP2();}
if(P1==1){dispP1();} }
if((cursor_position==5) && (last_button==0) && (current_slot<359)){
if(P1==1) {for(n=359;n>=current_slot;n--){record1[n+1]=record1[n];record3[n+1]=record3[n];}
record1[current_slot]=all_unpressed;record3[current_slot]=all_unpressed;}
if (P2==1) {for(n=359;n>=current_slot;n--){record2[n+1]=record2[n];record4[n+1]=record4[n];}
record2[current_slot]=all_unpressed;record4[current_slot]=all_unpressed;}
current_slot++;mode=-1;
if(P2==1){dispP2();}
if(P1==1){dispP1();}}
if(cursor_position==6){F++;}
if((cursor_position==7) && (loop_frame<359))
{delay(50);loop_frame++;}
if((cursor_position==8) && (loop_number<40) && (last_button==0))
{loop_number++;}
if(cursor_position==9){
unpressed=1;pressed=0;all_unpressed=255;
for(n=0;n<8;n++){
digitalWrite(p1[n],unpressed); digitalWrite(p2[n],unpressed);
digitalWrite(p3[n],unpressed); digitalWrite(p4[n],unpressed);}
for(n=0;n<361;n++){record1[n]=all_unpressed; record2[n]=all_unpressed;
record3[n]=all_unpressed;record4[n]=all_unpressed;}}
}
if ((button==2)){
if ((cursor_position==0) && (last_button==0) && (current_slot>0)){
current_slot--;mode=-1;
if(P2==1){dispP2();}
if(P1==1){dispP1();}}
if ((cursor_position==1) && (last_button==0) && (current_slot>0)){
current_slot--;mode=-1;
if(P2==1){dispP2();}
if(P1==1){dispP1();}}
if ((cursor_position==2) && (last_button==0) && (current_slot>0)){
current_slot--;mode=-1;
if(P2==1){dispP2();}
if(P1==1){dispP1();}}
if ((cursor_position==3) && (current_slot>0) && (last_button==0)){
if(P1==1) {record1[current_slot-1]=record1[current_slot]; record1[current_slot]=all_unpressed;
record3[current_slot-1]=record3[current_slot]; record3[current_slot]=all_unpressed;}
if(P2==1) {record2[current_slot-1]=record2[current_slot]; record2[current_slot]=all_unpressed;
record4[current_slot-1]=record4[current_slot]; record4[current_slot]=all_unpressed;}
current_slot--;mode=-1;
if(P2==1){dispP2();}
if(P1==1){dispP1();}}
if ((cursor_position==4) && (current_slot>0) && (last_button==0)){
if (P1==1) {record1[current_slot-1]=record1[current_slot];
record3[current_slot-1]=record3[current_slot];}
if (P2==1) {record2[current_slot-1]=record2[current_slot];
record4[current_slot-1]=record4[current_slot];}
current_slot--;mode=-1;
if(P2==1){dispP2();}
if(P1==1){dispP1();}}
if ((cursor_position==5) && (current_slot>0) && (last_button==0)){
if (P1==1) {for(n=current_slot;n<359;n++){record1[n-1]=record1[n];record3[n-1]=record3[n];}}
if (P2==1) {for(n=current_slot;n<359;n++){record2[n-1]=record2[n];record4[n-1]=record4[n];}}
current_slot--;mode=-1;
if(P2==1){dispP2();}
if(P1==1){dispP1();}
}
if(cursor_position==6){F--;}
if((cursor_position==7) && (loop_frame>0))
{delay(50);loop_frame--;}
if((cursor_position==8) && (loop_number>0) && (last_button==0))
{loop_number--;}
if(cursor_position==9){
unpressed=0;pressed=1;all_unpressed=0;
for(n=0;n<8;n++){
digitalWrite(p1[n],unpressed); digitalWrite(p2[n],unpressed);
digitalWrite(p3[n],unpressed); digitalWrite(p4[n],unpressed);}
for(n=0;n<361;n++){record1[n]=all_unpressed; record2[n]=all_unpressed;
record3[n]=all_unpressed; record4[n]=all_unpressed;}}
}
if(button==5){
if((cursor_position==0) && (last_button==0))
{mode=0;}
if((cursor_position==1) && (last_button==0))
{frame_count=-1;mode=1;}
if((cursor_position==2) && (last_button==0)){
if(P1==1)
{for(n=0;n<360;n++){record1[n]=all_unpressed;record3[n]=all_unpressed;}frame_count=-1;mode=2;}
if(P2==1)
{for(n=0;n<360;n++){record2[n]=all_unpressed;record4[n]=all_unpressed;}frame_count=-1;mode=2;}}
if((cursor_position==3) && (last_button==0))
{frame_count=-1;mode=1;}
if((cursor_position==4) && (last_button==0))
{frame_count=-1;mode=1;}
if((cursor_position==5) && (last_button==0))
{frame_count=-1;mode=1;}
if((cursor_position==7) && (last_button==0))
{repetition=loop_number;frame_count=-1;mode=3;}
if((cursor_position==8) && (last_button==0))
{repetition=loop_number;frame_count=-1;mode=3;}
if(cursor_position==9)
{if(P1==1){for(n=0;n<360;n++){record1[n]=all_unpressed;record3[n]=all_unpressed;}frame_count=-1;cursor_position=0;current_slot=0;}
if(P2==1){for(n=0;n<360;n++){record2[n]=all_unpressed;record4[n]=all_unpressed;}frame_count=-1;cursor_position=0;current_slot=0;}
loop_frame=148;loop_number=3;lag=0;lcd.clear();}
}
//CUT HERE TO SPEED UP LCD
lcd.setCursor(0,0);lcd.print(current_slot);
lcd.setCursor(4,0);lcd.print(cursor_position);
lcd.setCursor(7,0);lcd.print(loop_number);
lcd.setCursor(10,0);lcd.print(loop_frame);
lcd.setCursor(14,0);lcd.print(P1);
lcd.setCursor(15,0);lcd.print(P2);
if(cursor_position==6){lcd.setCursor(11,1);lcd.print(F);}
if(cursor_position>2){lcd.setCursor(14,0);lcd.print(" ");}
time2=micros();
//CUT HERE TO SPEED UP LCD
frame_count++;
last_button=button;
}
}
got my hands on a few ATMega AT90USB162 boards on the cheap. Plan on working on some ps3 and emulator support. Basically when this is done, anyone should be able to make an emulator or ps3 stick and use an sub $10USD board to do so.
Wonder how that’s going. I seem to remember finishing night shifts last time and reading Fairlight’s posts.
Have just finished night shifts again, and with the inability to sleep got some work done. I’ve managed to add support for SD cards, so that you can upload combo sequences to an SD card to save for later. Then, you can edit on a PC and put it back onto the Programmable stick.
Still quite messy at the moment, so will post code when I can get it tidied up a bit.
Doing a major necro bump of this thread to ask a question about the Hori Command Stick PS, since this seemed like the best place to ask it.
The short version of the story is that I’m thinking about tracking down one of these sticks for a disabled person who loves the original PlayStation but can’t hold a traditional gamepad controller and has trouble pressing small buttons, so what I’d like to know is if it’s possible to program the Command 1 & 2 buttons to act as the Start and Select buttons? I know they were intended more as long combo sequence buttons but is it possible to just make them act as Start and Select?
They’ve already tried a Real Arcade Pro but it was a bit too big and heavy for their liking, so I’m trying to find them something smaller and lighter that would have easy to press 24mm Start and Select buttons and I’m hoping that with a little programming the Hori Command Stick PS would fit the bill. Any chance this would work?
First Play the spell
It be easier to rewire the two extra Com buttons to be Start and Select than it be to reprogram it. Depending on the individual, maybe foot pedals is something to consider.
You can also try a weaker spring in the joystick if it becomes necessary.
Always happy to see this thread bumped. I was going to post saying that it’s probably not worth the price of a command stick just to get two extra buttons, but on checking yahoo auctions they have them going for 2000 and 4000 yen. I don’t know whether you can program start/select into macros on the Hori command sticks.
I do wonder though if it wouldn’t be easier just to put some buttons on the side of the controller and wire select and start onto them.