Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
/* FILE: nanoCNCshieldTest.ino
DATE: 30/05/19
VERSION: 0.2
AUTHOR: Naylamp Mechatronics
Basado en el ejemplo HC_CNC_Shield_Test por Andrew Davies de HobbyComponents.com
Este ejemplo prueba la funcionalidad básica del shield CNC para Arduino Nano
Este scketch moverá los ejes X, Y, Z en ambas direcciones. También reportará
via puerto serial si algún final de carrera fue activado.
*/
#define EN 8 /* Enable pin para todos los drivers */
#define X_DIR 2 /* Pin de dirección para el eje X */
#define X_STEP 5 /* Pin de pasos para el eje X */
#define Y_DIR 3 /* Pin de dirección para el eje Y */
#define Y_STEP 6 /* Pin de pasos para el eje Y */
#define Z_DIR 4 /* Pin de dirección para el eje Z */
#define Z_STEP 7 /* Pin de pasos para el eje Z */
#define X_ENDSTOP 9 /* Pin de entrada para final de carrera en el eje X */
#define Y_ENDSTOP 10 /* Pin de entrada para final de carrera en el eje Y */
#define Z_ENDSTOP 11 /* Pin de entrada para final de carrera en el eje Z */
#define ABORT A0 /* Pin de entrada para abortar */
#define HOLD A1 /* Pin de entrada para Hold */
#define RESUME A2 /* Pin de entrada para Resume */
int Count = 0; /* Contador de pasos realizados */
boolean Direction = LOW; /* Dirección rotacional de los motores */
/* The setup routine runs once when you press reset: */
void setup()
{
/* Initialize serial */
Serial.begin(9600);
/* Configure the steper drive pins as outputs */
pinMode(EN, OUTPUT);
pinMode(X_DIR, OUTPUT);
pinMode(X_STEP, OUTPUT);
pinMode(Y_DIR, OUTPUT);
pinMode(Y_STEP, OUTPUT);
pinMode(Z_DIR, OUTPUT);
pinMode(Z_STEP, OUTPUT);
/* Configure the control pins as inputs with pullups */
pinMode(X_ENDSTOP, INPUT_PULLUP);
pinMode(Y_ENDSTOP, INPUT_PULLUP);
pinMode(Z_ENDSTOP, INPUT_PULLUP);
pinMode(ABORT, INPUT_PULLUP);
pinMode(HOLD, INPUT_PULLUP);
pinMode(RESUME, INPUT_PULLUP);
/* Activa los drivers de todos los motores */
digitalWrite(EN, LOW); //Se activa con LOW
}
void loop()
{
/* Cuenta un paso */
Count++;
/* Una vez que se realiza 5000 pasos se cambia la dirección de giro */
if (Count >= 5000)
{
Direction = !Direction;
digitalWrite(X_DIR, Direction); // Low = sentido horario
digitalWrite(Y_DIR, Direction); // Low = sentido horario
digitalWrite(Z_DIR, Direction); // Low = sentido horario
Count = 0;
}
/* Hacer girar los motores X, Y, Z */
digitalWrite(X_STEP, HIGH);
delay(1);
digitalWrite(Y_STEP, HIGH);
delay(1);
digitalWrite(Z_STEP, HIGH);
delay(1);
digitalWrite(X_STEP, LOW);
delay(1);
digitalWrite(Y_STEP, LOW);
delay(1);
digitalWrite(Z_STEP, LOW);
delay(1);
/* Revisa el estado de las entradas */
if (!digitalRead(X_ENDSTOP)) Serial.println("X-axis end-stop activado!");
if (!digitalRead(Y_ENDSTOP)) Serial.println("Y-axis end-stop activado!");
if (!digitalRead(Z_ENDSTOP)) Serial.println("Z-axis end-stop activado!");
if (!digitalRead(ABORT)) Serial.println("Abort input activado!");
if (!digitalRead(HOLD)) Serial.println("Hold input activado!");
if (!digitalRead(RESUME)) Serial.println("Resume input activado!");
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment