# Estou com dificuldades no codigo

**URL:** <https://forum.fazedores.com/t/estou-com-dificuldades-no-codigo/9138>\
**Category:** Arduino\
**Created:** [Setembro 17, 2023, 4:06pm UTC](https://forum.fazedores.com/t/estou-com-dificuldades-no-codigo/9138 "2023-09-17T16:06:19Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![Daniel3](https://avatars.discourse-cdn.com/v4/letter/d/a4c791/32.png) [@Daniel3](https://forum.fazedores.com/u/Daniel3)\
**Post date:** [Setembro 17, 2023, 4:06pm UTC](https://forum.fazedores.com/t/estou-com-dificuldades-no-codigo/9138/1 "2023-09-17T16:06:19Z")

</div>

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));  
}
