Estou com dificuldades no codigo

Estou criando um codigo que faça basicamente a mesma função de uma placa de motor de portão, vou usar um arduino e um controlador de velocidade que fornece dois botões do sentido do motor e um potenciômetro que nao precisa entrar no codigo.

Meu codigo apresenta alguns problemas:

1- No momento de acionamento meu fim de curso 2 está fechado, assim não consigo dar partida no motor. Preciso que o fim de curso 2 só pare o motor quando estiver voltando.

2- Na hora que o fim de curso 1 fecha, ele manda sinal para dois pinos de direção do motor, sendo quando fechasse precisava que ele rapidamente mandasse sinal apenas para voltar, igual a placa de motor de portao.

// Definindo os pinos dos componentes
const int botaoPino = 2;
const int motorPino1 = 3; // Pino para controlar a direção do motor
const int motorPino2 = 4; // Pino para controlar a direção do motor
const int fimDeCurso1 = 5; // Fim de curso para inverter a direção do motor
const int fimDeCurso2 = 6; // Fim de curso para parar o motor

// Variável para armazenar o estado atual do motor
int estadoMotor = 0;
int estadoBotaoAnterior = HIGH;

bool motorInvertido = false;

void setup() {
// Inicialize os pinos
pinMode(botaoPino, INPUT_PULLUP); // Botão é puxado para HIGH
pinMode(motorPino1, OUTPUT);
pinMode(motorPino2, OUTPUT);
pinMode(fimDeCurso1, INPUT_PULLUP); // Fim de curso é puxado para HIGH
pinMode(fimDeCurso2, INPUT_PULLUP); // Fim de curso é puxado para HIGH

// Inicialize o motor desligado
desligarMotor();
}

void loop() {
// Verifique se o botão foi pressionado
int estadoBotao = digitalRead(botaoPino);
if (estadoBotao == LOW && estadoBotaoAnterior == HIGH) {
// Botão pressionado, verifique o estado do motor
if (estadoMotor == 0) {
// Motor desligado, ligue-o
ligarMotor();
} else {
// Motor ligado, desligue-o
desligarMotor();
}
}
estadoBotaoAnterior = estadoBotao;

// Verifique os interruptores de fim de curso
if (digitalRead(fimDeCurso1) == LOW && estadoMotor == 1) {
// Interruptor de fim de curso 1 pressionado, inverter a direção do motor
inverterMotor();
}
if (estadoMotor == 1 && digitalRead(fimDeCurso2) == LOW) {
// Interruptor de fim de curso 2 pressionado, pare o motor apenas quando o motor estiver indo para frente
desligarMotor();
}
}

void ligarMotor() {
// Ligue o motor em uma direção
digitalWrite(motorPino1, HIGH);
digitalWrite(motorPino2, LOW);
estadoMotor = 1;
}

void desligarMotor() {
// Desligue o motor
digitalWrite(motorPino1, LOW);
digitalWrite(motorPino2, LOW);
estadoMotor = 0;
}

void inverterMotor() {
// Inverter a direção do motor
digitalWrite(motorPino1, !digitalRead(motorPino1));
digitalWrite(motorPino2, !digitalRead(motorPino2));
}