Been in Japan for a few weeks, gave me time to think without being able to code, so had a session of coding away on return. Lots of little changes. Ready for TTT2 now.
Code:
#include <LiquidCrystal.h>
LiquidCrystal lcd(12,11,8,5,4,3,2);
int backLight=13;
int controller_used=1;
int pins[] = {54,55,56,57,58,59,64,63,62};//ABLUDR
int p1[] = {38,39,40,41,45,46,50,51}; //P1 UDRLABXY
int p3[] = {47,52,48,53,44,42,43,44};
int p2[] = {22,23,24,25,29,30,34,35};
int p4[] = {31,36,32,37,28,26,27,28};
int invert_controls=0;
int P1=0;
int P2=0;
int button=0; int last_button;
byte record1[1200]; byte record2[1200];
byte record3[1200]; byte record4[1200];
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 all_pressed=0;
int F=16656; int frame_count=0;
int n;
void setup() {
pinMode(backLight,OUTPUT); //Turns on the backlight for the LCD
digitalWrite(backLight,HIGH);
pinMode(69,INPUT);digitalWrite(69,HIGH);
for(n=0;n<9;n++)
{pinMode(pins[n],INPUT); digitalWrite(pins[n],HIGH);}
for(n=0;n<8;n++)
{pinMode(p1[n],OUTPUT);pinMode(p2[n],OUTPUT);pinMo
de(p3[n],OUTPUT);pinMode(p4[n],OUTPUT);
digitalWrite(p1[n],unpressed); digitalWrite(p2[n],unpressed);
digitalWrite(p3[n],unpressed);digitalWrite(p4[n],u
npressed);}
lcd.begin(20,4);
Serial.begin(115200);
for(n=0;n<1200;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,2);lcd.print(bitRead(record2[current_slot],n));
lcd.setCursor(n+8,2);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==loop_frame) && (repetition>0))
{repetition--;frame_count=-1;}
if(frame_count>1199){for(n=0;n<8;n++)
{digitalWrite(p1[n],unpressed); digitalWrite(p2[n],unpressed);
digitalWrite(p3[n],unpressed); digitalWrite(p4[n],unpressed);}
mode=-1;}
}
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==0){
if((P1==1) && (P2==0) && (record1[0]==all_unpressed) && (record3[0]==all_unpressed)){frame_count=-1;}
if((P1==0) && (P2==1) && (record2[0]==all_unpressed) && (record4[0]==all_unpressed)){frame_count=-1;}
if((P1==1) && (P2==1) && (record1[0]==all_unpressed) && (record3[0]==all_unpressed) &&
(record2[0]==all_unpressed) && (record4[0]==all_unpressed)){frame_count=-1;}
}
if(frame_count>1199){mode=-1;}
}
if(mode==0){
if(P1==1){for(n=0;n< 8;n++){bitWrite(record1[current_slot],n,digitalRea
d(p1[n]));
bitWrite(record3[current_slot],n,digitalRead(p3[n]
));}}
if(P2==1){for(n=0;n< 8;n++){bitWrite(record2[current_slot],n,digitalRea
d(p2[n]));
bitWrite(record4[current_slot],n,digitalRead(p4[n]
));}}
dispP2();dispP1();
current_slot++;delay(300);
dispP2();
dispP1();
mode=-1;}
if (digitalRead(pins[6])==1){P1=0;}
if (digitalRead(pins[8])==1){P2=0;}
if (digitalRead(pins[6])==0){P1=1;}
if (digitalRead(pins[8])==0){P2=1;}
if(digitalRead(pins[7])==0 && digitalRead(pins[6])==1 && digitalRead(pins[8])==1){P1=1;P2=1;}
button=0;
if(digitalRead(pins[0])==0){button=5;}
if(digitalRead(pins[1])==0){button=7;}
if(digitalRead(pins[2])==0){button=4;}
if(digitalRead(pins[3])==0){button=8;}
if(digitalRead(pins[4])==0){button=2;}
if(digitalRead(pins[5])==0){button=6;}
if (button==4){
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 ((cursor_position>0) && (last_button==0)){cursor_position--;}
//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){
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((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 <19) && (last_button==0)){cursor_position++;}}
if(button==8){
if((cursor_position==0) && (last_button==0) && (current_slot<1199)){
current_slot++;mode=-1;
dispP2();dispP1();
}
if((cursor_position==1) && (current_slot<1199)){
delay(25); current_slot++;mode=-1;
dispP2();dispP1();
}
if((cursor_position==2) && (current_slot<1199)){
delay(5);
current_slot++;mode=-1;
// dispP2();dispP1();
}
if((cursor_position==3) && (last_button==0) && (current_slot<1199)){
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;
dispP2();dispP1();}
if((cursor_position==4) && (last_button==0) && (current_slot<1199)){
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;
dispP2();dispP1(); }
if((cursor_position==5) && (last_button==0) && (current_slot<1199)){
if(P1==1){for(n=1198;n>(current_slot-1);n-- ){record1[n+1]=record1[n];record3[n+1]=record3[n];
}
record1[current_slot]=all_unpressed;record3[curren
t_slot]=all_unpressed;}
if(P2==1){for(n=1198;n>(current_slot-1);n-- ){record2[n+1]=record2[n];record4[n+1]=record4[n];
}
record2[current_slot]=all_unpressed;record4[curren
t_slot]=all_unpressed;}
current_slot++;mode=-1;
dispP2();dispP1();}
if((cursor_position==6) && (last_button==0)){
if(P1==1){for(n=1198;n>-1;n-- ){record1[n+1]=record1[n];record3[n+1]=record3[n];
}
record1[0]=all_unpressed;record3[0]=all_unpressed;
}
if(P2==1){for(n=1198;n>-1;n-- ){record2[n+1]=record2[n];record4[n+1]=record4[n];
}
record2[0]=all_unpressed;record4[0]=all_unpressed;
}
current_slot++;mode=-1;
dispP2();dispP1();}
if(cursor_position==16){F++;}
if((cursor_position==7) && (loop_frame<1199))
{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<1200;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;
dispP2();dispP1();}
if ((cursor_position==1) && (current_slot>0)){
delay(25); current_slot--;mode=-1;
dispP2();dispP1();}
if ((cursor_position==2) && (current_slot>0)){
delay(5); current_slot--;mode=-1;
//dispP2();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;
dispP2();
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;
dispP2();
dispP1();}
if ((cursor_position==5) && (current_slot>0) && (last_button==0)){
if (P1==1) {for(n=current_slot;n<1199;n++){record1[n-1]=record1[n];record3[n-1]=record3[n];}
record1[1199]=all_unpressed;record3[1199]=all_unpr
essed;}
if (P2==1) {for(n=current_slot;n<1199;n++){record2[n-1]=record2[n];record4[n-1]=record4[n];}
record2[1199]=all_unpressed;record4[1199]=all_unpr
essed;}
current_slot--;mode=-1;
dispP2();
dispP1();
}
if((cursor_position==6)&& (current_slot>0) && (last_button==0)){
if (P1==1) {for(n=1;n<1199;n++){record1[n-1]=record1[n];record3[n-1]=record3[n];}
record1[1199]=all_unpressed;record3[1199]=all_unpr
essed;}
if (P2==1) {for(n=1;n<1199;n++){record2[n-1]=record2[n];record4[n-1]=record4[n];}
record2[1199]=all_unpressed;record4[1199]=all_unpr
essed;}
current_slot--;mode=-1;
dispP2();
dispP1(); }
if(cursor_position==16){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<1200;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))
{repetition=0;frame_count=-1;mode=1;}
if((cursor_position==2) && (last_button==0)){
if(P1==1)
{for(n=0;n< 1200;n++){record1[n]=all_unpressed;record3[n]=all_
unpressed;}frame_count=-1;mode=2;}
if(P2==1)
{for(n=0;n< 1200;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==6) && (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< 1200;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< 1200;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(" ");}
lcd.setCursor(0,3);lcd.print(button);
lcd.setCursor(2,3);lcd.print(P1);
lcd.setCursor(4,3);lcd.print(P2);
time2=micros();
//CUT HERE TO SPEED UP LCD
frame_count++;
last_button=button;
}
}