/*
"alunos": "Tiago Costa Conceição"
"Julio César Dourado"
*/
#define stepPin 2
#define stepDirPin 3
#define enablePin 4
#define ms1Pin 5
#define ms2Pin 6
#define ms3Pin 7
#define btnChangeDirection 8
#define btnOnOff 9
#define btnChangeMStep 10
bool motorEnabled = true;
bool direction = true;
void setup() {
Serial.begin(9600);
pinMode(stepPin, OUTPUT);
pinMode(stepDirPin, OUTPUT);
pinMode(enablePin, OUTPUT);
pinMode(ms1Pin, OUTPUT);
pinMode(ms2Pin, OUTPUT);
pinMode(ms3Pin, OUTPUT);
pinMode(btnChangeDirection, INPUT_PULLUP);
pinMode(btnOnOff, INPUT_PULLUP);
pinMode(btnChangeMStep, INPUT_PULLUP);
digitalWrite(stepPin, LOW);
digitalWrite(enablePin, LOW);
digitalWrite(ms1Pin, LOW);
digitalWrite(ms2Pin, LOW);
digitalWrite(ms3Pin, LOW);
digitalWrite(stepDirPin, direction);
}
void loop() {
int readingDirection = digitalRead(btnChangeDirection);
int readingOnOff = digitalRead(btnOnOff);
int readingMStep = digitalRead(btnChangeMStep);
// Inverter Direções
if (readingDirection == LOW) {
direction = !direction;
Serial.println(direction ? "Horario" : "Antihorario");
digitalWrite(stepDirPin, direction);
delay(200);
}
// Ligar / Desligar
if (readingOnOff == LOW) {
motorEnabled = !motorEnabled;
Serial.println(motorEnabled ? "Ligado" : "Desligado");
digitalWrite(enablePin, motorEnabled ? LOW : HIGH);
delay(200);
}
// Trocar Modos dele
if (readingMStep == LOW) {
changeMicrostepping();
delay(200);
}
// Motor ligado -> inicia steps
if (motorEnabled) {
digitalWrite(stepPin, HIGH);
delay(20);
digitalWrite(stepPin, LOW);
delay(20);
}
}
// Função para alternar entre os modos
void changeMicrostepping() {
static int mode = 0;
mode = mode + 1;
if (mode > 4){
mode = 0;
}
switch (mode) {
case 0:
Serial.println("Modo 1");
digitalWrite(ms1Pin, LOW);
digitalWrite(ms2Pin, LOW);
digitalWrite(ms3Pin, LOW);
break;
case 1:
Serial.println("Modo 2");
digitalWrite(ms1Pin, HIGH);
digitalWrite(ms2Pin, LOW);
digitalWrite(ms3Pin, LOW);
break;
case 2:
Serial.println("Modo 3");
digitalWrite(ms1Pin, LOW);
digitalWrite(ms2Pin, HIGH);
digitalWrite(ms3Pin, LOW);
break;
case 3:
Serial.println("Modo 4");
digitalWrite(ms1Pin, HIGH);
digitalWrite(ms2Pin, HIGH);
digitalWrite(ms3Pin, LOW);
break;
case 4:
Serial.println("Modo 5");
digitalWrite(ms1Pin, HIGH);
digitalWrite(ms2Pin, HIGH);
digitalWrite(ms3Pin, HIGH);
break;
}
}