//------------------------------------------------------------------------------------------------------------------
#include <TM1637Display.h>
#define CLK 2
#define DIO 3
int cont = 2;
TM1637Display display (CLK, DIO);
int Habilitador = 12; // Habilita Corriente con Enable.
int BotonGiroDerecho = 11; // Control de Giro.
int BotonGiroIzquierdo = 10; // Control de Giro.
int StepTiempo = 1.8; // Delay Tiempo del Step.
int LedGiraIzquierda = 7; // 1° Led Amarillo, Aviso de Giro a la Izquierda.
int LedGiraDerecha = 6; // 2° Led Verde, Aviso de Giro a la Derecha.
int LedNoGira = 5; // Led Rojo, Aviso sin Movimiento.
int SwFinDeCarrera = 4; // Switch de fin de Carrera.
int BotonReset = 13; // Boton de Reset.
const int Step = 9; // Pin del Step.
const int Direccion = 8; // Pin del Dir.
//------------------------------------------------------------------------------------------------------------------
void setup() {
display.setBrightness(5);
pinMode( BotonGiroIzquierdo, INPUT) ; // Habilita Botón Entrada Digital.
pinMode( BotonGiroDerecho, INPUT) ; // Habilita Botón Entrada Digital.
pinMode( SwFinDeCarrera, INPUT) ; // Habilita Switch de Carrera.
pinMode( BotonReset, 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.
pinMode(LedGiraIzquierda, OUTPUT); // Habilita Como Salida Digital.
pinMode(LedGiraDerecha, OUTPUT); // Habilita Como Salida Digital.
pinMode(LedNoGira, OUTPUT); // Habilita Como Salida Digital.
digitalWrite(Habilitador, LOW); // Al Arranque pone en estado LOW. Habilita.
}
//------------------------------------------------------------------------------------------------------------------
void loop() { // Bucle Principal.
int Valor1 = digitalRead(BotonGiroIzquierdo) ; // Leemos los Valores del Boton.
int Valor2 = digitalRead(BotonGiroDerecho) ; // Leemos los Valores del Boton.
int ValorReset = digitalRead(BotonReset);
if (ValorReset == HIGH){
ResetB();
cont=0;
display.showNumberDec (cont);
}
if (Valor1 == HIGH && Valor2 == LOW && cont >= 1) { // Verifica SI: Valor1 = X y Valor2 = X.
digitalWrite(Habilitador, LOW); // Habilita el Enable.
GiraIzquierda(); // Accion Giro Determinado.
AvisoLedGiraIzquierda(); // Accion Aviso de Giro Determinado.
}
if (Valor1 == LOW && Valor2 == HIGH ) { // Verifica SI: Valor1 = X y Valor2 = X.
digitalWrite(Habilitador, LOW); // Habilita el Enable.
GiraDerecha(); // Accion Giro Determinado.
AvisoLedGiraDerecha(); // Accion Aviso de Giro Determinado.
}
if (Valor1 == HIGH && Valor2 == HIGH ) { // Verifica SI: Valor1 = X y Valor2 = X.
digitalWrite(Habilitador, HIGH); // Deshabilita el Enable.
AvisoLedNoGira(); // Accion Aviso de Sin Giro.
}
if (Valor1 == LOW && Valor2 == LOW ) { // Verifica SI: Valor1 = X y Valor2 = X.
digitalWrite(Habilitador, HIGH); // Deshabilita el Enable.
AvisoLedNoGira(); // Accion Aviso de Sin Giro.
}
}
//------------------------------------------------------------------------------------------------------------------
void GiraIzquierda() { // Accion para girar a la Izquierda.
//if (cont >= 0) {
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 * 100 ); // Retardo.
digitalWrite(Step, LOW); // Cambia estado del Step para exitar la bobina.
delay(StepTiempo * 1 ); // Retardo.
cont--;
}
display.showNumberDec (cont);
//}
}
//------------------------------------------------------------------------------------------------------------------
void GiraDerecha() { // Accion para girar a la Derecha
if (cont <= 650) {
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 * 100 ); // Retardo.
digitalWrite(Step, LOW); // Cambia estado del Step para exitar la bobina.
delay(StepTiempo * 1 ); // Retardo.
cont++;
}
display.showNumberDec (cont);
}
}
//------------------------------------------------------------------------------------------------------------------
void AvisoLedNoGira() { // Accion Aviso con Led Rojo Sin Giro del Motor.
digitalWrite(LedGiraIzquierda, LOW); // Apaga Led.
digitalWrite(LedGiraDerecha, LOW); // Apaga Led.
digitalWrite(LedNoGira, HIGH); // Enciende Led.
}
//------------------------------------------------------------------------------------------------------------------
void AvisoLedGiraIzquierda() { // Accion Aviso con Led Verde Giro Izquierda del Motor.
digitalWrite(LedGiraDerecha, LOW); // Apaga Led.
digitalWrite(LedNoGira, LOW); // Apaga Led.
digitalWrite(LedGiraIzquierda, HIGH); // Enciende Led.
}
//------------------------------------------------------------------------------------------------------------------
void AvisoLedGiraDerecha() { // Accion Aviso con Led Verde Giro Derecha del Motor.
digitalWrite(LedNoGira, LOW); // Apaga Led.
digitalWrite(LedGiraIzquierda, LOW); // Apaga Led.
digitalWrite(LedGiraDerecha, HIGH); // Enciende Led.
}
//------------------------------------------------------------------------------------------------------------------
void ResetB(){
int ValorSwFinDeCarrera = digitalRead(SwFinDeCarrera);
do {
ValorSwFinDeCarrera = digitalRead(SwFinDeCarrera);
digitalWrite(Habilitador, LOW);
GiraIzquierda();
AvisoLedGiraIzquierda();
} while (ValorSwFinDeCarrera == LOW);
}