/*
Instituto Tecnológico de Mexicali
Autor: Moises Gallardo Cortez 19490287
Titulo: Motor a dos pasos con doble función PWM
Funcionamiento: El motor puede ser manipulado mediante los botones o el potenciómetro.El botón verde hace que gire hacía la izquierda, y el botón azul que gire hacía la derecha.
Por su parte, el potenciómetro funciona de la siguiente manera; todo el lado izquierdo de éste activa el motor haciéndolo girar hacía la derecha, mientras que toda la parte derecha
del potenciómetro hace que el motor gire hacía la izquierda.
*/
int Habilitador = 12; // Habilita Corriente con Enable.
int BotonGiroDerecho = 11; // Control de Giro.
int BotonGiroIzquierdo = 10; // Control de Giro.
int StepTiempo = 1; // Delay Tiempo del Step.
const int Step = 9; // Pin del Step.
const int Direccion = 8; // Pin del Dir.
#define ReadingPort A0 // Control de velocidad con PWM
int potenciometro;
int pwm1;
int pwm2;
void setup() {
pinMode( BotonGiroIzquierdo , INPUT) ; // Habilita Botón Entrada Digital.
pinMode( BotonGiroDerecho , INPUT) ; // Habilita Botón Entrada Digital.
pinMode(Habilitador, OUTPUT); // Habilita Como Salida Digital.
pinMode(Step, OUTPUT); // Habilita Como Salida Digital.
pinMode(Direccion, OUTPUT); // Habilita Como Salida Digital.
digitalWrite(Habilitador, LOW); // Al Arranque pone en estado LOW. Habilita.
}
void loop() {
int Valor1 = digitalRead(BotonGiroIzquierdo) ;
int Valor2 = digitalRead(BotonGiroDerecho) ;
potenciometro = analogRead(ReadingPort);
//Se leen los valores de los botones y el pontenciómetro
pwm1 = map(potenciometro, 0, 1023, 0, 255);
pwm2 = map(potenciometro, 0, 1023, 255, 0);
analogWrite(Step ,pwm1);
analogWrite(Direccion ,pwm2);
if (Valor1 == HIGH && Valor2 == LOW ) { // Verifica SI: Valor1 = X y Valor2 = X.
digitalWrite(Habilitador, LOW); // Habilita el Enable.
GiraIzquierda(); // Accion Giro Determinado.
}
if (Valor1 == LOW && Valor2 == HIGH ) { // Verifica SI: Valor1 = X y Valor2 = X.
digitalWrite(Habilitador, LOW); // Habilita el Enable.
GiraDerecha(); // Accion Giro Determinado.
}
if (Valor1 == HIGH && Valor2 == HIGH ) { // Verifica SI: Valor1 = X y Valor2 = X.
digitalWrite(Habilitador, HIGH); // Deshabilita el Enable.
}
if (Valor1 == LOW && Valor2 == LOW ) { // Verifica SI: Valor1 = X y Valor2 = X.
digitalWrite(Habilitador, HIGH); // Deshabilita el Enable.
}
}
void GiraIzquierda() { // Accion para girar a la Izquierda.
digitalWrite(Direccion, HIGH); // Selecciona la Direccion de Giro.
for (uint32_t i = 0; i < 1 ; i++) { // Ciclor for en este caso solo cuenta 1.
digitalWrite(Step, HIGH); // Cambia estado del Step para exitar la bobina.
delay(StepTiempo * 1 ); // Retardo.
digitalWrite(Step, LOW); // Cambia estado del Step para exitar la bobina.
delay(StepTiempo * 1 ); // Retardo.
}
}
void GiraDerecha() { // Accion para girar a la Derecha
digitalWrite(Direccion, LOW); // Selecciona la Direccion de Giro.
for (uint32_t i = 0; i < 1 ; i++) { // Ciclor for en este caso solo cuenta 1.
digitalWrite(Step, HIGH); // Cambia estado del Step para exitar la bobina.
delay(StepTiempo * 1 ); // Retardo.
digitalWrite(Step, LOW); // Cambia estado del Step para exitar la bobina.
delay(StepTiempo * 1 ); // Retardo.
}
}