#include <AccelStepper.h>
// Definição dos pinos dos motores de passo
#define DIR1 10
#define STEP1 11
#define DIR2 12
#define STEP2 13
// Definição dos pinos dos switches de fim de curso
#define FIM_CUR1_A 7
#define FIM_CUR1_B 6
#define FIM_CUR2_A 9
#define FIM_CUR2_B 8
// Definição dos pinos dos potenciômetros para motores de passo
#define POT1 A0
#define POT2 A1
// Definição dos pinos para o L298N
#define IN1 2
#define IN2 3
#define IN3 4
#define IN4 5
// Definição dos pinos dos potenciômetros para motores DC
#define POT_DC1 A2
#define POT_DC2 A3
// Criação dos objetos para cada motor de passo
AccelStepper motor1(AccelStepper::DRIVER, STEP1, DIR1);
AccelStepper motor2(AccelStepper::DRIVER, STEP2, DIR2);
// Variáveis para armazenar a velocidade de cada motor de passo
int velocidade1 = 0;
int velocidade2 = 0;
// Constantes para a velocidade máxima de cada motor de passo
const int MAX_VELOCIDADE_MOTOR1 = 5;
const int MAX_VELOCIDADE_MOTOR2 = 30;
void setup() {
// Configuração dos pinos como saída ou entrada para motores de passo
pinMode(DIR1, OUTPUT);
pinMode(STEP1, OUTPUT);
pinMode(DIR2, OUTPUT);
pinMode(STEP2, OUTPUT);
pinMode(POT1, INPUT);
pinMode(POT2, INPUT);
// Configuração dos pinos para o L298N
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
// Configuração dos potenciômetros para motores DC
pinMode(POT_DC1, INPUT);
pinMode(POT_DC2, INPUT);
// Define os pinos dos switches de fim de curso como entrada
pinMode(FIM_CUR1_A, INPUT_PULLUP);
pinMode(FIM_CUR1_B, INPUT_PULLUP);
pinMode(FIM_CUR2_A, INPUT_PULLUP);
pinMode(FIM_CUR2_B, INPUT_PULLUP);
// Configuração das propriedades dos motores de passo
motor1.setMaxSpeed(MAX_VELOCIDADE_MOTOR1);
motor2.setMaxSpeed(MAX_VELOCIDADE_MOTOR2);
motor1.setAcceleration(50);
motor2.setAcceleration(50);
}
void loop() {
// Ler o valor dos potenciômetros para motores de passo
velocidade1 = lerPotenciometro(POT1, MAX_VELOCIDADE_MOTOR1);
velocidade2 = lerPotenciometro(POT2, MAX_VELOCIDADE_MOTOR2);
// Controle dos motores de passo
controlarMotorDePasso(motor1, velocidade1, FIM_CUR1_A, FIM_CUR1_B);
controlarMotorDePasso(motor2, velocidade2, FIM_CUR2_A, FIM_CUR2_B);
// Controle dos motores DC
controlarMotorDC(IN1, IN2, POT_DC1);
controlarMotorDC(IN3, IN4, POT_DC2);
}
// Função para ler o valor do potenciômetro e retornar a velocidade correspondente
int lerPotenciometro(int pinoPotenciometro, int maxVelocidade) {
int valorPot = analogRead(pinoPotenciometro);
valorPot = map(valorPot, 0, 1023, -maxVelocidade, maxVelocidade);
return valorPot;
}
// Função para controlar o motor de passo
void controlarMotorDePasso(AccelStepper &motor, int velocidade, int pinFimCursoA, int pinFimCursoB) {
if ((digitalRead(pinFimCursoA) == LOW && velocidade > 0) || (digitalRead(pinFimCursoB) == LOW && velocidade < 0)) {
motor.stop();
} else {
motor.setSpeed(velocidade);
motor.runSpeed();
}
}
// Função para controlar o motor DC
void controlarMotorDC(int pinIN1, int pinIN2, int pinPot) {
int valorPot = analogRead(pinPot);
int velocidade = map(valorPot, 0, 1023, -255, 255);
if (velocidade > 0) {
analogWrite(pinIN1, velocidade);
digitalWrite(pinIN2, LOW);
} else if (velocidade < 0) {
digitalWrite(pinIN1, LOW);
analogWrite(pinIN2, abs(velocidade));
} else {
digitalWrite(pinIN1, LOW);
digitalWrite(pinIN2, LOW);
}
}