#include <TM1637TinyDisplay.h>
//#include <A4988.h>
//para LED tricolor
constexpr uint8_t LED_PIN_R =6;
constexpr uint8_t LED_PIN_G =5;
constexpr uint8_t LED_PIN_B =4;
// para display y joystick
constexpr uint8_t DISP_CLK =12;
constexpr uint8_t DISP_DIO =11;
constexpr uint8_t JYSTCK_HRZ =19;
constexpr uint8_t JYSTCK_SEL =20;
// pines de driver
constexpr uint8_t A4988_STEP = 41;
constexpr uint8_t A4988_DIR = 40;
constexpr uint8_t LIMIT_SW_A = 1;
constexpr uint8_t LIMIT_SW_B = 2;
// Comandos de desplazamiento
constexpr bool DERECHA = LOW;
constexpr bool IZQUIERDA = HIGH;
constexpr bool PRESIONADO = LOW;
constexpr bool NO_PRESIONADO = HIGH;
//declarar para comparacion de tramos de tiempo
unsigned long mmss_actuales = 0;
unsigned long mmss_iniciales= 0;
//var. booleanas
bool m_calibrado = false;
bool tiempo_vencido = false;
uint16_t num_pasos = 0; //cant pasos para una carrera ida/vuelta
uint16_t posi_pasos = 0;
uint16_t persiste_jystck;
uint16_t pulso ;
//declaracion de objeto
TM1637Display display = TM1637Display(DISP_CLK, DISP_DIO);
//definicion de arreglo, uso de constaes de biblioteca aaea
constexpr uint8_t error[] = {SEG_G, SEG_G, SEG_G, SEG_G};
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
// LED tricolor
pinMode (LED_PIN_R, OUTPUT);
pinMode (LED_PIN_G, OUTPUT);
pinMode (LED_PIN_B, OUTPUT);
// interruptores fin de carrera
pinMode (LIMIT_SW_A, INPUT_PULLUP);
pinMode (LIMIT_SW_B, INPUT_PULLUP);
pinMode (JYSTCK_HRZ, INPUT);
pinMode (JYSTCK_SEL, INPUT_PULLUP);
//driver A4988
pinMode (A4988_STEP,OUTPUT);
pinMode (A4988_DIR ,OUTPUT);
display.setSegments(error);
digitalWrite(LED_PIN_R, HIGH);
digitalWrite(LED_PIN_G, LOW);
}
void loop() {
if ( digitalRead(JYSTCK_SEL) == PRESIONADO) {
delay (10);
while (digitalRead(JYSTCK_SEL) == PRESIONADO);
delay(10);
digitalWrite(LED_PIN_R, HIGH);
digitalWrite(LED_PIN_G, HIGH);
display.setsegments (error);
Serial.println("Inicio de calibracion");
num_pasos =0;
//inicializa el tiempo
mmss_iniciales = millis();
tiempo_vencido = false;
while ( (digitalRead(LIMIT_SW_A)==LOW) || tiempo_vencido){
//
motorLin_microstep)
if (digitalRead(LIMIT_SW_A)==LOW){
}else{
}
}else{
//microstep hacia la derecha
//para actualizar tiempo
//........ = millis();
}
} else {
m_calibrado = motor_calib();
if (m_calibrado) {
//evlauar el sentido del joystick
if() {
}
}
}
void MotorLin_microstep(uint8_t dir, uint8_t pulso) {
digitalWrite(A4988_DIR, dir);
digitalWrite(A4988_STEP, HIGH);
delay(pulso);
digitalWrite(A4988_STEP, HIGH);
delay(pulso);
}
void error_calibrar (){
display.setSegments(error);
digitalWrite(LED_PIN_R, HIGH);
digitalWrite(LED_PIN_G, LOW);
Serial.println("Error de calibración: tiempo vencido");
Serial.println("Calibre el motor lineal");
delay (pulse);
m_calibrado = false;
}
void exito_calibrar ( ) {
posicion= 0;
display.showNumberDec(num_pasos);
Serial.printf("Motor calibrado con carrera: %d \n\r", num_pasos);
delay(2000);
digitalWrite(LED_PIN_R, LOW);
digitalWrite(LED_PIN_G, LOW);
display.showNumberDec(posicion);
m_calibrado = true;
}