const int Pin1 = 13;
const int Pin2 = 12;
const int Pin3 = 11;
const int Pin4 = 10;
const int modoPin1 = A5;
const int modoPin2 = A2;
const int modoPin3 = A3;
const int modoPin4 = A4;
const int pausaPin = A1;
const int botaoDirecaoPin = A0; // Pino do botão de direção
const int direcaoPin = 9; // Pino para indicar a direção
const int pulso = 180; // Número de pulsos para o motor
const int intervaloPulso = 2; // Tempo entre os pulsos em milissegundos
const unsigned long tempoBase = 60000; // Tempo entre ciclos em milissegundos
const unsigned long tempoEspera = tempoBase - (pulso*intervaloPulso);
unsigned long tempoUltimoCiclo1 = 0;
unsigned long tempoUltimoCiclo2 = 0;
unsigned long tempoUltimoCiclo3 = 0;
unsigned long tempoUltimoCiclo4 = 0;
unsigned long tempoUltimoPulso1 = 0;
unsigned long tempoUltimoPulso2 = 0;
unsigned long tempoUltimoPulso3 = 0;
unsigned long tempoUltimoPulso4 = 0;
int contagemPulso1 = 0;
int contagemPulso2 = 0;
int contagemPulso3 = 0;
int contagemPulso4 = 0;
bool pausa = false;
bool ultimaPausa = false;
void setup() {
pinMode(Pin1, OUTPUT);
pinMode(modoPin1, INPUT_PULLUP);
pinMode(Pin2, OUTPUT);
pinMode(modoPin2, INPUT_PULLUP);
pinMode(Pin3, OUTPUT);
pinMode(modoPin3, INPUT_PULLUP);
pinMode(Pin4, OUTPUT);
pinMode(modoPin4, INPUT_PULLUP);
pinMode(pausaPin, INPUT_PULLUP);
pinMode(botaoDirecaoPin, INPUT_PULLUP); // Configura o botão de direção com pull-up interno
pinMode(direcaoPin, OUTPUT); // Configura o pino de direção como saída
digitalWrite(direcaoPin, LOW); // Inicializa a direção como LOW
}
void loop() {
// Controle da direção com base no botão de direção (botão no A0)
if (digitalRead(botaoDirecaoPin) == LOW) {
// Se o botão estiver pressionado (nível baixo no A0)
digitalWrite(direcaoPin, LOW); // Define o pino 9 como LOW
} else {
// Se o botão estiver solto (nível alto no A0)
digitalWrite(direcaoPin, HIGH); // Define o pino 9 como HIGH
}
// Aqui continua o código de controle dos motores e pausa...
// Verifica se deve pausar
bool estadoAtualPausa = (digitalRead(pausaPin) == HIGH);
if (pausa && !estadoAtualPausa) {
// Reseta os ciclos e as contagens de pulso
tempoUltimoCiclo1 = millis();
tempoUltimoCiclo2 = millis();
tempoUltimoCiclo3 = millis();
tempoUltimoCiclo4 = millis();
contagemPulso1 = 0;
contagemPulso2 = 0;
contagemPulso3 = 0;
contagemPulso4 = 0;
}
pausa = estadoAtualPausa;
ultimaPausa = estadoAtualPausa;
if (pausa) {
// Controle manual durante a pausa
if (digitalRead(modoPin1) == LOW) {
comtinuo(Pin1);
} else {
digitalWrite(Pin1, LOW);
}
if (digitalRead(modoPin2) == LOW) {
comtinuo(Pin2);
} else {
digitalWrite(Pin2, LOW);
}
if (digitalRead(modoPin3) == LOW) {
comtinuo(Pin3);
} else {
digitalWrite(Pin3, LOW);
}
if (digitalRead(modoPin4) == LOW) {
comtinuo(Pin4);
} else {
digitalWrite(Pin4, LOW);
}
} else {
// Controle automático quando não está em pausa
unsigned long agora = millis();
// Motor 1
if (agora - tempoUltimoCiclo1 >= tempoEspera) {
cicloMotor(Pin1, contagemPulso1, tempoUltimoPulso1);
if (contagemPulso1 >= pulso) {
contagemPulso1 = 0;
tempoUltimoCiclo1 = agora;
}
}
// Motor 2
if (agora - tempoUltimoCiclo2 >= tempoEspera) {
cicloMotor(Pin2, contagemPulso2, tempoUltimoPulso2);
if (contagemPulso2 >= pulso) {
contagemPulso2 = 0;
tempoUltimoCiclo2 = agora;
}
}
// Motor 3
if (agora - tempoUltimoCiclo3 >= tempoEspera) {
cicloMotor(Pin3, contagemPulso3, tempoUltimoPulso3);
if (contagemPulso3 >= pulso) {
contagemPulso3 = 0;
tempoUltimoCiclo3 = agora;
}
}
// Motor 4
if (agora - tempoUltimoCiclo4 >= tempoEspera) {
cicloMotor(Pin4, contagemPulso4, tempoUltimoPulso4);
if (contagemPulso4 >= pulso) {
contagemPulso4 = 0;
tempoUltimoCiclo4 = agora;
}
}
}
}
void cicloMotor(int pin, int& contagemPulso, unsigned long& tempoUltimoPulso) {
unsigned long agora = millis();
if (agora - tempoUltimoPulso >= intervaloPulso && contagemPulso < pulso) {
digitalWrite(pin, HIGH);
delayMicroseconds(100);
digitalWrite(pin, LOW);
tempoUltimoPulso = agora;
contagemPulso++;
}
}
void comtinuo(int pin) {
digitalWrite(pin, HIGH);
delay(intervaloPulso);
digitalWrite(pin, LOW);
delay(intervaloPulso);
}