#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Servo.h>
// Configuración de pantalla y servo
LiquidCrystal_I2C lcd(0x27, 16, 2);
Servo cortador;
// --- CONFIGURACIÓN DE PINES ACTUALIZADA ---
const int stepPin = 5; // <--- CAMBIADO AL PIN 5 (Tu cable al STEP del A4988)
const int dirPin = 4; // Tu cable al DIR del A4988
const int servoPin = 9; // Tu cable al Servomotor
// Botones (Pines 10, 11, 12, 13 y A0 según tus fotos)
const int btnArriba = 10;
const int btnAbajo = 11;
const int btnCambio = 12;
const int btnOk = 13;
const int btnStart = A0;
// Variables de control
int largo = 50;
int cantidad = 5;
bool editandoLargo = true;
void setup() {
lcd.init();
lcd.backlight();
pinMode(stepPin, OUTPUT);
pinMode(dirPin, OUTPUT);
pinMode(btnArriba, INPUT_PULLUP);
pinMode(btnAbajo, INPUT_PULLUP);
pinMode(btnCambio, INPUT_PULLUP);
pinMode(btnOk, INPUT_PULLUP);
pinMode(btnStart, INPUT_PULLUP);
cortador.attach(servoPin);
cortador.write(0); // Tijeras abiertas
actualizarPantalla();
}
void loop() {
// Navegación de menú
if (digitalRead(btnCambio) == LOW) {
editandoLargo = !editandoLargo;
delay(300);
actualizarPantalla();
}
if (digitalRead(btnArriba) == LOW) {
if (editandoLargo) largo += 5; else cantidad++;
delay(150);
actualizarPantalla();
}
if (digitalRead(btnAbajo) == LOW) {
if (editandoLargo) {
largo -= 5;
if(largo < 0) largo = 0;
} else {
cantidad--;
if(cantidad < 1) cantidad = 1;
}
delay(150);
actualizarPantalla();
}
// Iniciar proceso
if (digitalRead(btnStart) == LOW) {
ejecutarCicloCorte();
}
}
void actualizarPantalla() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(editandoLargo ? ">Largo: " : " Largo: ");
lcd.print(largo); lcd.print("mm");
lcd.setCursor(0, 1);
lcd.print(!editandoLargo ? ">Cant: " : " Cant: ");
lcd.print(cantidad); lcd.print(" pzs");
}
void ejecutarCicloCorte() {
for (int i = 1; i <= cantidad; i++) {
lcd.clear();
lcd.print("Pieza "); lcd.print(i); lcd.print("/"); lcd.print(cantidad);
// Mover motor por el Pin 5
digitalWrite(dirPin, HIGH);
long pasos = (long)largo * 10;
for (long x = 0; x < pasos; x++) {
digitalWrite(stepPin, HIGH);
delayMicroseconds(800);
digitalWrite(stepPin, LOW);
delayMicroseconds(800);
}
delay(500);
// Corte con Servo
cortador.write(90);
delay(600);
cortador.write(0);
delay(600);
}
actualizarPantalla();
}