Here is most of the relevant code.
//Hall pins
int HALL_A = 19;
int HALL_B = 20;
int HALL_C = 21;
//For reading HAL state in function
int tmp_HALL_A;
int tmp_HALL_B;
int tmp_HALL_C;
//Mosfet Pins
int Mos_A = 2;
int Mos_Ab = 6;
int Mos_B = 3;
int Mos_Bb = 7;
int Mos_C = 5;
int Mos_Cb = 8;
//RPM Calcualtion vars
int COUNT = 0;
unsigned int RPM;
double TIME = 0;
//Brake Start pins
int GO = 52;
int Brake = 50;
bool RUN = false;
bool BRAKE = false;
//FWD REV pins
int FWDpin = 48;
int REVpin = 46;
//Direction 0 is stopped, 1 FWD, 2 REV
int Direction = 0;
int Speed_Set_Sensor_Pin = A7;
bool Start = false;
//THis is the dutyration at first start
int Start_duty = 0;
int DUTY = 0;
void setup() {
//Set interupt pins ONLY USE PINS 2, 3, 18, 19, 20, 21 on mega
attachInterrupt(digitalPinToInterrupt(HALL_A), HALL_INT, CHANGE);
attachInterrupt(digitalPinToInterrupt(HALL_B), HALL_INT, CHANGE);
attachInterrupt(digitalPinToInterrupt(HALL_C), HALL_INT, CHANGE);
TCCR3B = TCCR3B & 0b11111000 | 0x01;
TCCR4B = TCCR4B & 0b11111000 | 0x01;
//Set Mosfet pins as output
pinMode(Mos_A, OUTPUT);
pinMode(Mos_Ab, OUTPUT);
pinMode(Mos_B, OUTPUT);
pinMode(Mos_Bb, OUTPUT);
pinMode(Mos_C, OUTPUT);
pinMode(Mos_Cb, OUTPUT);
digitalWrite(Mos_A, HIGH);
digitalWrite(Mos_Ab, HIGH);
digitalWrite(Mos_B, HIGH);
digitalWrite(Mos_Bb, HIGH);
digitalWrite(Mos_C, HIGH);
digitalWrite(Mos_Cb, HIGH);
Serial.begin(9600);
}
void loop() {
} //End Main Loop
void forwardSequence(){
tmp_HALL_A = digitalRead(HALL_A);
tmp_HALL_B = digitalRead(HALL_B);
tmp_HALL_C = digitalRead(HALL_C);
if(tmp_HALL_A == 1 && tmp_HALL_B == 0 && tmp_HALL_C == 0){
Step_1(DUTY);
//Serial.println("STEP 1");
}else if(tmp_HALL_A == 1 && tmp_HALL_B == 1 && tmp_HALL_C == 0){
Step_2(DUTY);
//Serial.println("STEP 2");
}else if(tmp_HALL_A == 0 && tmp_HALL_B == 1 && tmp_HALL_C == 0){
Step_3(DUTY);
//Serial.println("STEP 3");
}else if(tmp_HALL_A == 0 && tmp_HALL_B == 1 && tmp_HALL_C == 1){
Step_4(DUTY);
//Serial.println("STEP 4");
}else if(tmp_HALL_A == 0 && tmp_HALL_B == 0 && tmp_HALL_C == 1){
Step_5(DUTY);
//Serial.println("STEP 5");
}else if(tmp_HALL_A == 1 && tmp_HALL_B == 0 && tmp_HALL_C == 1){
Step_6(DUTY);
//Serial.println("STEP 6");
}
}
void reverseSequence(){
tmp_HALL_A = digitalRead(HALL_A);
tmp_HALL_B = digitalRead(HALL_B);
tmp_HALL_C = digitalRead(HALL_C);
if(tmp_HALL_A == 1 && tmp_HALL_B == 0 && tmp_HALL_C == 0){
Step_4(DUTY);
}else if(tmp_HALL_A == 1 && tmp_HALL_B == 1 && tmp_HALL_C == 0){
Step_5(DUTY);
}else if(tmp_HALL_A == 0 && tmp_HALL_B == 1 && tmp_HALL_C == 0){
Step_6(DUTY);
}else if(tmp_HALL_A == 0 && tmp_HALL_B == 1 && tmp_HALL_C == 1){
Step_1(DUTY);
}else if(tmp_HALL_A == 0 && tmp_HALL_B == 0 && tmp_HALL_C == 1){
Step_2(DUTY);
}else if(tmp_HALL_A == 1 && tmp_HALL_B == 0 && tmp_HALL_C == 1){
Step_3(DUTY);
}
}
void Step_1(int duty){
digitalWrite(Mos_B, HIGH);
digitalWrite(Mos_C, HIGH);
digitalWrite(Mos_Ab, HIGH);
digitalWrite(Mos_Bb, HIGH);
analogWrite(Mos_A, duty);
analogWrite(Mos_Cb, duty);
}
void Step_2(int duty){
digitalWrite(Mos_A, HIGH);
digitalWrite(Mos_C, HIGH);
digitalWrite(Mos_Ab, HIGH);
digitalWrite(Mos_Bb, HIGH);
analogWrite(Mos_B, duty);
analogWrite(Mos_Cb, duty);
}
void Step_3(int duty){
digitalWrite(Mos_A, HIGH);
digitalWrite(Mos_C, HIGH);
digitalWrite(Mos_Bb, HIGH);
digitalWrite(Mos_Cb, HIGH);
analogWrite(Mos_B, duty);
analogWrite(Mos_Ab, duty);
}
void Step_4(int duty){
digitalWrite(Mos_A, HIGH);
digitalWrite(Mos_B, HIGH);
digitalWrite(Mos_Bb, HIGH);
digitalWrite(Mos_Cb, HIGH);
analogWrite(Mos_C, duty);
analogWrite(Mos_Ab, duty);
}
void Step_5(int duty){
digitalWrite(Mos_A, HIGH);
digitalWrite(Mos_B, HIGH);
digitalWrite(Mos_Ab, HIGH);
digitalWrite(Mos_Cb, HIGH);
analogWrite(Mos_C, duty);
analogWrite(Mos_Bb, duty);
}
void Step_6(int duty){
digitalWrite(Mos_B, HIGH);
digitalWrite(Mos_C, HIGH);
digitalWrite(Mos_Ab, HIGH);
digitalWrite(Mos_Cb, HIGH);
analogWrite(Mos_A, duty);
analogWrite(Mos_Bb, duty);
}
void storeCharge(){
digitalWrite(Mos_A, HIGH);
digitalWrite(Mos_Ab, HIGH);
digitalWrite(Mos_B, HIGH);
digitalWrite(Mos_Bb, HIGH);
digitalWrite(Mos_C, HIGH);
digitalWrite(Mos_Cb, HIGH);
digitalWrite(Mos_Ab,LOW);
digitalWrite(Mos_Bb, LOW);
digitalWrite(Mos_Cb, LOW);
delay(10);
digitalWrite(Mos_Ab, HIGH);
digitalWrite(Mos_Bb, HIGH);
digitalWrite(Mos_Cb, HIGH);
}