0% found this document useful (0 votes)
37 views

Modulo Arduino CNC

Uploaded by

pedro nieves
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
37 views

Modulo Arduino CNC

Uploaded by

pedro nieves
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 72

/*

WEB: TELEMAXTRONICS.COM
AUTOR:ING. PEDRO NIEVES

*/

/* lIBRERIAS NECESARIAS PARA EL CODIGO*/


#include <EEPROM.h>
#include <Wire.h>
//#include <LiquidCrystal.h>
#include <SPI.h>
#include <Keypad.h>
#include <Stepper.h>
#include <AccelStepper.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
#include <MemoryFree.h>
/* DECLARACIÓN DE CONSNTANTES NECESARIAS PARA EL CODIGO*/

//Sensores limitadores del carro CV


#define sensor1 28
#define sensor2 29

#define releH 22//Rele de la sierra -horizontal


#define finalV 42//final de carrera carroCV
#define releP 44//activacion del releP
#define sensorP 46//final de carrera releP
#define finalI 26//final de carrera tercero horizontal
#define finalE 19//NA
#define finalCV1 36//sensor 1 del cv al final
#define finalCV 40//sensor del cv al final

const int stepPinVT = 11;//NA


const int dirPinVT = 10;//NA

/* DECLARACIÓN DE VARIABLES GLOBALES NECESARIAS PARA EL CODIGO*/


int thspeed, pasonsr2;
float prolijoh = 15, pasos2;
int cuenta_corte, cuenta_cadena;
float cortehcadena[4];
int cc = 0, hh = 0, xx1, xx2, xx3;
int var3 = 0, posi = 0;
char datos[13];
char datosok, a;
int sensorPP = 0;
boolean segmentacion;
String dt, data;
int x1 = 0;
byte ledPin = 13;
boolean blink = false;
boolean ledPin_state;
String msg;
int counter1 = 1, vertical, terceroV, fcv, fcv1, thactivo, thir, thdevolver, smayor, negativo, ptv1, serial,
rh1;
float calib, calib4, calibcp, calibtv, p11 = 0, p22 = 0, p33 = 0, p44 = 0, c11 = 0, c22 = 0, c33 = 0, pasos,
cuenta1, recordar;
float res1, resul, resc1, leerc, res = 0, pos, pos1, resta, poscp, ptv, poscv, posth, cero, profun,
ajuste_recordar;
int counter = 1, cnt = 0, p1 = 0, p2 = 0, p3 = 0, p4 = 0, p5 = 0, rt1 = 0, y11, t2 = 0, t3 = 0, t4 = 0, t5 = 0,
subir, salir, t6 = 0;
int cal, refi, desp, fv, fi, fe, rt, y1, coma, medida, velocidad, error, pasosmm, ss1, ss2;
float cali[10], var1;
int coma1 = 0, var2;
long int ptvrd = 0; //,pasosround=0;
long pasosround = 0;
unsigned long loopCount;
unsigned long startTime;

//Inicializala libreria AccelStepper con los pines correspondientes


AccelStepper carroCV(1, 9, 8, true);
AccelStepper carroTH(1, 11, 10, true);

//Inicializala libreria de lcd con el modelo


#define I2C_ADDR 0x27
LiquidCrystal_I2C lcd(I2C_ADDR,2, 1, 0, 4, 5, 6, 7);

//configurar el teclado: columnas y filas


char customKey;
const byte ROWS = 4; //para fila
const byte COLS = 4; //para columna

char hexaKeys[ROWS][COLS] = {//indicar el valor char en cada poscion del teclado


{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'K'}
};

byte rowPins[ROWS] = {65, 64, 63, 62}; ///pines de las filas


byte colPins[COLS] = {69, 68, 67, 66}; //pines de las columnas

//INICIALIZAR LA LIBRERÍA DE TECLADO


Keypad keypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);

//VARIABLES FLOAT GRUPALES PARA ESCRIBIR Y LEER EEPROM

union Float_Byte2 { //CP


float datoF2;
byte datoB2[4];
} unionFB2;
union Float_Byte3 { //TV
float datoF3;
byte datoB3[4];
} unionFB3;
union Float_Byte6 { //TV
float datoF6;
byte datoB6[4];
} unionFB6;
union Float_Byte5 {
float datoF5; //ajustar
byte datoB5[4];
} unionFB5;
union Float_Byte7 {
float datoF7; //ajustar
byte datoB7[4];
} unionFB7;
union Float_Byte8 {
float datoF8; //ajustar
byte datoB8[4];
} unionFB8;
union Float_Byte1 {
float datoF1; //ajustar
byte datoB1[4];
} unionFB1;
union Float_Byte4 { //ct
float datoF4;
byte datoB4[4];
} unionFB4;
union Float_Byte { //ct
float datoF;
byte datoB[4];
} unionFB;
union Integer_Byte {
int datoI;
byte datoB[2];
} unionIB;
char charN;
/*------CONFIGURACION E INICILIZACION DE ELEMENTOS-----*/
void setup() {
//CONFIGURAMOS PARAMETROS DE MOTOR CV
carroCV.setMaxSpeed(300.0);
carroCV.setAcceleration(100.0);
carroCV.setSpeed(40);
carroCV.moveTo(0);

//CONFIGURAMOS PARAMETROS DE MOTOR TH


carroTH.setMaxSpeed(3600.0);
carroTH.setAcceleration(3400.0);
carroTH.setSpeed(2400);
carroTH.moveTo(0);

//ASIGNAR VALOR A VARIABLES


vertical = 5000;
terceroV = 5000;
pasosmm = 300.5 / 1000;

//DEFINIMOS LAS SALIDAS Y ENTRADAS DIGITALES


pinMode(stepPinVT, OUTPUT);
pinMode(dirPinVT, OUTPUT);
pinMode(finalCV, INPUT_PULLUP);
pinMode(finalCV1, INPUT_PULLUP);
pinMode(finalE, INPUT);
pinMode(finalI, INPUT);
pinMode(finalV, INPUT);
pinMode(sensorP, INPUT);
pinMode(sensor1, INPUT_PULLUP);
pinMode(sensor2, INPUT_PULLUP);
pinMode(62, OUTPUT), (63, OUTPUT), (64, OUTPUT), (65, OUTPUT);
pinMode(67, INPUT), (68, INPUT), (69, INPUT), (66, INPUT);
pinMode(ledPin, OUTPUT), pinMode(stepPinVT, OUTPUT), (dirPinVT, OUTPUT);
pinMode(releH, OUTPUT);
digitalWrite(releH, HIGH);
pinMode(releP, OUTPUT);
digitalWrite(releP, HIGH);
//CONFIGURAMOS PUERTOS SERIALES
Serial.begin(115200);
Serial3.begin(9600);
Serial2.begin(9600);

//INICIALIZAR LCD
lcd.begin (20,4);// Inicializar el display con 20 caraceres 4 lineas
lcd.setBacklightPin(3,POSITIVE);
lcd.setBacklight(HIGH);//ENCENDER EL LED INTERNO DE LA LCD
lcd.home ();//IR AL INICIO
lcd.clear();
lcd.print(" MLPLAK");//
delay(100);

//LEEMOS LOS DATOS EN LA MEMORIA EEPROM


unionFB1.datoB1[0] = EEPROM.read(50);
unionFB1.datoB1[1] = EEPROM.read(51);
unionFB1.datoB1[2] = EEPROM.read(52);
unionFB1.datoB1[3] = EEPROM.read(53);

unionFB5.datoB5[0] = EEPROM.read(90);
unionFB5.datoB5[1] = EEPROM.read(91);
unionFB5.datoB5[2] = EEPROM.read(92);
unionFB5.datoB5[3] = EEPROM.read(93);

unionFB2.datoB2[0] = EEPROM.read(60);
unionFB2.datoB2[1] = EEPROM.read(61);
unionFB2.datoB2[2] = EEPROM.read(62);
unionFB2.datoB2[3] = EEPROM.read(63);

unionFB3.datoB3[0] = EEPROM.read(70);
unionFB3.datoB3[1] = EEPROM.read(71);
unionFB3.datoB3[2] = EEPROM.read(72);
unionFB3.datoB3[3] = EEPROM.read(73);

unionFB4.datoB4[0] = EEPROM.read(80);
unionFB4.datoB4[1] = EEPROM.read(81);
unionFB4.datoB4[2] = EEPROM.read(82);
unionFB4.datoB4[3] = EEPROM.read(83);

unionFB6.datoB6[0] = EEPROM.read(94);
unionFB6.datoB6[1] = EEPROM.read(95);
unionFB6.datoB6[2] = EEPROM.read(96);
unionFB6.datoB6[3] = EEPROM.read(97);

unionFB7.datoB7[0] = EEPROM.read(100);
unionFB7.datoB7[1] = EEPROM.read(101);
unionFB7.datoB7[2] = EEPROM.read(102);
unionFB7.datoB7[3] = EEPROM.read(103);

unionFB8.datoB8[0] = EEPROM.read(110);
unionFB8.datoB8[1] = EEPROM.read(111);
unionFB8.datoB8[2] = EEPROM.read(112);
unionFB8.datoB8[3] = EEPROM.read(113);

unionFB.datoB[0] = EEPROM.read(10);
unionFB.datoB[1] = EEPROM.read(11);
unionFB.datoB[2] = EEPROM.read(12);
unionFB.datoB[3] = EEPROM.read(13);
fv = digitalRead(finalI);
unionIB.datoB[0] = EEPROM.read(30);
unionIB.datoB[1] = EEPROM.read(31);

//ALGUNAS CONDICIONES SI LOS VALORES DE LA EEPROM NO SON LOS ESPERADOS


resta = unionFB1.datoF1;
if (resta > 250) {
resta = 11;
}
if ((unionFB4.datoB4[0] > 254) && (unionFB4.datoB4[1] > 254)) {
unionFB4.datoF4 = 188.4;
}
if ((unionFB7.datoB7[0] > 254) && (unionFB7.datoB7[1] > 254)) {
unionFB7.datoF7 = 15;
}
if ((unionFB.datoB[0] > 254) && (unionFB.datoB[1] > 254)) {
unionFB.datoF = 0.1;
}
if ((unionFB2.datoB2[0] > 254) && (unionFB2.datoB2[1] > 254)) {
unionFB2.datoF2 = 60;
}
if ((unionFB3.datoB3[0] > 254) && (unionFB3.datoB3[1] > 254)) {
unionFB3.datoF3 = 10;
}
if ((unionFB6.datoB6[0] > 254) && (unionFB6.datoB6[1] > 254)) {
unionFB6.datoF6 = 62;
}
if ((unionFB5.datoB5[0] > 254) && (unionFB5.datoB5[1] > 254)) {
unionFB5.datoF5 = 72;
}
if ((unionFB8.datoB8[0] > 254) && (unionFB8.datoB8[1] > 254)) {
unionFB8.datoF8 = 10;
}

ajuste_recordar = unionFB8.datoF8;

if (unionIB.datoI < 0) {
desp = 500;
} else {
desp = unionIB.datoI;
}
refi = EEPROM.read(20);
if (refi > 254) {
refi = 5;
}
velocidad = 640;
error = 0;
thspeed = 340;
if (desp < 1) {
desp = 0;
}
//Ajustar corte V carroV altura
subir = 384;
rh1 = 0;
salir = unionFB5.datoF5;
thir = salir - 22;
cero = unionFB6.datoF6;
prolijoh = unionFB7.datoF7;
thdevolver = 50;
//Ajustar corte H carroV altura

resta = -unionFB4.datoF4;
lcd.setCursor(1, 1), lcd.print("Bienvenido!");
delay(4800);
lcd.clear();//limpiar lcd
carroCV.setCurrentPosition(0);
delay(300);
Serial2.print("s");//resetear valores en la pagina
cvu();
inicio();//INCIAR EL TH VOLVIENDO A CERO
}

int condicionV() {
if ((poscv <= 120 && poscv >= 70) || (poscv <= 220 && poscv >= 170) || (poscv <= 320 && poscv >=
270) || (poscv <= 420 && poscv >= 370) || (poscv <= 520 && poscv >= 470) || (poscv <= 620 &&
poscv >= 570) || (poscv <= 720 && poscv >= 670) || (poscv <= 820 && poscv >= 770) || (poscv <= 920
&& poscv >= 870) || (poscv <= 1020 && poscv >= 970) || (poscv <= 1120 && poscv >= 1070) || (poscv
<= 1220 && poscv >= 1170) || (poscv <= 1320 && poscv >= 1270) || (poscv <= 1420 && poscv >=
1370) || (poscv <= 1520 && poscv >= 1470) || (poscv <= 1620 && poscv >= 1570) || (poscv <= 1720
&& poscv >= 1670) || (poscv <= 1820 && poscv >= 1770) || (poscv <= 1920 && poscv >= 1870) ||
(poscv <= 2020 && poscv >= 1970) || (poscv <= 2120 && poscv >= 2070)) {
return HIGH;
} else {
return LOW;
}

}
/*------VOLVER AL INICIO A CARRO TH-----*/
void inicio() {

main:
fe = digitalRead(finalE);//leer sensor 0 de th
fi = digitalRead(finalI);
lcd.setCursor(1, 1), lcd.print("Iniciando!-TH"); //imprimir en pantalla el inicio de Th
/*SI EL VALOR ES 0 SIGNIFICA QUE EL SENSOR ESTA DESACTIVADO, CUANDO SEA 1 SE PARA EL
MOTOR Y SE INICIA EL SIGUIENTE MOTOR*/
while ((fi == 0)) {
fi = digitalRead(finalI);
if (fi == 1) {
inicio();
}
carroTH.move(1000);
carroTH.run();
}
fi = digitalRead(finalI); //leer sensor 0 de CT
delay(200);
if (fi == 0) {
goto main;
}
lcd.clear();//limpiar pantalla
carroTH.stop();//parar TH
carroCV.stop();//parar CV
/*ENVIAR VALORES DE VARIABLES DE CALIBRACIÓN A LA PAGINA*/
Serial2.print(";"), Serial2.print(thir), Serial2.print(";"), Serial2.print(unionFB7.datoF7),
Serial2.print(";"), Serial2.print(unionFB6.datoF6), Serial2.print(";"), Serial2.print(unionFB5.datoF5),
Serial2.print(";"), Serial2.print(unionFB3.datoF3 * 3), Serial2.print(";"), Serial2.print(unionFB2.datoF2
* 2), Serial2.print(";"), Serial2.print(unionFB4.datoF4), Serial2.print(";");
inicio2();//ir a siguiente funcion para inicializar CV
}
/*------VOLVER AL INICIO A CARRO CV-----*/
void inicio2() {
fcv = digitalRead(finalCV); //leer sensor 0 de CV
fcv1 = digitalRead(finalCV1); //leer sensor 1 de CV
/*SI LOS 2 SENSORES SE ACTIVA, ES CERO Y SALE DELBUCLE WHILE*/
while ((fcv == 1 || fcv1 == 1)) { //bucle while para cuando alguno de los sensores estan desactivados
lcd.setCursor(1, 2), lcd.print("Iniciando!-CV"); //imprimir en pantalla el inicio de CV
fcv = digitalRead(finalCV);//leer sensor 0
fcv1 = digitalRead(finalCV1);//leer sensor 1
if (fcv == 0 && fcv1 == 0) { //si los sensores son sensores estan activados se salen del bucle y paran
el motor
inicio2();//volver a funcion
}
carroCV.move(5000);//mover -5000 para regresar el motor cv
carroCV.run();//funcion de mover cv
}

lcd.clear();//limpiar lcd
carroCV.stop();//parar cv
thactivo = 0, serial = 0; //poner variables en 0
/*ENVIAR POSICIÓN A LA PAGINA*/
Serial2.print(":"), Serial2.print(poscv), Serial2.print(":"), Serial2.print(posth), Serial2.print(":");
loop();//ir a funcion loop del inicio
}
/*------INICIO Y LOOP DEL SISTEMA-RECIBIR DATOS DE ARDUINO"A" POR SERIAL 3-----*/
void loop() {
/*MOSTRAR VALORES EN LA LCD*/
lcd.setCursor(4, 0), lcd.print(" INICIO ");
//lcd.setCursor(15,0),lcd.print(unionFB2.datoF2);
lcd.setCursor(3, 1), lcd.print(" CV:");
lcd.setCursor(9, 1), lcd.print(poscv);
lcd.setCursor(3, 2), lcd.print(" TH:");
lcd.setCursor(9, 2), lcd.print(posth);
loopCount++;
delay(10);
/*SI Serial2 ESTA ACTIVO EL SERIAL3 LEER EL PUERTO los valores provenientes de arduino A*/
if (Serial3.available() > 0) {
while (Serial3.available() > 0) {
charN = Serial3.read();//leer el valor en la variable tipo char "a"
segmentacion = true;//variable en true para activar los condicionales
}
if (segmentacion == true) {
dt = data;
if (charN == 'O') { //si el valor es O para ingresar valor el corte H prolijo
dt = " "; //limpiar valor de char
data = " "; //limpiar valor de char
delay(200);
Serial3.print("OK");//enviar dato a arduino A para confirmar que llego el valor correctamente
Serial.println("");
lcd.clear();//limpiar lcd
charN = ' ';
counter1 = 1; //restablecer valor
segmentacion = false;
carroCV.stop();//para carro cv por seguridad
lop2_prolijo();//ir a funcion para agregar corte H prolijo
}

if (charN == 'P') { //si el valor es P para subir cv en caso de corte V o refilar (Prolijo)
lcd.clear();//limpiar lcd
dt = " "; //limpiar valor de char
data = " "; //limpiar valor de char
charN = ' '; //limpiar valor de char
lcd.setCursor(0, 0), lcd.print("CV_p Arriba"); //indicar en la lcd que el cv subirá por un corteV o
refilar
delay(300);
Serial3.print("OK");//enviar dato a arduino A para confirmar que llego el valor correctamente
Serial.println("");
segmentacion = false;
delay(200);
carroCV.stop();//para carro cv por seguridad
Serial.println("");
cvu_prolijo();//ir a funcion para subir CV
}

if (charN == 'Q') { //si el valor es Q para calibrar valor de th prolijo en el sistema


lcd.clear();//limpiar lcd
dt = " "; //limpiar valor de char
data = " "; //limpiar valor de char
charN = ' '; //limpiar valor de char
delay(200);
Serial3.print("OK");//enviar dato a arduino A para confirmar que llego el valor correctamente
Serial.println("");
lcd.clear();//limpiar lcd
counter1 = 1; //restablecer valor
segmentacion = false;
thprolijo(); //ir a funcion para editar valor de th prolijo
}

if (charN == 'R') { //si el valor es R para calibrar el Th en el sistema


lcd.clear();//limpiar lcd
dt = " "; //limpiar valor de char
data = " "; //limpiar valor de char
charN = ' '; //limpiar valor de char
lcd.clear();
lcd.setCursor(0, 0), lcd.print("calibracion CTH"); //indicar en la lcd que se calibrara el Th
delay(300);
Serial3.print("OK");//enviar dato a arduino A para confirmar que llego el valor correctamente
Serial.println("");
counter1 = 1; //restablecer valor
delay(100);
segmentacion = false;
calibrarth();//ir a funcion para calibrar valor de th
}

if (charN == 'S') { //si el valor es S para calibrar el CV en el sistema


lcd.clear();//limpiar lcd
dt = " "; //limpiar valor de char
data = " "; //limpiar valor de char
charN = ' '; //limpiar valor de char
lcd.setCursor(0, 0), lcd.print("calibracion CCV"); //indicar en la lcd que se calibrara el CV
counter1 = 1; //restablecer valor
delay(300);
Serial3.print("OK");//enviar dato a arduino A para confirmar que llego el valor correctamente
Serial.println("");
segmentacion = false;
delay(100);
calibrarcv();//ir a funcion para calibrar valor de CV
}

if (charN == 'T') { //si el valor es T para subir cv en caso de corte V o refilar


dt = " "; //limpiar valor de char
data = " "; //limpiar valor de char
charN = ' '; //limpiar valor de char
lcd.clear();//limpiar lcd
lcd.setCursor(0, 0), lcd.print("CV Arriba"); //indicar en la lcd que subira el CV
delay(300);
Serial3.print("OK");//enviar dato a arduino A para confirmar que llego el valor correctamente
Serial.println("");
segmentacion = false;
delay(200);
carroCV.stop();//para carro cv por seguridad
cvu();//ir a funcion para subir el CV
}

if (charN == 'U') { //si el valor es U para bajar cv en caso de corte V o refilar


dt = " "; //limpiar valor de char
data = " "; //limpiar valor de char
charN = ' '; //limpiar valor de char
lcd.clear();//limpiar lcd
lcd.setCursor(0, 0), lcd.print("CV Abajo"); //indicar en la lcd que se bajará el CV
delay(200);
Serial.println("");
carroCV.stop();//para carro cv por seguridad
segmentacion = false;
cvd();//ir a funcion para bajar el CV
}

if (charN == 'V') { //si el valor es V para ingresar valor el corte H


charN = ' '; //limpiar valor de char
counter1 = 1; //restablecer valor
counter = 1; //restablecer valor
dt = " "; //limpiar valor de char
data = " "; //limpiar valor de char
lcd.clear();//limpiar lcd
delay(200);
Serial3.print("OK");//enviar dato a arduino A para confirmar que llego el valor correctamente
Serial.println("");
segmentacion = false;
carroCV.stop();//para carro cv por seguridad
lop2();//ir a funcion para ingresar el valor del corte H
}

if (charN == 'J') { //si el valor es J para ingresar valor el corte H por serial
charN = ' '; //limpiar valor de char
dt = " "; //limpiar valor de char
data = " "; //limpiar valor de char
lcd.clear();//limpiar lcd
Serial3.print("OK");//enviar dato a arduino A para confirmar que llego el valor correctamente
Serial.println("");
segmentacion = false;
carroCV.stop();//para carro cv por seguridad
serial = 1; //indicar valor de serial activado
loop3();//ir a funcion para ingresar el valor del corte H por serial
}

if (charN == 'G') { //si el valor es G para ingresar valor el corte H prolijo por serial
dt = " "; //limpiar valor de char
data = " "; //limpiar valor de char
charN = ' '; //limpiar valor de char
lcd.clear();//limpiar lcd
Serial3.print("OK");//enviar dato a arduino A para confirmar que llego el valor correctamente
Serial.println("");
segmentacion = false;
carroCV.stop();//para carro cv por seguridad
serial = 1; //indicar valor de serial activado
loop3_prolijo();//ir a funcion para ingresar el valor del corte H prolijo por serial
}

if (charN == 'H') { //si el valor es J para ingresar valor el corte H por serial
charN = ' '; //limpiar valor de char
dt = " "; //limpiar valor de char
data = " "; //limpiar valor de char
lcd.clear();//limpiar lcd
Serial3.print("OK");//enviar dato a arduino A para confirmar que llego el valor correctamente
Serial.println("");
segmentacion = false;
carroCV.stop();//para carro cv por seguridad
serial = 1; //indicar valor de serial activado
rh1 = 1;
loop3();//ir a funcion para ingresar el valor del corte H por serial
}

if (charN == 'I') { //si el valor es G para ingresar valor el corte H prolijo por serial
dt = " "; //limpiar valor de char
data = " "; //limpiar valor de char
charN = ' '; //limpiar valor de char
lcd.clear();//limpiar lcd
Serial3.print("OK");//enviar dato a arduino A para confirmar que llego el valor correctamente
Serial.println("");
segmentacion = false;
carroCV.stop();//para carro cv por seguridad
serial = 1; //indicar valor de serial activado
rh1 = 1;
loop3_prolijo();//ir a funcion para ingresar el valor del corte H prolijo por serial
}
if (charN == 'X') { //si el valor es X para calibrar elajustar CV en el sistema
dt = " "; //limpiar valor de char
data = " "; //limpiar valor de char
charN = ' '; //limpiar valor de char
lcd.clear();//limpiar lcd
delay(200);
Serial3.print("OK");//enviar dato a arduino A para confirmar que llego el valor correctamente
Serial.println("");
counter1 = 1; //restablecer valor
segmentacion = false;
ajustarcv();//ir a funcion para calibrar elajustar CV en el sistema
}

if (charN == 'Y') { //si el valor es Y para calibrar otras opciones de calibracion en el sistema
dt = " "; //limpiar valor de char
data = " "; //limpiar valor de char
charN = ' '; //limpiar valor de char
counter1 = 1; //restablecer valor
lcd.clear();//limpiar lcd
delay(200);
Serial3.print("OK");//enviar dato a arduino A para confirmar que llego el valor correctamente
Serial.println("");
segmentacion = false;
menu2();//ir a funcion para calibrar otras opciones de calibracion en el sistema
}
if (charN == 'A') { //si en 1 ir a modificar TH salir
dt = " "; //limpiar valor de char
data = " "; //limpiar valor de char
charN = ' '; //limpiar valor de char
counter1 = 1; //restablecer valor
segmentacion = false; //restablecer valor
lcd.clear();
delay(100);
counter1 = 1;
thsalir();
}

if (charN == 'B') { //si en 2 ir a modificar TH ajuste 0


dt = " "; //limpiar valor de char
data = " "; //limpiar valor de char
charN = ' '; //limpiar valor de char
counter1 = 1; //restablecer valor
segmentacion = false; //restablecer valor
lcd.clear();
delay(100);
counter1 = 1;
tvajuste0();
}

if (charN == 'C') { //si en 3 ir a modificar Profundidad TH


dt = " "; //limpiar valor de char
data = " "; //limpiar valor de char
charN = ' '; //limpiar valor de char
counter1 = 1; //restablecer valor
segmentacion = false; //restablecer valor
delay(100);
lcd.clear();
counter1 = 1;
profth();
}
segmentacion = false; //restablecer valor
dt = " "; //limpiar valor de char
data = " "; //limpiar valor de char
}
}
loop();
}
/*------INGRESO DE VALOR TH A TRAVÉS DEL WIFI-----*/
void loop3() {
lcd.setCursor(0, 1);
lcd.print("corteH-WF");//indicar que el ingreso del valor th es a traves del wifi
/*MOSTRAR VLOR DE POS EN LA LCD*/
lcd.setCursor(0, 3);
lcd.setCursor(0, 0), lcd.print("POSCV:");
lcd.setCursor(6, 0), lcd.print(poscv); //mostras pos del CV

if (serial == 1) { //si la variable esta activada esperar valor del modulo wifi por serial2
if (Serial2.available() > 0) { //condicion para cuando el serial2 está activo
while (Serial2.available() > 0) {
res = Serial2.parseFloat(); //leer valor como float
if (res <= 0) { //si el valor recibido es menor o igual a cero volver al loop(inicio)
lcd.clear();//limpiar lcd
Serial2.flush();//limpiar serial
loop();//volver al incio
}
if (t2 == 0) { //si t2=0 restar el valor la primera vez
res = res + resta; //sumar el valor de resta
}
if (rh1 == 1) {
rh1 = 0;
if (recordar < (res + ajuste_recordar)) {
lcd.clear();
loop();
} else {
res = recordar - res - ajuste_recordar;
}
delay(100);
lcd.clear();//limpiar lcd
corteH();
}
counter = 1; //resetear valor
delay(100);
lcd.clear();//limpiar lcd
corteH();//ir a corte H
}
serial = 0; //resetar variable serial 0
}
}
//OTRA CONDICION PARA CANCELAR UN CORTE H
if (Serial2.available()) {
while (Serial2.available() > 0) {
a = Serial2.read(); //leer serial en char
segmentacion = true;//poner variable en true para indicar que se recibio un valor para la siguiente
condicion
}
if (segmentacion == true) {
if (a == 'x') { //si el dato recibido es igual a x
Serial2.flush();//limpiar serial
delay(200);
loop();//volver a loop
}
}
}
delay(100);
hh++;
if (hh > 10000) { //si se pasa el tiempo de 100segundos esperando volver al loop()
hh = 0;
loop();//volver al loop
} else {
loop3();//volver a la funcion sino se cumple la condicion
}
}
/*------INGRESO DE VALOR TH -PROLIJO- A TRAVÉS DEL WIFI-----*/
void loop3_prolijo() {
lcd.setCursor(0, 1);
lcd.print("corteH-WFP");//indicar que el ingreso del valor th prolijo es a traves del wifi
/*MOSTRAR VLOR DE POS EN LA LCD*/
lcd.setCursor(0, 3);
lcd.setCursor(0, 0), lcd.print("POSCV:");
lcd.setCursor(6, 0), lcd.print(poscv); //mostras pos del CV

if (serial == 1) { //si la variable esta activada esperar valor del modulo wifi por serial2
if (Serial2.available() > 0) { //condicion para cuando el serial2 está activo
while (Serial2.available() > 0) {
res = Serial2.parseFloat(); //leer valor como float
if (res <= 0) { //si el valor recibido es menor o igual a cero volver al loop(inicio)
lcd.clear();//limpiar lcd
Serial2.flush();//limpiar serial
loop();//volver al incio
}
if (t2 == 0) { //si t2=0 restar el valor la primera vez
res = res + resta; //sumar el valor de resta
}
if (rh1 == 1) {
rh1 = 0;
if (recordar < (res + ajuste_recordar)) {
lcd.clear();
loop();
} else {
res = recordar - res - ajuste_recordar;
}
delay(100);
lcd.clear();//limpiar lcd
corteH_prolijo();
}
counter = 1; //resetar valor
delay(100);
lcd.clear();//limpiar lcd
corteH_prolijo();//ir a corte H -Prolijo-
}
serial = 0; //resetar variable serial 0
}
}
//OTRA CONDICION PARA CANCELAR UN CORTE H
if (Serial2.available()) {
while (Serial2.available() > 0) {
a = Serial2.read(); //leer serial en char
segmentacion = true;//poner variable en true para indicar que se recibio un valor para la siguiente
condicion
}
if (segmentacion == true) {
if (a == 'x') { //si el dato recibido es igual a x
Serial2.flush();//limpiar serial
delay(200);
loop();//volver a loop
}
}
}
delay(100);
hh++;
if (hh > 10000) { //si se pasa el tiempo de 100segundos esperando volver al loop()
hh = 0;
loop();//volver al loop
} else {
loop3_prolijo();//volver a la funcion sino se cumple la condicion
}
}

/*------INGRESO DE VALOR TH-----*/


void lop2() {
//MOSTRAR EN LA LCD ALGUNAS OPCIONES
lcd.setCursor(0, 0);
lcd.print("--A--Desde arriba");
lcd.setCursor(0, 1);
lcd.print("--B--Desde abajo");

if (keypad.getKeys()) { /*INGRESO DE TECLADO LA MISMA LOGICA*/


for (int i = 0; i < LIST_MAX; i++) {
switch (keypad.key[i].kstate) {
case PRESSED:
if ( keypad.key[i].stateChanged ) {
char key = keypad.key[i].kchar;

if (key == 'A') { //si en 1 ir a modificar TH salir


lcd.clear();
delay(100);
counter1 = 1;
rh1 = 1;
loop2();
}

if (key == 'B') { //si en 2 ir a modificar TH ajuste 0


lcd.clear();
delay(100);
counter1 = 1;
loop2();
}
break;
}
}
}
}
lop2();
}

void loop2() {
lcd.setCursor(0, 1);
lcd.print("corteH(mm)");//indicar que el ingreso del valor th
/*MOSTRAR VLOR DE POS EN LA LCD*/
lcd.setCursor(0, 3);
lcd.setCursor(0, 0), lcd.print("POSCV:");
lcd.setCursor(6, 0), lcd.print(poscv);
lcd.setCursor(0, 2), lcd.print("ANTERIOR: "), lcd.print(recordar);
lcd.setCursor(0, 3), lcd.print("AJUSTE: "), lcd.print(ajuste_recordar);
//lcd.print(pos);
/*SUMATORIA DE VALOR DESPUES DE HABER AGREGADO VARIOS DIGITOS*/
if (counter == 2) {
res = p1;
}
if (counter == 3) {
if (t2 == 0) {
res = (p1 * 10) + p2 + resta;
}
if (t2 == 1) {
res = (p1 * 10) + p2;
}
}
if (counter == 4) {
if (t2 == 0) {
res = (p1 * 100) + (p2 * 10) + p3 + resta;
}
if (t2 == 1) {
res = (p1 * 100) + (p2 * 10) + p3;
}
}
if (counter == 5) {
if (t2 == 0) {
res = (p1 * 1000) + (p2 * 100) + (p3 * 10) + p4 + resta;
}
if (t2 == 1) {
res = (p1 * 1000) + (p2 * 100) + (p3 * 10) + p4;
}
}
if (counter > 6 & coma == 0) {
resc1 = (c11 / 10);
res = res + resc1;
coma = 1;
}
/*CUANDO SE PRESIONA UN BOTON DEL TECLADO*/
if (keypad.getKeys()) {
for (int i = 0; i < LIST_MAX; i++) {
switch (keypad.key[i].kstate) {
case PRESSED://caso cuando presiona el boton
if ( keypad.key[i].stateChanged ) {
char key = keypad.key[i].kchar;
if (key == '#') { //si tecla pulsada es igual a "#" significa una ',' y procede a agregar los valores
decimales
delay(300);
counter = counter + 4;
rt1 = counter + 5;
lcd.setCursor(rt1, 1);
lcd.print(",");
coma1 = 1;
}
if ((key != '*') && (key != 'B') && (key != '#') && (key != 'A') && (key != 'C') && (key != 'K')) {
//cuando se agg los digitos en la lcd
delay(100);
lcd.setCursor(0, 1);
counter = counter + 1; //suma una posicion en la lcd
if (counter > 6) {
rt = counter + 5; //cuando se agregua una ','
lcd.setCursor(rt, 1);//posicionar cursor
lcd.print(keypad.key[i].kchar);//imprimir el digito en la lcd
}
if (counter < 7) {
rt = counter + 8; //sumatoria del cursor
lcd.setCursor(rt, 1);//agregar posicion en el cursor de la lcd
lcd.print(keypad.key[i].kchar);//imprimir el digito en la lcd
}
}

if ((key != '*') && (key != 'B') && (key != '#') && (key != 'A') && (key != 'C') && (key != 'K')) {
/*SUMATORIA DE VALOR DESPUES DE HABER AGREGADO VARIOS DIGITOS CUANDO SE PULSA
UN DIGITO*/
delay(100);
if (counter == 2) { //unidad
char hy = keypad.key[i].kchar; //obtener valor tipo char
p1 = char(hy) - 48; //restar el valor de 48 para hacer el casting de char a int
if (p1 < 0) { //si el valor es menor que '0' dejar en 0 para evitar valor negativo
p1 = 0;
}
res = p1;
}
if (counter == 3) { //decena
p2 = keypad.key[i].kchar - 48;
if (p2 < 0) {
p2 = 0;
}
if (t2 == 0) {
res = (p1 * 10) + p2 + resta;
}
if (t2 == 1) {
res = (p1 * 10) + p2;
}
}
if (counter == 4) { //centena
p3 = keypad.key[i].kchar - 48;
if (p3 < 0) {
p3 = 0;
}
if (t2 == 0) {
res = (p1 * 100) + (p2 * 10) + p3 + resta;
}
if (t2 == 1) {
res = (p1 * 100) + (p2 * 10) + p3;
}
}
if (counter == 5) { //unidad de mil
p4 = keypad.key[i].kchar - 48;
y1 = 1;
if (p4 < 0) {
p4 = 0;
}
if (t2 == 0) {
res = (p1 * 1000) + (p2 * 100) + (p3 * 10) + p4 + resta;
}
if (t2 == 1) {
res = (p1 * 1000) + (p2 * 100) + (p3 * 10) + p4;
}
if (res > 2665) {
res = 2665;
}
}

if (counter > 6) { //decimales


c11 = keypad.key[i].kchar - 48;
if (c11 < 0) {
c11 = 0;
}
resc1 = (c11 / 10); //dividir el valor entre 10
res = res + resc1; //sumar los valores res(entero) y resc1(decimales)
coma = 1; //indica que el resultado final es float
}
}

if ((key == 'K') && (res != 0)) { //cuando se pulsa el digito 'K' y el valor de res(el agregado) no es
cero(0)
counter = 1; //resetear valor
delay(100);
lcd.clear();//limpiar lcd
if (rh1 == 1) {
if (recordar < (res + ajuste_recordar)) { //si el valor ingresado es menor, volver a ingresar
lcd.setCursor(0, 1);
lcd.print("INGRESAR UN VALOR MENOR");
delay(1500);
counter = 1;
res = 0;
lcd.clear();
loop2();//volver a ingresar valor
} else { //si el valor ingresado esta bien aplicar la formula e ir al corte!
if (t6 == 1) {
res = (recordar + resta) - (res - resta + ajuste_recordar);
} else {
res = recordar - (res + ajuste_recordar);
}
counter = 1;
rh1 = 0;
lcd.clear();
if (t2 == 0 && t6 == 0) {
recordar = res - resta;
} else {
t6 = 0;
recordar = res;
}
t6 = 0;
corteH();
}
}
if (t2 == 0 && t6 == 0) {
recordar = res - resta;
} else {
t6 = 0;
recordar = res;
}

corteH();//ir a corte H
}
if (key == '*') { //si se pulso el digito '*' borrar el digito en la lcd y en el contador del valor
if (counter < 7) {
y1 = 0;
rt = counter + 8;
lcd.setCursor(rt, 1);//posicionar lcd
lcd.print(" ");//limpiar
if (counter > 1) {
counter = counter - 1; //restar 1 al contador
} else {
lcd.setCursor(rt + 1, 1);
lcd.print(" ");
}
}

if (counter > 6 & coma1 == 1 & coma == 0) { //borrar luego de haber agrado el ',' en el teclado
y1 = 0;
counter = counter - 3;
rt = counter + 8;
lcd.setCursor(rt, 1);//posicionar lcd
lcd.print(" ");//limpiar
counter = counter - 1; //restar 1 al contador
coma1 = 0;
coma = 0;
}

if (counter > 6 & coma1 == 1 & coma == 1) { //borrar luego de haber agrado el un decimal
despues de ',' en el teclado
y1 = 0;
rt = counter + 5;
lcd.setCursor(rt, 1);//posicionar lcd
lcd.print(" ");//limpiar
counter = counter - 1; //restar 1 al contador
coma = 0;
}
}
break;
}
}
}
}
//OTRA CONDICION PARA CANCELAR UN CORTE H
if (Serial2.available()) {
while (Serial2.available() > 0) {
a = Serial2.read(); //leer serial en char
segmentacion = true;//poner variable en true para indicar que se recibio un valor para la siguiente
condicion
}

if (segmentacion == true) {
if (a == 'x') { //si el dato recibido es igual a x
Serial2.flush();//limpiar serial
delay(200);
loop();//volver a loop
}
}
}
loop2();//volver a la funcion
}
/*------INGRESO DE VALOR TH -Prolijo- -----*/
void lop2_prolijo() {
//MOSTRAR EN LA LCD ALGUNAS OPCIONES
lcd.setCursor(0, 0);
lcd.print("--A--Desde arriba");
lcd.setCursor(0, 1);
lcd.print("--B--Desde abajo");

if (keypad.getKeys()) { /*INGRESO DE TECLADO LA MISMA LOGICA*/


for (int i = 0; i < LIST_MAX; i++) {
switch (keypad.key[i].kstate) {
case PRESSED:
if ( keypad.key[i].stateChanged ) {
char key = keypad.key[i].kchar;

if (key == 'A') { //si en 1 ir a modificar TH salir


lcd.clear();
delay(100);
counter1 = 1;
rh1 = 1;
loop2_prolijo();
}

if (key == 'B') { //si en 2 ir a modificar TH ajuste 0


lcd.clear();
delay(100);
counter1 = 1;
loop2_prolijo();
}

break;
}
}
}
}
lop2_prolijo();
}

void loop2_prolijo() {
lcd.setCursor(0, 1);
lcd.print("corteH(mm)");//indicar que el ingreso del valor th
/*MOSTRAR VLOR DE POS EN LA LCD*/
lcd.setCursor(0, 3);
lcd.setCursor(0, 0), lcd.print("POSCV:");
lcd.setCursor(6, 0), lcd.print(poscv);
lcd.setCursor(0, 2), lcd.print("ANTERIOR: "), lcd.print(recordar);
lcd.setCursor(0, 3), lcd.print("AJUSTE: "), lcd.print(ajuste_recordar);
//lcd.print(pos);
/*SUMATORIA DE VALOR DESPUES DE HABER AGREGADO VARIOS DIGITOS*/
if (counter == 2) {
res = p1;
}
if (counter == 3) {
if (t2 == 0) {
res = (p1 * 10) + p2 + resta;
}
if (t2 == 1) {
res = (p1 * 10) + p2;
}
}
if (counter == 4) {
if (t2 == 0) {
res = (p1 * 100) + (p2 * 10) + p3 + resta;
}
if (t2 == 1) {
res = (p1 * 100) + (p2 * 10) + p3;
}
}
if (counter == 5) {
if (t2 == 0) {
res = (p1 * 1000) + (p2 * 100) + (p3 * 10) + p4 + resta;
}
if (t2 == 1) {
res = (p1 * 1000) + (p2 * 100) + (p3 * 10) + p4;
}
}
if (counter > 6 & coma == 0) {
resc1 = (c11 / 10);
res = res + resc1;
coma = 1;
}
/*CUANDO SE PRESIONA UN BOTON DEL TECLADO*/
if (keypad.getKeys()) {
for (int i = 0; i < LIST_MAX; i++) {
switch (keypad.key[i].kstate) {
case PRESSED://caso cuando presiona el boton
if ( keypad.key[i].stateChanged ) {
char key = keypad.key[i].kchar;
if (key == '#') { //si tecla pulsada es igual a "#" significa una ',' y procede a agregar los valores
decimales
delay(300);
counter = counter + 4;
rt1 = counter + 5;
lcd.setCursor(rt1, 1);
lcd.print(",");
coma1 = 1;
}

if ((key != '*') && (key != 'B') && (key != '#') && (key != 'A') && (key != 'C') && (key != 'K')) {
//cuando se agg los digitos en la lcd
delay(100);
lcd.setCursor(0, 1);
counter = counter + 1; //suma una posicion en la lcd
if (counter > 6) {
rt = counter + 5; //cuando se agregua una ','
lcd.setCursor(rt, 1); //posicionar cursor
lcd.print(keypad.key[i].kchar);//imprimir el digito en la lcd
}
if (counter < 7) {
rt = counter + 8; //sumatoria del cursor
lcd.setCursor(rt, 1);//agregar posicion en el cursor de la lcd
lcd.print(keypad.key[i].kchar);//imprimir el digito en la lcd
}
}

if ((key != '*') && (key != 'B') && (key != '#') && (key != 'A') && (key != 'C') && (key != 'K')) {
/*SUMATORIA DE VALOR DESPUES DE HABER AGREGADO VARIOS DIGITOS CUANDO SE PULSA
UN DIGITO*/
delay(100);
if (counter == 2) { //unidad
char hy = keypad.key[i].kchar; //obtener valor tipo char
p1 = char(hy) - 48; //restar el valor de 48 para hacer el casting de char a int
if (p1 < 0) { //si el valor es menor que '0' dejar en 0 para evitar valor negativo
p1 = 0;
}
res = p1;
}
if (counter == 3) { //decena
p2 = keypad.key[i].kchar - 48;
if (p2 < 0) {
p2 = 0;
}
if (t2 == 0) {
res = (p1 * 10) + p2 + resta;
}
if (t2 == 1) {
res = (p1 * 10) + p2;
}
}
if (counter == 4) { //centena
p3 = keypad.key[i].kchar - 48;
if (p3 < 0) {
p3 = 0;
}
if (t2 == 0) {
res = (p1 * 100) + (p2 * 10) + p3 + resta;
}
if (t2 == 1) {
res = (p1 * 100) + (p2 * 10) + p3;
}
}
if (counter == 5) { //unidad de mil
p4 = keypad.key[i].kchar - 48;
y1 = 1;
if (p4 < 0) {
p4 = 0;
}
if (t2 == 0) {
res = (p1 * 1000) + (p2 * 100) + (p3 * 10) + p4 + resta;
}
if (t2 == 1) {
res = (p1 * 1000) + (p2 * 100) + (p3 * 10) + p4;
}
if (res > 2665) {
res = 2665;
}
}
if (counter > 6) { //decimales
c11 = keypad.key[i].kchar - 48;
if (c11 < 0) {
c11 = 0;
}
resc1 = (c11 / 10); //dividir el valor entre 10
res = res + resc1; //sumar los valores res(entero) y resc1(decimales)
coma = 1; //indica que el resultado final es float
}
}

if ((key == 'K') && (res != 0)) { //cuando se pulsa el digito 'K' y el valor de res(el agregado) no es
cero(0)
counter = 1; //resetear valor
delay(100);
lcd.clear();//limpiar lcd
if (rh1 == 1) {
if (recordar < (res + ajuste_recordar)) { //si el valor ingresado es menor, volver a ingresar
lcd.setCursor(0, 1);
lcd.print("INGRESAR UN VALOR MENOR");
delay(1500);
counter = 1;
res = 0;
lcd.clear();
loop2_prolijo();//volver a ingresar valor
} else { //si el valor ingresado esta bien aplicar la formula e ir al corte!
if (t6 == 1) {
res = (recordar + resta) - (res - resta + ajuste_recordar);
} else {
res = recordar - (res + ajuste_recordar);
}
counter = 1;
rh1 = 0;
lcd.clear();
if (t2 == 0 && t6 == 0) {
recordar = res - resta;
} else {
t6 = 0;
recordar = res;
}
t6 = 0;
corteH_prolijo();
}
}
if (t2 == 0 && t6 == 0) {
recordar = res - resta;
} else {
t6 = 0;
recordar = res;
}
corteH_prolijo();//ir a corte H prolijo
}
if (key == '*') { //si se pulso el digito '*' borrar el digito en la lcd y en el contador del valor
if (counter < 7) {
y1 = 0;
rt = counter + 8;
lcd.setCursor(rt, 1);//posicionar lcd
lcd.print(" ");//limpiar
if (counter > 1) {
counter = counter - 1; //restar 1 al contador
} else {
lcd.setCursor(rt + 1, 1);
lcd.print(" ");
}
}

if (counter > 6 & coma1 == 1 & coma == 0) { //borrar luego de haber agrado el ',' en el teclado
y1 = 0;
counter = counter - 3;
rt = counter + 8;
lcd.setCursor(rt, 1);//posicionar lcd
lcd.print(" ");//limpiar
counter = counter - 1; //restar 1 al contador
coma1 = 0;
coma = 0;
}

if (counter > 6 & coma1 == 1 & coma == 1) { //borrar luego de haber agrado el un decimal
despues de ',' en el teclado
y1 = 0;
rt = counter + 5;
lcd.setCursor(rt, 1);//posicionar lcd
lcd.print(" ");//limpiar
counter = counter - 1; //restar 1 al contador
coma = 0;
}
}
break;
}
}
}
}
//OTRA CONDICION PARA CANCELAR UN CORTE H
if (Serial2.available()) {
while (Serial2.available() > 0) {
a = Serial2.read(); //leer serial en char
segmentacion = true;//poner variable en true para indicar que se recibio un valor para la siguiente
}

if (segmentacion == true) {
if (a == 'x') { //si el dato recibido es igual a x
Serial2.flush();//limpiar serial
delay(200);
loop();//volver a loop
}
}
}
loop2_prolijo();//volver a la funcion
}
/*------MENU-- PARA ALGUNAS OTRAS OPCIONES------*/
void menu2() {
//MOSTRAR EN LA LCD ALGUNAS OPCIONES
lcd.setCursor(0, 0);
lcd.print("01- AJUSTAR SALIR");
lcd.setCursor(0, 1);
lcd.print("02- AJUSTAR 0 TH ");
lcd.setCursor(0, 2);
lcd.print("03- PROFUNDIDAD TH");
lcd.setCursor(0, 3);
lcd.print("04- RECORDAR TH");

if (keypad.getKeys()) { /*INGRESO DE TECLADO LA MISMA LOGICA*/


for (int i = 0; i < LIST_MAX; i++) {
switch (keypad.key[i].kstate) {
case PRESSED:
if ( keypad.key[i].stateChanged ) {
char key = keypad.key[i].kchar;

if (key == '1') { //si en 1 ir a modificar TH salir


lcd.clear();
delay(100);
counter1 = 1;
thsalir();
}

if (key == '2') { //si en 2 ir a modificar TH ajuste 0


lcd.clear();
delay(100);
counter1 = 1;
tvajuste0();
}

if (key == '3') { //si en 3 ir a modificar Profundidad TH


delay(100);
lcd.clear();
counter1 = 1;
profth();
}

if (key == '4') { //si en 4 ir a modificar ajuste recordar


delay(100);
lcd.clear();
counter1 = 1;
recordar_th();
}

if (key == 'C') { //regresar a loop()


counter = 1;
lcd.clear();
delay(100);
loop();
}
break;
}
}
}
}
menu2();
}
/*------CORTE V CONFIGURAR SUBIR CARRO VERTICAL------*/
void cvu() {
//CONFIGURAR PARAMETROS DE VELOCIDAD DEL CARRO VERTICAL A SU FORMA NORMAL
carroCV.setMaxSpeed(450.0);
carroCV.setAcceleration(100.0);
carroCV.setSpeed(20);
carroCV.stop();
ss1 = digitalRead(sensor1); //leer entrada sensor 1
ss2 = digitalRead(sensor2); //leer entreda sensor 2

//CUANDO T2=0 SIGNIFICA QUE ES EL PRIMER MOVIMIENTO LUEGO DE HABER ALIMENTADO EL


SISTEMA
// POR LO TANTO E LE SUMA UN VALOR PREVIAMENTE ESTABLECIDO PERO SOLO LA PRIMERA VEZ
// LUEGO DE ESO SE PONE T2 EN 1 Y NO SE LE SUMA EL VALOR POR ESO ESTAN LAS 2 CONDICIONES
CON T2 EN 0 Y 1
if (t2 == 1) {
if (poscv < subir) { //si la posicion actual es menor que la variable subir
lcd.setCursor(0, 0), lcd.print("subiendo_200+placa"); //indicar en la lcd que esta subiendo CV
pasos = ((subir - poscv) / unionFB2.datoF2) * 1000; //obtener pasos
pasosround = round(pasos); //redondear pasos
carroCV.setCurrentPosition(pasosround);//poner el cv en la libreria en la posicion para regresar a 0
smayor = 1; //poner variable en 1 o high para usarlo como condicional posteriormente
carroCV.setAcceleration(200.0);//modificar aceleracion
var1 = -4726; //poner variable en el valor 4726 previamente calibrado
var3 = 1;
var2 = 1;
cvu1();//ir a funcion subir
}
}
if (t2 == 0) {
if (poscv < subir + resta + 1) { //si la posicion actual es menor que la variable subir
lcd.setCursor(0, 0), lcd.print("subiendo200+placa"); //indicar en la lcd que esta subiendo CV
pasos = (((subir + resta) - poscv) / unionFB2.datoF2) * 1000; //obtener pasos
pasosround = round(pasos); //poner el cv en la libreria en la posicion para regresar a 0
carroCV.setCurrentPosition(pasosround);//poner el cv en la libreria en la posicion para regresar a 0
smayor = 1; //poner variable en 1 o high para usarlo como condicional posteriormente
carroCV.setAcceleration(200.0);//modificar aceleracion
var1 = -4726; //poner variable en el valor 4726 previamente calibrado
var2 = 1;
var3 = 1;
cvu1();//ir a funcion subir
}
}
if (ss2 == 0 || ss1 == 0) { // si algunos de los sensores estan activados
lcd.setCursor(0, 0), lcd.print("placa detectada sub"); //indicar que la placa esta detectada
carroCV.setCurrentPosition(50000);//setear posicion en 50000 para mover a 0
smayor = 1; //poner variable en 1 o high para usarlo como condicional posteriormente
//mostrar valores de los sensores
lcd.setCursor(0, 1), lcd.print("sensor1: ");
lcd.setCursor(10, 1), lcd.print(ss1);
lcd.setCursor(0, 2), lcd.print("sensor2: ");
lcd.setCursor(10, 2), lcd.print(ss2);
delay(200);
lcd.clear();//limpiar lcd
lcd.setCursor(0, 0), lcd.print("Subiendo"); //indicar en la lcd que seesta subiendo
carroCV.setAcceleration(200.0);//modificar aceleracion
var1 = -(4726 - (poscv / unionFB2.datoF2) * 1000); //poner variable en el valor con la formula
var2 = 1;
cvu1();//ir a funcion para subir
}
if (ss2 == 1 && ss1 == 1) { //si ninguna de los sensores no detecto placa y la poscion actual es mayor
que subir
lcd.setCursor(0, 0), lcd.print("placa NO detectada B"); //indicar que no se ha detectado placa
carroCV.setCurrentPosition(0);//setear poscv en 0
smayor = 0;
cvuu();//ir a funcion de bajar
}
//CUANDO T2=0 SIGNIFICA QUE ES EL PRIMER MOVIMIENTO LUEGO DE HABER ALIMENTADO EL
SISTEMA
// POR LO TANTO E LE SUMA UN VALOR PREVIAMENTE ESTABLECIDO PERO SOLO LA PRIMERA VEZ
// LUEGO DE ESO SE PONE T2 EN 1 Y NO SE LE SUMA EL VALOR POR ESO ESTAN LAS 2 CONDICIONES
CON T2 EN 0 Y 1
delay(100);
if (t2 == 0) {
if (poscv > subir + resta - 1) { //si la posicion actual es mayor que la variable subir
smayor = 0; //poner variable en 0 o high para usarlo como condicional posteriormente
pasos = ((poscv - (subir + resta)) / unionFB2.datoF2) * 1000; //obtener pasos de la formula para
bajar
pasosround = round(pasos); //redondear pasos
carroCV.setCurrentPosition(0); //poner el cv en la libreria en la posicion 0
lcd.setCursor(0, 0), lcd.print("bajando-CV"); //indicar en la lcd que esta bajando CV
cvuu();//ir a funcion de bajar
}
if (poscv < subir + resta + 1) { //si la posicion actual es menor que la variable subir
smayor = 1; //poner variable en 1 o high para usarlo como condicional posteriormente
pasos = (((subir + resta) - poscv) / unionFB2.datoF2) * 1000; //obtener pasos
pasosround = round(pasos); //redondear pasos
carroCV.setCurrentPosition(pasosround); //poner el cv en la libreria en la posicion para regresar a
0
lcd.setCursor(0, 0), lcd.print("subiendo-CV"); //indicar en la lcd que esta subiendo CV
cvu1();//ir a funcion de subir
}
}

if (t2 == 1) {
if (poscv > subir - 1) { //si la posicion actual es mayor que la variable subir
smayor = 0; //poner variable en 0 o high para usarlo como condicional posteriormente
pasos = ((poscv - subir) / unionFB2.datoF2) * 1000; //obtener pasos de la formula para bajar
pasosround = round(pasos); //redondear pasos
carroCV.setCurrentPosition(0); //poner el cv en la libreria en la posicion 0
lcd.setCursor(0, 0), lcd.print("bajando-CV"); //indicar en la lcd que esta bajando CV
cvuu();//ir a funcion de bajar
}
if (poscv < subir + 1) { //si la posicion actual es menor que la variable subir
smayor = 1; //poner variable en 1 o high para usarlo como condicional posteriormente
pasos = ((subir - poscv) / unionFB2.datoF2) * 1000; //obtener pasos
pasosround = round(pasos); //redondear pasos
carroCV.setCurrentPosition(pasosround); //poner el cv en la libreria en la posicion para regresar a
0
lcd.setCursor(0, 0), lcd.print("subiendo-CV"); //indicar en la lcd que esta subiendo CV
cvu1();//ir a funcion de subir
}
}
cvu();//volver a la funcion
}
/*------CORTE V SUBIR HASTA PLACA CARRO VERTICAL------*/
void cvu1() {

ss1 = digitalRead(sensor1); //leer valor del sensor 1


ss2 = digitalRead(sensor2); //leer valor del sensor 2
//a continuacion funcion para modificar la posicion y los pasos durante el recorrido para el proceso
de frenado cuando se detecta la placa
if (var3 == 1) { //si var3 esta en 1 significa que la posicion actual es menor que la de la variable subir
if (carroCV.currentPosition() < 0) { //mover posicion del cv hasta cero
if (ss2 == 1 && ss1 == 1) { //si los sensores ya no detectan placa
if (xx1 == 5 && var2 == 1) { //si xx1 est en 5 significa que ya repitio el ciclo 5 veces y var2 en 1
indica que fue detecata la placa la posicion actual es menor
var1 = carroCV.currentPosition() - 10; //restar 10 a la posicion actual para el proceso de frenado
y guardar en var 1
var2 = 0; //resetar variable en 0
xx1 = 0; //resetar variable en 0
}
if (var2 == 1) { //cuando var2 sea 1 sumar xx1
xx1++;
}
}
}
} else if (var3 == 0) { //si var3 esta en 0 significa que la posicion actual es mayor que la de la variable
subir
if (ss2 == 1 && ss1 == 1) { //si los sensores ya no detectan placa
if (xx1 == 5 && var2 == 1) { //si xx1 est en 5 significa que ya repitio el ciclo 5 veces y var2 en 1
indica que fue detecata la placa la posicion actual er menor
var1 = carroCV.currentPosition() - 10; //restar 10 a la posicion actual para el proceso de frenado
y guardar en var 1
var2 = 0; //resetar variable en 0
xx1 = 0; //resetar variable en 0
}
if (var2 == 1) { //cuando var2 sea 1 sumar xx1
xx1++;
}
}
}

if (carroCV.currentPosition() <= var1) { //si var 1 es menor o igual que la posicion actual
delay(100);
lcd.clear();
carroCV.stop();
lcd.setCursor(0, 0), lcd.print("no se detecta sensor"); //indicar que no se detecta sensor
lcd.setCursor(0, 1), lcd.print("sensor1: ");
lcd.setCursor(10, 1), lcd.print(ss1); //mostrar valor del sensor 1
lcd.setCursor(0, 2), lcd.print("sensor2: ");
lcd.setCursor(10, 2), lcd.print(ss2); //mostrar valor del sensor 2
delay(100);
xx1 = 0;
carroCV.setAcceleration(100.0);//modificar parametro de aceleracion
var1 = 0; //resetar valor
var3 = 0; //
cvu2();//ir a siguiente funcion
}
ss1 = digitalRead(sensor1); //leer valor del sensor 1
ss2 = digitalRead(sensor2); //leer valor del sensor 2
carroCV.moveTo(var1);//mover hacia la variable editada para el frenado suave
carroCV.run();//mover
cvu1();//volver a funcion
}
/*------CORTE V BAJAR HASTA PLACA CARRO VERTICAL------*/
void cvuu() {
//si la posicion actual es mayor que la variable subir
ss1 = digitalRead(sensor1); //leer valor del sensor 1
ss2 = digitalRead(sensor2); //leer valor del sensor 2
fcv = digitalRead(finalCV);//leer valor del final de carrera 1
fcv1 = digitalRead(finalCV1);//leer valor del final de carrera 2

while (ss2 == 1 & ss1 == 1 & carroCV.currentPosition() < 40000 & fcv == 1) { //si los sensores estan
desactivados y la posicion es menor a 4mil y el final de carrera esta desactivada mover cv hacia abajo
ss1 = digitalRead(sensor1); //leer valor del sensor 1
ss2 = digitalRead(sensor2); //leer valor del sensor 2
fcv = digitalRead(finalCV);//leer valor del final de carrera 1
fcv1 = digitalRead(finalCV1);//leer valor del final de carrera 2
carroCV.move(5000);//mover hacia abajo el cv
carroCV.run();//mover
}
cvu2();//ir a siguiente funcion
}
/*------CORTE V MODIFICAR VALORES DE POSICION------*/
void cvu2() {

lcd.clear();//limpiar lcd
// CUANDO T2=0 SIGNIFICA QUE ES EL PRIMER MOVIMIENTO LUEGO DE HABER ALIMENTADO EL
SISTEMA
// POR LO TANTO E LE SUMA UN VALOR PREVIAMENTE ESTABLECIDO PERO SOLO LA PRIMERA VEZ
// LUEGO DE ESO SE PONE T2 EN 1 Y NO SE LE RESTA EL VALOR POR ESO ESTAN LAS 2 CONDICIONES
CON T2 EN 0 Y 1

if (t2 == 1) {
delay(100);
lcd.setCursor(10, 2);
if (smayor == 0) { //condicional para indicar que el movimiento fue hacia abajo con smayor en 0
pasos = carroCV.currentPosition(); //obtener pasos de la poscion actual del carro CV en a libreria
poscv = poscv - (pasos * unionFB2.datoF2) / 1000; //modificar valor de posicion de cv
}
if (smayor == 1) { //condicional para indicar que el movimiento fue hacia arriba con smayor en 1
pasos = 50000 - carroCV.currentPosition(); //obtener pasos de la poscion actual del carro CV en a
libreria+ 5000pasos constantes
poscv = poscv + (unionFB2.datoF2 * pasos) / 1000; //modificar valor de posicion de cv
}

}
if (t2 == 0) {
delay(100);
lcd.setCursor(10, 2);
if (smayor == 0) { //condicional para indicar que el movimiento fue hacia abajo con smayor en 0
pasos = carroCV.currentPosition(); //obtener pasos de la poscion actual del carro CV en a libreria
poscv = poscv - resta - (unionFB2.datoF2 * pasos) / 1000; //modificar valor de posicion de cv
}
if (smayor == 1) { //condicional para indicar que el movimiento fue hacia arriba con smayor en 1
pasos = 50000 - carroCV.currentPosition(); //obtener pasos de la poscion actual del carro CV en a
libreria+ 5000pasos constantes
poscv = poscv - resta + (unionFB2.datoF2 * pasos) / 1000; //modificar valor de posicion de cv
}
t2 = 1;
}
//mostrar valor en la lcd
lcd.setCursor(0, 1), lcd.print(" CV:");
lcd.setCursor(6, 1), lcd.print(poscv);
lcd.setCursor(0, 2), lcd.print(" TH:");
lcd.setCursor(6, 2), lcd.print(posth);
Serial.print("pasos 1564: "), Serial.println(pasos);
Serial.print("resta 1565: "), Serial.println(resta);
Serial.print("unionFB2.datoF2 1567: "), Serial.println(unionFB2.datoF2 );
Serial.print("poscv 1567: "), Serial.println(poscv);
//enviar valores de posicion a la web a traves del wifi por el serial2
Serial2.print(":"), Serial2.print(poscv), Serial2.print(":"), Serial2.print(posth), Serial2.print(":");
delay(200);
carroCV.stop();//para cv por seguridad
Serial3.print("J");//enviar dato a arduinoA que ya se movio el cv para continuar con el corte
Serial.println(" ");
delay(100);
loop();//volver al inicio
}
/*------CORTE V CONFIGURAR BAJAR CV PARA REALIZAR EL CORTE------*/
void cvd() {
//configurar parametros de velocidad y aceleracion de carro CV
carroCV.setMaxSpeed(280.0);
carroCV.setAcceleration(50.0);
carroCV.setSpeed(20);

carroCV.setCurrentPosition(0);//posicion en 0
fcv = digitalRead(finalCV);//leer sensor final de carrera 1
fcv1 = digitalRead(finalCV1);//leer sensor final de carrera 2
lcd.setCursor(0, 1), lcd.print("regresando!-CV"); //indicar en la lcd que se esta regresando cv
lcd.setCursor(0, 2), lcd.print(fcv), lcd.print(","), lcd.print(fcv1);
delay(100);
cvd1();//ir a siguiente funcion
}
/*------CORTE V BAJAR CV PARA REALIZAR EL CORTE------*/
void cvd1() {
fcv = digitalRead(finalCV);//leer sensor final de carrera 1
fcv1 = digitalRead(finalCV1);//leer sensor final de carrera 2
while ((fcv == 1 || fcv1 == 1)) { //mover cv mientras estan desactivados
fcv = digitalRead(finalCV);//leer sensor final de carrera 1
fcv1 = digitalRead(finalCV1);
if (fcv == 0 && fcv1 == 0) { //si los sensores se activan entonces para el cv
lcd.clear();//limpiar lcd
lcd.setCursor(0, 1), lcd.print(fcv), lcd.print(","), lcd.print(fcv1);
poscv = 0; //resetear valor
delay(200);
carroCV.stop();//para cv
Serial3.print("K");//enviar valor al arduino A para indicar que ya bajo el CV hasta el inicio
Serial.println(" ");
delay(100);
poscv = 0, t2 = 0; //resetear valores
t6 = 1;
//enviar dato de pocision a la web
Serial2.print(":"), Serial2.print(poscv), Serial2.print(":"), Serial2.print(posth), Serial2.print(":");
loop();//volver al inicion
}
carroCV.move(6000);//mover 5mil para regresar el cv a la posicion cero por el centido invertido
carroCV.run();//mover
}
cvd1(); //volver a funcion
}
/*------CORTE V -PROLIJO- CONFIGURAR SUBIR CARRO VERTICAL------*/
void cvu_prolijo() {
//CONFIGURAR PARAMETROS DE VELOCIDAD DEL CARRO VERTICAL A SU FORMA NORMAL
carroCV.setMaxSpeed(450.0);
carroCV.setAcceleration(100.0);
carroCV.setSpeed(20);
carroCV.stop();
ss1 = digitalRead(sensor1); //leer entrada sensor 1
ss2 = digitalRead(sensor2); //leer entreda sensor 2
//CUANDO T2=0 SIGNIFICA QUE ES EL PRIMER MOVIMIENTO LUEGO DE HABER ALIMENTADO EL
SISTEMA
// POR LO TANTO E LE SUMA UN VALOR PREVIAMENTE ESTABLECIDO PERO SOLO LA PRIMERA VEZ
// LUEGO DE ESO SE PONE T2 EN 1 Y NO SE LE SUMA EL VALOR POR ESO ESTAN LAS 2 CONDICIONES
CON T2 EN 0 Y 1

if (t2 == 1) {
if (poscv < subir) { //si la posicion actual es menor que la variable subir
lcd.setCursor(0, 0), lcd.print("subiendo200"); //indicar en la lcd que esta subiendo CV
pasos = ((subir - poscv) / unionFB2.datoF2) * 1000; //obtener pasos
pasosround = round(pasos); //redondear pasos
carroCV.setCurrentPosition(pasosround);//poner el cv en la libreria en la posicion para regresar a 0
smayor = 1; //poner variable en 1 o high para usarlo como condicional posteriormente
carroCV.setAcceleration(200.0);//modificar aceleracion
var1 = -4726; //poner variable en el valor 4726 previamente calibrado
var2 = 1;
var3 = 1;
cvu1_prolijo();//ir a funcion subir
}
}
if (t2 == 0) {
if (poscv < subir + resta + 1) { //si la posicion actual es menor que la variable subir
lcd.setCursor(0, 0), lcd.print("subiendo200"); //indicar en la lcd que esta subiendo CV
pasos = (((subir + resta) - poscv) / unionFB2.datoF2) * 1000; //obtener pasos
pasosround = round(pasos); //poner el cv en la libreria en la posicion para regresar a 0
carroCV.setCurrentPosition(pasosround);//poner el cv en la libreria en la posicion para regresar a 0
smayor = 1; //poner variable en 1 o high para usarlo como condicional posteriormente
carroCV.setAcceleration(200.0);//modificar aceleracion
var1 = -4726; //poner variable en el valor 4726 previamente calibrado
var2 = 1;
var3 = 1;
cvu1_prolijo();//ir a funcion subir
}
}
if (ss2 == 0 || ss1 == 0) { // si algunos de los sensores estan activados
lcd.setCursor(0, 0), lcd.print("placa detectada sub"); //indicar que la placa esta detectada
carroCV.setCurrentPosition(50000);//setear posicion en 50000 para mover a 0
smayor = 1; //poner variable en 1 o high para usarlo como condicional posteriormente
//mostrar valores de los sensores
lcd.setCursor(0, 1), lcd.print("sensor1: ");
lcd.setCursor(10, 1), lcd.print(ss1);
lcd.setCursor(0, 2), lcd.print("sensor2: ");
lcd.setCursor(10, 2), lcd.print(ss2);
delay(200);
lcd.clear();//limpiar lcd
lcd.setCursor(0, 0), lcd.print("Subiendo"); //indicar en la lcd que seesta subiendo
var2 = 1;
var1 = -(4726 - (poscv / unionFB2.datoF2) * 1000); //poner variable en el valor con la formula
cvu1_prolijo();//ir a funcion para subir
}
if (ss2 == 1 && ss1 == 1) { //si ninguna de los sensores no detecto placa y la poscion actual es mayor
que subir
lcd.setCursor(0, 0), lcd.print("placa NO detectada B"); //indicar que no se ha detectado placa
carroCV.setCurrentPosition(0);//setear en 0 la posicion
smayor = 0; //poner variable en 0 o high para usarlo como condicional posteriormente
cvuu_prolijo();//ir a funcion para bajar
}
//CUANDO T2=0 SIGNIFICA QUE ES EL PRIMER MOVIMIENTO LUEGO DE HABER ALIMENTADO EL
SISTEMA
// POR LO TANTO E LE SUMA UN VALOR PREVIAMENTE ESTABLECIDO PERO SOLO LA PRIMERA VEZ
// LUEGO DE ESO SE PONE T2 EN 1 Y NO SE LE SUMA EL VALOR POR ESO ESTAN LAS 2 CONDICIONES
CON T2 EN 0 Y 1

delay(100);
if (t2 == 0) {
if (poscv > subir + resta - 1) { //si la posicion actual es mayor que la variable subir
smayor = 0; //poner variable en 0 o high para usarlo como condicional posteriormente
pasos = ((poscv - (subir + resta)) / unionFB2.datoF2) * 1000; //obtener pasos de la formula para
bajar
pasosround = round(pasos); //redondear pasos
carroCV.setCurrentPosition(0);//poner el cv en la libreria en la posicion
lcd.setCursor(0, 0), lcd.print("bajando-CV"); //indicar en la lcd que esta bajando CV
cvuu_prolijo();//ir a funcion de bajar
}
if (poscv < subir + resta + 1) { //si la posicion actual es menor que la variable subir
smayor = 1; //poner variable en 1 o high para usarlo como condicional posteriormente
pasos = (((subir + resta) - poscv) / unionFB2.datoF2) * 1000; //obtener pasos
pasosround = round(pasos); //redondear pasos
carroCV.setCurrentPosition(pasosround);//poner el cv en la libreria en la posicion para regresar a 0
lcd.setCursor(0, 0), lcd.print("subiendo-CV"); //indicar en la lcd que esta subiendo CV
cvu1_prolijo();//ir a funcion de subir
}
}
if (t2 == 1) {
if (poscv > subir - 1) { //si la posicion actual es mayor que la variable subir
smayor = 0; //poner variable en 0 o high para usarlo como condicional posteriormente
pasos = ((poscv - subir) / unionFB2.datoF2) * 1000; //obtener pasos de la formula para bajar
pasosround = round(pasos); //redondear pasos
carroCV.setCurrentPosition(0);//poner el cv en la libreria en la posicion 0
lcd.setCursor(0, 0), lcd.print("bajando-CV"); //indicar en la lcd que esta bajando CV
cvuu_prolijo();//ir a funcion de bajar
}
if (poscv < subir + 1) { //si la posicion actual es menor que la variable subir
smayor = 1; //poner variable en 1 o high para usarlo como condicional posteriormente
pasos = ((subir - poscv) / unionFB2.datoF2) * 1000; //obtener pasos
pasosround = round(pasos); //redondear pasos
carroCV.setCurrentPosition(pasosround);//poner el cv en la libreria en la posicion para regresar a 0
lcd.setCursor(0, 0), lcd.print("subiendo-CV"); //indicar en la lcd que esta subiendo CV
cvu1_prolijo();//ir a funcion de subir
}
}
cvu_prolijo();//volver a la funcion
}
/*------CORTE V -PROLIJO- SUBIR HASTA PLACA CARRO VERTICAL------*/
void cvu1_prolijo() {
ss1 = digitalRead(sensor1); //leer valor del sensor 1
ss2 = digitalRead(sensor2); //leer valor del sensor 2
//a continuacion funcion para modificar la posicion y los pasos durante el recorrido para el proceso
de frenado cuando se detecta la placa
if (var3 == 1) { //si var3 esta en 1 significa que la posicion actual es menor que la de la variable subir
if (carroCV.currentPosition() < 0) { //mover posicion del cv hasta cero
if (ss2 == 1 && ss1 == 1) { //si los sensores ya no detectan placa
if (xx1 == 5 && var2 == 1) { //si xx1 est en 5 significa que ya repitio el ciclo 5 veces y var2 en 1
indica que fue detecata la placa la posicion actual es menor
var1 = carroCV.currentPosition() - 10; //restar 10 a la posicion actual para el proceso de frenado
y guardar en var 1
var2 = 0; //resetar variable en 0
xx1 = 0; //resetar variable en 0
}
if (var2 == 1) { //cuando var2 sea 1 sumar xx1
xx1++;
}
}
}
} else if (var3 == 0) { //si var3 esta en 0 significa que la posicion actual es mayor que la de la variable
subir
if (ss2 == 1 && ss1 == 1) { //si los sensores ya no detectan placa
if (xx1 == 5 && var2 == 1) { //si xx1 est en 5 significa que ya repitio el ciclo 5 veces y var2 en 1
indica que fue detecata la placa la posicion actual er menor
var1 = carroCV.currentPosition() - 10; //restar 10 a la posicion actual para el proceso de frenado
y guardar en var 1
var2 = 0; //resetar variable en 0
xx1 = 0; //resetar variable en 0
}
if (var2 == 1) { //cuando var2 sea 1 sumar xx1
xx1++;
}
}
}
if (carroCV.currentPosition() <= var1) { //si var 1 es menor o igual que la posicion actual
delay(100);
lcd.clear();//limpiar lcd
carroCV.stop();//parar cv
lcd.setCursor(0, 0), lcd.print("no se detecta sensor"); //indicar que no se detecta sensor
lcd.setCursor(0, 1), lcd.print("sensor1: ");
lcd.setCursor(10, 1), lcd.print(ss1); //mostrar valor del sensor 1
lcd.setCursor(0, 2), lcd.print("sensor2: ");
lcd.setCursor(10, 2), lcd.print(ss2); //mostrar valor del sensor 2
delay(100);
xx1 = 0;
carroCV.setAcceleration(100.0);//modificar parametro de aceleracion
var1 = 0; //resetar valor
var3 = 0; //resetar valor
cvu2_prolijo();//ir a siguiente funcion
}
ss1 = digitalRead(sensor1); //leer valor del sensor 1
ss2 = digitalRead(sensor2); //leer valor del sensor 2
carroCV.moveTo(var1);//mover hacia la variable editada para el frenado suave
carroCV.run();//mover
cvu1_prolijo();//volver a funcion
}
/*------CORTE V -PROLIJO- BAJAR HASTA PLACA CARRO VERTICAL------*/
void cvuu_prolijo() {
//si la posicion actual es mayor que la variable subir
ss1 = digitalRead(sensor1); //leer valor del sensor 1
ss2 = digitalRead(sensor2); //leer valor del sensor 2
fcv = digitalRead(finalCV);//leer valor del final de carrera 1
fcv1 = digitalRead(finalCV1);//leer valor del final de carrera 2
while (ss2 == 1 & ss1 == 1 & carroCV.currentPosition() < 40000 & fcv == 1) { //si los sensores estan
desactivados y la posicion es menor a 4mil y el final de carrera esta desactivada mover cv hacia abajo
ss1 = digitalRead(sensor1); //leer valor del sensor 1
ss2 = digitalRead(sensor2); //leer valor del sensor 2
fcv = digitalRead(finalCV);//leer valor del final de carrera 1
fcv1 = digitalRead(finalCV1);//leer valor del final de carrera 2
carroCV.move(5000);//mover hacia abajo el cv
carroCV.run();//mover
}
cvu2_prolijo();//ir a siguiente funcion
}
/*------CORTE V -PROLIJO- MODIFICAR VALORES DE POSICION------*/
void cvu2_prolijo() {

lcd.clear();//limpiar lcd
// CUANDO T2=0 SIGNIFICA QUE ES EL PRIMER MOVIMIENTO LUEGO DE HABER ALIMENTADO EL
SISTEMA
// POR LO TANTO E LE SUMA UN VALOR PREVIAMENTE ESTABLECIDO PERO SOLO LA PRIMERA VEZ
// LUEGO DE ESO SE PONE T2 EN 1 Y NO SE LE RESTA EL VALOR POR ESO ESTAN LAS 2 CONDICIONES
CON T2 EN 0 Y 1

if (t2 == 1) {
delay(100);
lcd.setCursor(10, 2);
if (smayor == 0) { //condicional para indicar que el movimiento fue hacia abajo con smayor en 0
pasos = carroCV.currentPosition(); //obtener pasos de la poscion actual del carro CV en a libreria
poscv = poscv - (pasos * unionFB2.datoF2) / 1000; //modificar valor de posicion de cv
}
if (smayor == 1) { //condicional para indicar que el movimiento fue hacia arriba con smayor en 1
pasos = 50000 - carroCV.currentPosition(); //obtener pasos de la poscion actual del carro CV en a
libreria+ 5000pasos constantes
poscv = poscv + (unionFB2.datoF2 * pasos) / 1000; //modificar valor de posicion de cv
}

}
if (t2 == 0) {
delay(100);
lcd.setCursor(10, 2);
if (smayor == 0) { //condicional para indicar que el movimiento fue hacia abajo con smayor en 0
pasos = carroCV.currentPosition(); //obtener pasos de la poscion actual del carro CV en a libreria
poscv = poscv - resta - (unionFB2.datoF2 * pasos) / 1000; //modificar valor de posicion de cv
}
if (smayor == 1) { //condicional para indicar que el movimiento fue hacia arriba con smayor en 1
pasos = 50000 - carroCV.currentPosition(); //obtener pasos de la poscion actual del carro CV en a
libreria+ 5000pasos constantes
poscv = poscv - resta + (unionFB2.datoF2 * pasos) / 1000; //modificar valor de posicion de cv
}
t2 = 1;
}
//mostrar valor en la lcd
lcd.setCursor(0, 1), lcd.print(" CV:");
lcd.setCursor(6, 1), lcd.print(poscv);
lcd.setCursor(0, 2), lcd.print(" TH:");
lcd.setCursor(6, 2), lcd.print(posth);
//enviar valores de posicion a la web a traves del wifi por el serial2
Serial2.print(":"), Serial2.print(poscv), Serial2.print(":"), Serial2.print(posth), Serial2.print(":");
delay(200);
carroCV.stop();//para cv por seguridad
Serial3.print("W");//enviar dato a arduinoA que ya se movio el cv para continuar con el corte
Serial.println(" ");
delay(100);

huto:
delay(50);
while (Serial3.available() > 0) { //esperar serial3 para recibir dato de arduino A
charN = Serial3.read(); //obtener valor leido tipo char
segmentacion = true;
}

if (segmentacion == true) {
dt = data;
Serial.println(dt);
if (charN == 'Z') { //si el valor es Z seguir a la siguiente funcion
delay(100);
cvd_prolijo();//ir a siguiente funcion
}
}
goto huto;//olver etiqueta

}
/*------CORTE V -PROLIJO- CONFIGURAR BAJAR CV PARA REALIZAR EL CORTE------*/
void cvd_prolijo() {
//configurar parametros de velocidad y aceleracion de carro CV
carroCV.setMaxSpeed(350.0);
carroCV.setAcceleration(50.0);
carroCV.setSpeed(20);

carroCV.setCurrentPosition(0);//posicion en 0
fcv = digitalRead(finalCV);//leer sensor final de carrera 1
fcv1 = digitalRead(finalCV1); //leer sensor final de carrera 2
lcd.setCursor(0, 1), lcd.print("regresando!-CV"); //indicar en la lcd que se esta regresando cv
cvd1_prolijo();//ir a siguiente funcion
}
/*------CORTE V -PROLIJO- BAJAR CV PARA REALIZAR EL CORTE------*/
void cvd1_prolijo() {

fcv1 = digitalRead(finalCV1); //leer sensor final de carrera 1


fcv = digitalRead(finalCV); //leer sensor final de carrera 2

while ((fcv == 1 || fcv1 == 1)) { //mientras no esten desactivados mantener dentro del while y mover
cv
fcv = digitalRead(finalCV);//leer sensor final de carrera 1
fcv1 = digitalRead(finalCV1);//leer sensor final de carrera 2
if (fcv == 0 && fcv1 == 0) { //si los sensores se activan entonces para el cv
lcd.clear();//limpiar lcd
delay(200);
carroCV.stop();//parar cv
Serial3.print("D");//enviar valor al arduino A para indicar que ya bajo el CV hasta el inicio
Serial.println(" ");
delay(100);
poscv = 0, t2 = 0; //resetear valores
t6 = 1;
//enviar valores de posicion a la web a traves del wifi por el serial2
Serial2.print(":"), Serial2.print(poscv), Serial2.print(":"), Serial2.print(posth), Serial2.print(":");
esperar_prolijo2(); //ir al siguiente funcion
}
carroCV.move(5000);//mover 5mil para regresar el cv a la posicion cero por el centido invertido
carroCV.run();//mover
}

if (fcv == 0 && fcv1 == 0) {


lcd.clear();//limpiar lcd
poscv = 0;
delay(200);
carroCV.stop();//parar cv
Serial3.print("D");//enviar valor al arduino A para indicar que ya bajo el CV hasta el inicio
Serial.println(" ");
delay(100);
poscv = 0, t2 = 0; //resetear valores
if (recordar > 0) {
recordar = recordar + resta;
}
t6 = 1;
//enviar valores de posicion a la web a traves del wifi por el serial2
Serial2.print(":"), Serial2.print(poscv), Serial2.print(":"), Serial2.print(posth), Serial2.print(":");
esperar_prolijo2();//ir al siguiente funcion

}
esperar_prolijo2();//ir al siguiente funcion
}
/*------CORTE V -PROLIJO- ESPERA SERIAL3 PARA SIGUIENTE PASE------*/
void esperar_prolijo2() {
cvu_prolijo2();
wa:
delay(500);
while (Serial3.available() > 0) { //esperar dato por serial3 del arduino A
charN = Serial3.read(); //leer dato tipo char
segmentacion = true;//setear en true para que se active el siguiente condicional
}
if (segmentacion == true) {
dt = data;
if (charN == 'G') { //si dato recibido es igual a D ir a siguiente funcion
charN = ' ';
delay(200);
cvu_prolijo2();//ir a siguiente funcion
} else {
goto wa;//sino hay dato volver a etiqueta
}
segmentacion = false;
}

goto wa;//volver a etiqueta


esperar_prolijo2();//volver a funcion
}
/*------CORTE V -PROLIJO#2#- CONFIGURAR SUBIR CARRO VERTICAL------*/
void cvu_prolijo2() {
//CONFIGURAR PARAMETROS DE VELOCIDAD DEL CARRO VERTICAL A SU FORMA NORMAL
carroCV.setMaxSpeed(450.0);
carroCV.setAcceleration(100.0);
carroCV.setSpeed(20);
carroCV.stop();
ss1 = digitalRead(sensor1); //leer entrada sensor 1
ss2 = digitalRead(sensor2); //leer entreda sensor 2
//CUANDO T2=0 SIGNIFICA QUE ES EL PRIMER MOVIMIENTO LUEGO DE HABER ALIMENTADO EL
SISTEMA
// POR LO TANTO E LE SUMA UN VALOR PREVIAMENTE ESTABLECIDO PERO SOLO LA PRIMERA VEZ
// LUEGO DE ESO SE PONE T2 EN 1 Y NO SE LE SUMA EL VALOR POR ESO ESTAN LAS 2 CONDICIONES
CON T2 EN 0 Y 1
if (t2 == 1) {
if (poscv < subir) { //si la posicion actual es menor que la variable subir
lcd.setCursor(0, 0), lcd.print("subiendo200"); //indicar en la lcd que esta subiendo CV
pasos = ((subir - poscv) / unionFB2.datoF2) * 1000; //obtener pasos
pasosround = round(pasos); //redondear pasos
carroCV.setCurrentPosition(pasosround);//poner el cv en la libreria en la posicion para regresar a 0
smayor = 1; //poner variable en 1 o high para usarlo como condicional posteriormente
carroCV.setAcceleration(200.0);//modificar aceleracion
var1 = -4726; //poner variable en el valor 4726 previamente calibrado
var2 = 1;
var3 = 1;
cvu1_prolijo2();//ir a funcion subir
}
}
if (t2 == 0) {
if (poscv < subir + resta + 1) { //si la posicion actual es menor que la variable subir
lcd.setCursor(0, 0), lcd.print("subiendo200"); //indicar en la lcd que esta subiendo CV
pasos = (((subir + resta) - poscv) / unionFB2.datoF2) * 1000; //obtener pasos
pasosround = round(pasos); //poner el cv en la libreria en la posicion para regresar a 0
carroCV.setCurrentPosition(pasosround);//poner el cv en la libreria en la posicion para regresar a 0
smayor = 1; //poner variable en 1 o high para usarlo como condicional posteriormente
carroCV.setAcceleration(200.0);//modificar aceleracion
var1 = -4726; //poner variable en el valor 4726 previamente calibrado
var2 = 1;
var3 = 1;
cvu1_prolijo2();//ir a funcion subir
}
}
if (ss2 == 0 || ss1 == 0) { // si algunos de los sensores estan activados
lcd.setCursor(0, 0), lcd.print("placa detectada sub"); //indicar que la placa esta detectada
carroCV.setCurrentPosition(50000);//setear posicion en 50000 para mover a 0
smayor = 1; //poner variable en 1 o high para usarlo como condicional posteriormente
//mostrar valores de los sensores
lcd.setCursor(0, 1), lcd.print("sensor1: ");
lcd.setCursor(10, 1), lcd.print(ss1);
lcd.setCursor(0, 2), lcd.print("sensor2: ");
lcd.setCursor(10, 2), lcd.print(ss2);
var1 = -(4726 - (poscv / unionFB2.datoF2) * 1000); //poner variable en el valor con la formula
var2 = 1;
delay(100);
cvu1_prolijo2();//ir a funcion para subir
}
if (ss2 == 1 && ss1 == 1) { //si ninguna de los sensores no detecto placa y la poscion actual es mayor
que subir
lcd.setCursor(0, 0), lcd.print("placa NO detectada B"); //indicar que no se ha detectado placa
carroCV.setCurrentPosition(0);//setear pos 0
smayor = 0;
cvuu_prolijo2();//ir a sig funcion de bajar
}
//CUANDO T2=0 SIGNIFICA QUE ES EL PRIMER MOVIMIENTO LUEGO DE HABER ALIMENTADO EL
SISTEMA
// POR LO TANTO E LE SUMA UN VALOR PREVIAMENTE ESTABLECIDO PERO SOLO LA PRIMERA VEZ
// LUEGO DE ESO SE PONE T2 EN 1 Y NO SE LE SUMA EL VALOR POR ESO ESTAN LAS 2 CONDICIONES
CON T2 EN 0 Y 1
delay(100);
if (t2 == 0) {
if (poscv > subir + resta - 1) { //si la posicion actual es mayor que la variable subir
smayor = 0; //poner variable en 0 o high para usarlo como condicional posteriormente
pasos = ((poscv - (subir + resta)) / unionFB2.datoF2) * 1000; //obtener pasos de la formula para
bajar
pasosround = round(pasos); //redondear pasos
carroCV.setCurrentPosition(0);//poner el cv en la libreria en la posicion 0
lcd.setCursor(0, 0), lcd.print("bajando-CV"); //indicar en la lcd que esta bajando CV
cvuu_prolijo2();//ir a funcion de bajar
}
if (poscv < subir + resta + 1) { //si la posicion actual es menor que la variable subir
smayor = 1; //poner variable en 1 o high para usarlo como condicional posteriormente
pasos = (((subir + resta) - poscv) / unionFB2.datoF2) * 1000; //obtener pasos
pasosround = round(pasos); //redondear pasos
carroCV.setCurrentPosition(pasosround); //poner el cv en la libreria en la posicion para regresar a
0
lcd.setCursor(0, 0), lcd.print("subiendo-CV"); //indicar en la lcd que esta subiendo CV
cvu1_prolijo2();//ir a funcion de subir
}
}

if (t2 == 1) { //si la posicion actual es mayor que la variable subir


if (poscv > subir - 1) {
smayor = 0; //poner variable en 0 o high para usarlo como condicional posteriormente
pasos = ((poscv - subir) / unionFB2.datoF2) * 1000; //obtener pasos de la formula para bajar
pasosround = round(pasos); //redondear pasos
carroCV.setCurrentPosition(0); //poner el cv en la libreria en la posicion 0
lcd.setCursor(0, 0), lcd.print("bajando-CV"); //indicar en la lcd que esta bajando CV
cvuu_prolijo2();//ir a funcion de bajar
}
if (poscv < subir + 1) { //si la posicion actual es menor que la variable subir
smayor = 1; //poner variable en 1 o high para usarlo como condicional posteriormente
pasos = ((subir - poscv) / unionFB2.datoF2) * 1000; //obtener pasos
pasosround = round(pasos); //redondear pasos
carroCV.setCurrentPosition(pasosround); //poner el cv en la libreria en la posicion para regresar a
0
lcd.setCursor(0, 0), lcd.print("subiendo-CV"); //indicar en la lcd que esta subiendo CV
cvu1_prolijo2();//ir a funcion de subir
}
}
cvu_prolijo2();//volver a la funcion
}
/*------CORTE V -PROLIJO#2#- SUBIR HASTA PLACA CARRO VERTICAL------*/
void cvu1_prolijo2() {
ss1 = digitalRead(sensor1); //leer valor del sensor 1
ss2 = digitalRead(sensor2); //leer valor del sensor 2
//a continuacion funcion para modificar la posicion y los pasos durante el recorrido para el proceso
de frenado cuando se detecta la placa
if (var3 == 1) { //si var3 esta en 1 significa que la posicion actual es menor que la de la variable subir
if (carroCV.currentPosition() < 0) { //mover posicion del cv hasta cero
if (ss2 == 1 && ss1 == 1) { //si los sensores ya no detectan placa
if (xx1 == 5 && var2 == 1) { //si xx1 est en 5 significa que ya repitio el ciclo 5 veces y var2 en 1
indica que fue detecata la placa la posicion actual es menor
var1 = carroCV.currentPosition() - 10; //restar 10 a la posicion actual para el proceso de frenado
y guardar en var 1
var2 = 0; //resetar variable en 0
xx1 = 0; //resetar variable en 0
}
if (var2 == 1) { //cuando var2 sea 1 sumar xx1
xx1++;
}
}
}
} else if (var3 == 0) { //si var3 esta en 0 significa que la posicion actual es mayor que la de la variable
subir
if (ss2 == 1 && ss1 == 1) { //si los sensores ya no detectan placa
if (xx1 == 5 && var2 == 1) { //si xx1 est en 5 significa que ya repitio el ciclo 5 veces y var2 en 1
indica que fue detecata la placa la posicion actual er menor
var1 = carroCV.currentPosition() - 10; //restar 10 a la posicion actual para el proceso de frenado
y guardar en var 1
var2 = 0; //resetar variable en 0
xx1 = 0; //resetar variable en 0
}
if (var2 == 1) { //cuando var2 sea 1 sumar xx1
xx1++;
}
}
}
if (carroCV.currentPosition() <= var1) { //si var 1 es menor o igual que la posicion actual
delay(100);
lcd.clear();
carroCV.stop();
lcd.setCursor(0, 0), lcd.print("no se detecta sensor"); //indicar que no se detecta sensor
lcd.setCursor(0, 1), lcd.print("sensor1: ");
lcd.setCursor(10, 1), lcd.print(ss1); //mostrar valor del sensor 1
lcd.setCursor(0, 2), lcd.print("sensor2: ");
lcd.setCursor(10, 2), lcd.print(ss2); //mostrar valor del sensor 2
delay(100);
xx1 = 0;
carroCV.setAcceleration(100.0);//modificar parametro de aceleracion
var1 = 0; //resetar valor
var3 = 0; //resetar valor
cvu2_prolijo2();//ir a siguiente funcion
}
ss1 = digitalRead(sensor1); //leer valor del sensor 1
ss2 = digitalRead(sensor2); //leer valor del sensor 2
carroCV.moveTo(var1);//mover hacia la variable editada para el frenado suave
carroCV.run();//mover
cvu1_prolijo2();//volver a funcion
}
/*------CORTE V -PROLIJO#2#- BAJAR HASTA PLACA CARRO VERTICAL------*/
void cvuu_prolijo2() {
//si la posicion actual es mayor que la variable subir
ss1 = digitalRead(sensor1); //leer valor del sensor 1
ss2 = digitalRead(sensor2); //leer valor del sensor 2
fcv = digitalRead(finalCV);//leer valor del final de carrera 1
fcv1 = digitalRead(finalCV1);//leer valor del final de carrera 2
while (ss2 == 1 & ss1 == 1 & carroCV.currentPosition() < 40000 & fcv == 1) { //si los sensores estan
desactivados y la posicion es menor a 4mil y el final de carrera esta desactivada mover cv hacia abajo
ss1 = digitalRead(sensor1); //leer valor del sensor 1
ss2 = digitalRead(sensor2); //leer valor del sensor 2
fcv1 = digitalRead(finalCV1);//leer valor del final de carrera 2
fcv = digitalRead(finalCV); //leer valor del final de carrera 1
carroCV.move(5000);//mover hacia abajo el cv
carroCV.run();//mover
}
cvu2_prolijo2();//ir a siguiente funcion
}
/*------CORTE V -PROLIJO#2#- MODIFICAR VALORES DE POSICION------*/
void cvu2_prolijo2() {
lcd.clear();//limpiar lcd
// CUANDO T2=0 SIGNIFICA QUE ES EL PRIMER MOVIMIENTO LUEGO DE HABER ALIMENTADO EL
SISTEMA
// POR LO TANTO E LE SUMA UN VALOR PREVIAMENTE ESTABLECIDO PERO SOLO LA PRIMERA VEZ
// LUEGO DE ESO SE PONE T2 EN 1 Y NO SE LE RESTA EL VALOR POR ESO ESTAN LAS 2 CONDICIONES
CON T2 EN 0 Y 1

if (t2 == 1) {
delay(100);
lcd.setCursor(10, 2);
if (smayor == 0) { //condicional para indicar que el movimiento fue hacia abajo con smayor en 0
pasos = carroCV.currentPosition(); //obtener pasos de la poscion actual del carro CV en a libreria
poscv = poscv - (pasos * unionFB2.datoF2) / 1000; //modificar valor de posicion de cv
}
if (smayor == 1) { //condicional para indicar que el movimiento fue hacia arriba con smayor en 1
pasos = - carroCV.currentPosition(); //obtener pasos de la poscion actual del carro CV en a
libreria+ 5000pasos constantes
poscv = poscv + (unionFB2.datoF2 * pasos) / 1000; //modificar valor de posicion de cv
}

}
if (t2 == 0) {
delay(100);
lcd.setCursor(10, 2);
if (smayor == 0) { //condicional para indicar que el movimiento fue hacia abajo con smayor en 0
pasos = carroCV.currentPosition(); //obtener pasos de la poscion actual del carro CV en a libreria
poscv = poscv - resta - (unionFB2.datoF2 * pasos) / 1000; //modificar valor de posicion de cv
}
if (smayor == 1) { //condicional para indicar que el movimiento fue hacia arriba con smayor en 1
pasos = - carroCV.currentPosition(); //obtener pasos de la poscion actual del carro CV en a
libreria+ 5000pasos constantes
poscv = poscv - resta + (unionFB2.datoF2 * pasos) / 1000; //modificar valor de posicion de cv
}
t2 = 1;
}
//mostrar valor en la lcd
lcd.setCursor(0, 1), lcd.print(" CV:");
lcd.setCursor(6, 1), lcd.print(poscv);
lcd.setCursor(0, 2), lcd.print(" TH:");
lcd.setCursor(6, 2), lcd.print(posth);
//enviar valores de posicion a la web a traves del wifi por el serial2
Serial2.print(":"), Serial2.print(poscv), Serial2.print(":"), Serial2.print(posth), Serial2.print(":");
delay(200);
carroCV.stop();//para cv por seguridad
Serial3.print("M");//enviar dato a arduinoA que ya se movio el cv para continuar con el corte
Serial.println(" ");
delay(100);

huto:
delay(50);
while (Serial3.available() > 0) { //esperar serial3 para recibir dato de arduino A
charN = Serial3.read(); //obtener valor leido tipo char
segmentacion = true;
}

if (segmentacion == true) {
dt = data;
Serial.println(dt);
if (charN == 'F') { //si el valor es F seguir a la siguiente funcion
delay(100);
cvd_prolijo2();//ir a siguiente funcion
}
}
goto huto;//volver etiqueta
}
/*------CORTE V -PROLIJO#2#- CONFIGURAR BAJAR CV PARA REALIZAR EL CORTE------*/
void cvd_prolijo2() {
//configurar parametros de velocidad y aceleracion de carro CV
carroCV.setMaxSpeed(280.0);
carroCV.setAcceleration(50.0);
carroCV.setSpeed(20);
carroCV.setCurrentPosition(0);//posicion en 0
fcv = digitalRead(finalCV);//leer sensor final de carrera 1
fcv1 = digitalRead(finalCV1);//leer sensor final de carrera 2
lcd.setCursor(0, 1), lcd.print("regresando!-CV"); //indicar en la lcd que se esta regresando cv
cvd1_prolijo2();//ir a siguiente funcion
}
/*------CORTE V -PROLIJO#2#- BAJAR CV PARA REALIZAR EL CORTE------*/
void cvd1_prolijo2() {

fcv = digitalRead(finalCV);//leer sensor final de carrera 1


fcv1 = digitalRead(finalCV1);//leer sensor final de carrera 2
while ((fcv == 1 || fcv1 == 1)) { //mover cv mientras estan desactivados
fcv = digitalRead(finalCV);//leer sensor final de carrera 1
fcv1 = digitalRead(finalCV1); //leer sensor final de carrera 2
if (fcv == 0 && fcv1 == 0) { //si los sensores se activan entonces para el cv
lcd.clear();//limpiar lcd
delay(200);
carroCV.stop();//parar cv
Serial3.print("Y");//enviar valor al arduino A para indicar que ya bajo el CV hasta el inicio
Serial.println(" ");
delay(100);
poscv = 0, t2 = 0; //resetear valores
Serial2.print(":"), Serial2.print(poscv), Serial2.print(":"), Serial2.print(posth), Serial2.print(":");
loop();//volver al inicion
}
carroCV.move(5000); //mover 5mil para regresar el cv a la posicion cero por el centido invertido
carroCV.run();//mover
}
if (fcv == 0 && fcv1 == 0) {
lcd.clear();//limpiar lcd
poscv = 0;
delay(200);
carroCV.stop();//parar cv
Serial3.print("Y");//enviar valor al arduino A para indicar que ya bajo el CV hasta el inicio
Serial.println(" ");
delay(100);
poscv = 0, t2 = 0; //resetear valores
Serial2.print(":"), Serial2.print(poscv), Serial2.print(":"), Serial2.print(posth), Serial2.print(":");
loop();//volver al inicion
}
loop();//volver al inicion
}
/*------CALIBRAR CV-----*/
void calibrarcv() {
//para calibrar movemos el cp al incio con el sensor final de carrera y luego le colocamos un valor de
posicion el
//carro va a ese valor y luego ingresamos la posicion que vemos y sacamos una regla de 3 con el
valor de posicion del codigo y el valor
//que estamos ingresando y esa relacion de valores lo guardamos en la memoria eeprom para que se
guarde de forma permanente!

lcd.print("CV al inicio"); //imprimir en la lcd que se debe visualizar el movimento del CV


inicp:
//configurar parametros de velocidad y aceleracion de carro CV
carroCV.setMaxSpeed(200.0);
carroCV.setAcceleration(50.0);
carroCV.setSpeed(20);
fcv = digitalRead(finalCV);//leer sensor 1 del final de carrera del CV
fcv1 = digitalRead(finalCV1);//leer sensor 2 del final de carrera del CV

while (fcv == 1 || fcv1 == 1) { //mientras esten desactivados algunos de los 2 mover el cp y mantener
fcv = digitalRead(finalCV);//leer sensor 1 del final de carrera del CV
fcv1 = digitalRead(finalCV1);//leer sensor 2 del final de carrera del CV
if (fcv == 0 && fcv1 == 0) { //si los sensores se activan parar el carro el y luego ir a la siguiente
etiqueta para ingresar el valor
lcd.clear();//limpiar lcd
carroCV.stop();//parar CV
goto inicp;//ir a etiqueta
}
carroCV.move(5000);//mover 5milpasos para llegar al inicio
carroCV.run();//mover
}
lcd.print("CV-inicio-calib");//indicar en la lcd el inicio de la calibracion
carroCV.setCurrentPosition(2000);//como el sentido esta invertido, se coloca en la posicion y mover
a cero
delay(100);
inicp1:
//configurar parametros de velocidad y aceleracion de carro CV
carroCV.setMaxSpeed(200.0);
carroCV.setAcceleration(50.0);
carroCV.setSpeed(20);

while (carroCV.currentPosition() > 0) { //mover hasta llegar los 2mil pasos


carroCV.moveTo(0); //mover cv hasta la posicion indicada
carroCV.run();//mover
}
carroCV.stop();//parar cv para finalizar recorrido
goto inicp2; //ir a nueva etiqueta

lcd.clear();//limpar lcd
counter1 = 1;
counter = 1;
lcd.print("valor-CV(mm):");
delay(100);

inicp2:
if (keypad.getKeys()) { /*CUANDO SE PRESIONA UN BOTON DEL TECLADO MISMA
LOGICA*/
for (int i = 0; i < LIST_MAX; i++) {
switch (keypad.key[i].kstate) {
case PRESSED:
if ( keypad.key[i].stateChanged ) {
char key = keypad.key[i].kchar;
if (key == '#') { //si tecla pulsada es igual a "#" significa una ',' y procede a agregar los valores
decimales
delay(300);
counter1 = counter1 + 5;
rt1 = counter1 + 3;
lcd.setCursor(rt1, 3);
lcd.print(",");
}
if ((key != '*') && (key != 'B') && (key != '#') && (key != 'A') && (key != 'C') && (key != 'K')) {
//agregar digitos a la lcd y mover el cursor
delay(300);
counter1 = counter1 + 1;
if (counter1 > 6) {
rt1 = counter1 + 3;
} else {
rt1 = counter1 + 7;
}

lcd.setCursor(rt1, 3);
lcd.print(keypad.key[i].kchar);
lcd.setCursor(rt1 + 1, 3);
}
if ((key != '*') && (key != 'B') && (key != '#') && (key != 'A') && (key != 'C') && (key != 'K')) {
//agragr digitos,sumar los digitos y agruparlos
delay(300);
if (counter1 == 2) { //unidad
char hy = keypad.key[i].kchar;
p11 = char(hy) - 48; //restar 48 para hacer casting de char a int
if (p11 < 0) { //si es menor que cero el valor será cero
p11 = 0;
}
res1 = p11;
}
if (counter1 == 3) { //decena
p22 = keypad.key[i].kchar - 48;
if (p22 < 0) {
p22 = 0;
}
res1 = (p11 * 10) + p22;
}
if (counter1 == 4) { //centena
p33 = keypad.key[i].kchar - 48;
if (p33 < 0) {
p33 = 0;
}
res1 = (p11 * 100) + (p22 * 10) + p33;
}
if (counter1 == 5) { //unidad de mil
p44 = keypad.key[i].kchar - 48;
y1 = 1;
if (p44 < 0) {
p44 = 0;
}
res1 = (p11 * 1000) + (p22 * 100) + (p33 * 10) + p44;
}
if (counter1 == 11) { //decimal
c11 = keypad.key[i].kchar - 48;
resc1 = (c11 / 10);
}

if (counter1 == 12) { //suma de decimales


c22 = keypad.key[i].kchar - 48;
resc1 = ((c11 * 10) + c22) / 100;
counter1 = 1;
}
}
//RESULTADO FINAL DE ENTERO Y DECIMALES
resul = res1 + resc1;
calibcp = resul / 2000; //dividir valor entre los 2000 que se configuró la posicion que iba a ir el
cp en la librería de stepper
calibcp = calibcp * 1000; //multiplicar el valor por 1000 para obtener un valor no tan bajo y
guardarlo en la eeprom
lcd.setCursor(0, 4), lcd.print(resul); //mostrar resultado

if (key == '*') { //borrar digito y limpiar la lcd


if (counter1 > 6) {
rt1 = counter1 + 5;
} else {
rt1 = counter1 + 9;
}
lcd.setCursor(rt1, 3);
lcd.print(" ");
if (counter1 > 1) {
counter1 = counter1 - 1;
}
rt1 = counter1 + 6;
if (counter1 > 1) {
lcd.setCursor(rt1 + 1, 3);
} else {
lcd.setCursor(rt1 + 1, 3);
lcd.print(" ");
}
}
lcd.setCursor(0, 2);

if (key == 'K') { //cuando se pulsa la 'K' se guarda el valor en la EEPROM de manera fraccionada
y se regresa al menu
delay(300);
unionFB2.datoF2 = calibcp;//guardar valor en la varibale para fraccionar en la eeprom
EEPROM.write(60, unionFB2.datoB2[0]);
EEPROM.write(61, unionFB2.datoB2[1]);
EEPROM.write(62, unionFB2.datoB2[2]);
EEPROM.write(63, unionFB2.datoB2[3]);
delay(60);
unionFB2.datoB2[0] = EEPROM.read(60);
unionFB2.datoB2[1] = EEPROM.read(61);
unionFB2.datoB2[2] = EEPROM.read(62);
unionFB2.datoB2[3] = EEPROM.read(63);
counter = 1;
lcd.clear();//limpiar lcd
segmentacion = false;
dt = " ";
data = " ";
loop();//regresamos al inicio
}
break;
}
}
}
}
goto inicp2; //regresar a la etiqueta
calibrarcv();//regresar a la funcion
}
/*------CALIBRAR TH-----*/
void calibrarth() {
//para calibrar movemos el cp al incio con el sensor final de carrera y luego le colocamos un valor de
posicion el
//carro va a ese valor y luego ingresamos la posicion que vemos y sacamos una regla de 3 con el
valor de posicion del codigo y el valor
//que estamos ingresando y esa relacion de valores lo guardamos en la memoria eeprom para que se
guarde de forma permanente!
initv:
lcd.setCursor(0, 0), lcd.print("TH al inicio"); //imprimir en la lcd que se debe visualizar el movimento
del TH
fi = digitalRead(finalI);//leer sensor del final de carrera del TH

while ((fi == 0)) { //mientras el sensor este desactivado mover el TH


fi = digitalRead(finalI);
if (fi == 1) { //si se activa el sensor parar el carro el y luego ir a la siguiente etiqueta para ingresar el
valor
goto initv;//volver a la etiqueta para verificar
}
carroTH.move(1000); //mover 2milpasos para llegar al inicio
carroTH.run();//mover
}
carroTH.stop(); //parar TH
lcd.clear();//limpiar lcd
lcd.setCursor(0, 2), lcd.print("TH-inicio-calib"); //indicar en la lcd el inicio de la calibracion
delay(100);

initv1:
carroTH.setCurrentPosition(3000);//como el sentido esta invertido, se coloca en la posicion y mover
a cero

ff1:
if (carroTH.currentPosition() == 0) { //si llega a la posicion indicafa
carroTH.stop();//parar TH
goto ff2;//ir a nueva etiqueta
}

carroTH.moveTo(0); //mover cv hasta la posicion indicada


carroTH.run();//mover
goto ff1;
ff2:
lcd.clear();//limpiar lcd
counter1 = 1; //resetear valor
counter = 1;
lcd.setCursor(0, 1), lcd.print("valor-TV(mm):"); //indicar en la lcd para ingresar el valor

initv2:
if (keypad.getKeys()) { /*INGRESO DE TECLADO LA MISMA LOGICA*/
for (int i = 0; i < LIST_MAX; i++) {
switch (keypad.key[i].kstate) {
case PRESSED:
if ( keypad.key[i].stateChanged ) {
char key = keypad.key[i].kchar;
if (key == '#') { //si tecla pulsada es igual a "#" significa una ',' y procede a agregar los valores
decimales
delay(300);
counter1 = counter1 + 5;
rt1 = counter1 + 3;
lcd.setCursor(rt1, 3);
lcd.print(",");
}

if ((key != '*') && (key != 'B') && (key != '#') && (key != 'A') && (key != 'C') && (key != 'K')) {
//agregar digito a la lcd y mover cursor
delay(300);
counter1 = counter1 + 1;
if (counter1 > 6) {
rt1 = counter1 + 3;
} else {
rt1 = counter1 + 7;
}
lcd.setCursor(rt1, 3);
lcd.print(keypad.key[i].kchar);
lcd.setCursor(rt1 + 1, 3);
}
if ((key != '*') && (key != 'B') && (key != '#') && (key != 'A') && (key != 'C') && (key != 'K')) {
//agrupar digitos ingresados(decena centena)
delay(300);
if (counter1 == 2) { //unidad
char hy = keypad.key[i].kchar; //valor leido del teclado en char
p11 = char(hy) - 48; //restar 48 para hacer casting de char a int
if (p11 < 0) {
p11 = 0;
}
res1 = p11;
}
if (counter1 == 3) { //decena
p22 = keypad.key[i].kchar - 48;
if (p22 < 0) {
p22 = 0;
}
res1 = (p11 * 10) + p22;
}
if (counter1 == 4) { //centena
p33 = keypad.key[i].kchar - 48;
if (p33 < 0) {
p33 = 0;
}
res1 = (p11 * 100) + (p22 * 10) + p33;
}
if (counter1 == 5) { //unidad de mil
p44 = keypad.key[i].kchar - 48;
y1 = 1;
if (p44 < 0) {
p44 = 0;
}
res1 = (p11 * 1000) + (p22 * 100) + (p33 * 10) + p44;
}

if (counter1 == 11) { //decimal


c11 = keypad.key[i].kchar - 48;
resc1 = (c11 / 10);
}
if (counter1 == 12) { //suma de decimales
c22 = keypad.key[i].kchar - 48;
resc1 = ((c11 * 10) + c22) / 100;
counter1 = 1; //restablecer valor
}
}
//RESULTADO FINAL DE ENTERO Y DECIMALES
resul = res1 + resc1;
calibtv = resul / 3000; //dividir valor entre los 6500 que se configuró la posicion que iba a ir el
cp en la librería de stepper
calibtv = calibtv * 1000; //multiplicar el valor por 250 para obtener un valor no tan bajo y
guardarlo en la eeprom

if (key == '*') { //borrar digito y limpiar la lcd


if (counter1 > 6) {
rt1 = counter1 + 5;
} else {
rt1 = counter1 + 9;
}
lcd.setCursor(rt1, 3);
lcd.print(" ");
if (counter1 > 1) {
counter1 = counter1 - 1;
}
rt1 = counter1 + 6;
if (counter1 > 1) {
lcd.setCursor(rt1 + 1, 3);
} else {
lcd.setCursor(rt1 + 1, 3);
lcd.print(" ");
}
}
lcd.setCursor(0, 2);
if (key == 'K') { //cuando se pulsa la 'K' se guarda el valor en la EEPROM de manera fraccionada
y se regresa al inicio
delay(300);
unionFB3.datoF3 = calibtv;//guardar valor en la varibale para fraccionar en la eeprom
EEPROM.write(70, unionFB3.datoB3[0]);
EEPROM.write(71, unionFB3.datoB3[1]);
EEPROM.write(72, unionFB3.datoB3[2]);
EEPROM.write(73, unionFB3.datoB3[3]);
delay(60);
unionFB3.datoB3[0] = EEPROM.read(70);
unionFB3.datoB3[1] = EEPROM.read(71);
unionFB3.datoB3[2] = EEPROM.read(72);
unionFB3.datoB3[3] = EEPROM.read(73);
counter = 1;
lcd.clear();//limpiar lcd
segmentacion = false;
dt = " ";
data = " ";
loop(); //regresamos al inicio
}
break;
}
}
}
}
goto initv2;

calibrarth();//volver a funcion
}
/*------CORTE H CONFIGURAR PASOS-----*/
void corteH() {
//configurar parametros de velocidad y aceleracion de carro CV
carroCV.setMaxSpeed(450.0);
carroCV.setAcceleration(50.0);
carroCV.setSpeed(15);

lcd.setCursor(4, 0), lcd.print("MOVIENDO-CV "); //indicar que se esta movendo cv


//enviar valores de posicion a la web a traves del wifi por el serial2
Serial2.print(":"), Serial2.print(poscv), Serial2.print(":"), Serial2.print(posth), Serial2.print(":");
Serial3.print("N");//enviar dato a arduinoA que ya se inicio el corte H
Serial.print(" ");

if (poscv > (res)) { //si la posicion atual es mayor al valor ingresado


pasos = ((poscv - res) / unionFB2.datoF2) * 1000; //formula para obtener los pasos
pasosround = round(pasos); //redondear pasos
lcd.setCursor(2, 2), lcd.print(" ");
lcd.setCursor(2, 2), lcd.print(pasosround); //mostrar pasos en la lcd
delay(1000);
carroCV.setCurrentPosition(0);//setear valor de posicion de cv en la libreria
corteHD();//ir a funcion para bajar cv
}

if (poscv < (res)) { //si la posicion actual es menor al valor ingresado


pasos = ((res - poscv) / unionFB2.datoF2) * 1000; //formula para obtener los pasos
pasosround = round(pasos); //redondear pasos
carroCV.setCurrentPosition(pasosround); //setear valor en la posicion para mover hasta 0 en la
libreria y subir cv
corteHU();//ir a funcion para subir cv
}
if (poscv == res) { //si los valores son iguales saltar funcion
cvcorte();//ir a siguiente funcion
}
corteH();//volver a funcion
}
/*------CORTE H SUBIR CV-----*/
void corteHU() {

if (carroCV.currentPosition() <= 0) {
if (t2 == 1) {
poscv = poscv + (unionFB2.datoF2 * pasos) / 1000; //formula para obtener pasos con t2=1
}
if (t2 == 0) {
poscv = poscv - resta + (unionFB2.datoF2 * pasos) / 1000; //formula para obtener pasos con t2=0
}
//mostrar valor en la lcd
lcd.setCursor(3, 1), lcd.print(" CV:");
lcd.setCursor(3, 2), lcd.print(" TH:");
lcd.setCursor(9, 2), lcd.print(posth);
lcd.setCursor(9, 1), lcd.print(poscv);
//enviar valores de posicion a la web a traves del wifi por el serial2
Serial2.print(":"), Serial2.print(poscv), Serial2.print(":"), Serial2.print(posth), Serial2.print(":");
carroCV.stop();//para cv
cvcorte();//ir a siguiente funcion
}

carroCV.moveTo(0);//mover hasta cero en la libreria para mover hacia en la posicion en el driver


carroCV.run();//mover
corteHU();//volver a la posicion
}
/*------CORTE H BAJAR CV-----*/
void corteHD() {

carroCV.moveTo(pasosround);//mover hacia laposicion para bajar cv hasta los pasos indicados

while (carroCV.currentPosition() < pasosround) { //mientras la posicion actual no sea igual a los
pasos mover cv
carroCV.run();//mover cv
}
lcd.clear();//limpiar lcd

if (carroCV.currentPosition() >= pasosround) {


if (t2 == 1) {
poscv = poscv - (unionFB2.datoF2 * pasos) / 1000; //formula para obtener pasos con t2=1
}
if (t2 == 0) {
poscv = poscv - resta - (unionFB2.datoF2 * pasos) / 1000; //formula para obtener pasos con t2=0
}
//mostrar valor en la lcd
lcd.setCursor(3, 1), lcd.print(" CV:");
lcd.setCursor(9, 1), lcd.print(poscv);
lcd.setCursor(3, 2), lcd.print(" TH:");
lcd.setCursor(9, 2), lcd.print(posth);
//enviar valores de posicion a la web a traves del wifi por el serial2
Serial2.print(":"), Serial2.print(poscv), Serial2.print(":"), Serial2.print(posth), Serial2.print(":");
carroCV.stop();//parar cv
cvcorte();//ir a siguiente funcion
}
corteHD();//volver a funcion
}
/*------CORTE H CONFIRMAR MOVIEMIENTO CORRECTO-----*/
void cvcorte() {
// CUANDO T2=0 SIGNIFICA QUE ES EL PRIMER MOVIMIENTO LUEGO DE HABER ALIMENTADO EL
SISTEMA
// POR LO TANTO E LE SUMA UN VALOR PREVIAMENTE ESTABLECIDO PERO SOLO LA PRIMERA VEZ
// LUEGO DE ESO SE PONE T2 EN 1 Y NO SE LE RESTA EL VALOR POR ESO ESTAN LAS 2 CONDICIONES
CON T2 EN 0 Y 1

if (t2 == 1) {
if (((poscv) > res - 1) && ((pos) < res + 1)) { //si la posicion cv es igual a la ingresada ir a sig funcion
carroCV.stop();
delay(100); corteHH();//ir a siguiente funcion
}
}
if (t2 == 0) {
t2 = 1;
if (((poscv + resta) > res - 1) && ((pos + resta) < res + 1)) { //si la posicion cv es igual a la ingresada ir
a sig funcion
carroCV.stop();
delay(100); corteHH();//ir a siguiente funcion
}
}
cvcorte();//volver a funcion
}
/*------CORTE H ESPERAR CP REGRESE-----*/
void corteHH() {
lcd.setCursor(4, 0); lcd.print("ESPERANDO-CP<"); //indicar en la lcd que se esta esperando finalizar el
movimiento del cp
delay(100);
while (Serial3.available() > 0) { //cuando llegue un dato por serial3 de arduino A
charN = Serial3.read(); //leer dato tipo char
segmentacion = true;//activar el siguiente condicional
}

if (segmentacion == true) {
dt = data;
if (charN == 'M') { //si el dato recibido es igual a M ir a siguiente funcion
dt = " ";
data = " ";
delay(100);
charN = ' ';
segmentacion = false;
corteH2();//ir a siguiente funcion
}
}
corteHH();//volver a funcion
}
/*------CORTE H ACTIVAR SIERRA MOVER TH Y CORTAR-----*/
void corteH2() {
digitalWrite(releP, condicionV()); //activar releP
condicion:
if (condicionV() == LOW) { // si falla el sistema neumatico
sensorPP = digitalRead(sensorP);
if (sensorPP == HIGH || sensorPP == 1) {
lcd.clear();
delay(200);
lcd.setCursor(2, 1), lcd.print("ERROR EN SISTEMA"); //indicar error
lcd.setCursor(2, 2), lcd.print(" NEUMATICO"); //indicar error
delay(800);
goto condicion;
}

}
lcd.clear();
lcd.setCursor(3, 1), lcd.print(" CV:");
lcd.setCursor(3, 2), lcd.print(" TH:");
lcd.setCursor(9, 2), lcd.print(posth);
lcd.setCursor(9, 1), lcd.print(poscv);
//delay(4000);
lcd.setCursor(4, 3), lcd.print("SIERRA-H-ON "); //indicar que se activa la sierra
digitalWrite(releH, LOW); //activar releH

Serial2.print("r");//enviar dato por serial2 al wifi para indicar en la pagina que esta activo el releh
if (thactivo == 1) { //variable para sacar el Th la primera vez y luego en 1
pasos = ((thir) / unionFB3.datoF3) * 1000; //formula para obtener los pasos
}
if (thactivo == 0) { //variable para sacar el Th la primera vez en 0
thactivo = 1;
pasos = ((salir) / unionFB3.datoF3) * 1000; //formula para obtener los pasos
}

lcd.setCursor(4, 0), lcd.print("MOVIENDO-TH "); //indicar en la lcd el movimiento de th


ptvrd = round(pasos); //redondear pasos
carroTH.setCurrentPosition(ptvrd);//setear posicion actual en la libreria y mover hasta cero

ff1:
if (carroTH.currentPosition() == 0) { //mover th mientras la posicion no sea igual a 0
carroTH.stop();//parar th
goto ff2;//ir a siguiente etiqueta
}

carroTH.moveTo(0);//mover th hasta cero


carroTH.run();//mover
goto ff1;//volver la etiqueta

ff2:
posth = posth + (unionFB3.datoF3 * pasos) / 1000; //modificar posicion de th

delay(100);
Serial3.print("C");//enviar dato a arduino A por serial3 que ya se saco el th y se encendio la sierra
Serial.println(" ");
delay(100);

lcd.setCursor(4, 0); lcd.print("ESPERANDO-CP>"); //indicar en la lcd que se espera el moviemineto de


cp

ok2:
//esperar dato por serial
delay(100);
while (Serial3.available() > 0) { //cuando reciba dato por serial
charN = Serial3.read(); //guardar dato en un char
segmentacion = true;//activar condicional posteriol
}

if (segmentacion == true) {
dt = data;
if (charN == 'B') { //si el dato recibido es B entonces apagar releH e ir a siguiente funcion
dt = " ";
data = " ";
delay(100);
digitalWrite(releH, HIGH); //apagar releH
Serial2.print("s");//enviar dato a la pagina que el rele esta desactivado
lcd.setCursor(4, 3), lcd.print("SIERRA-H-OFF"); //indicar en la lcd que el rele esta desactivado
charN = ' ';
segmentacion = false;
corteH3();//ir a siguiente funcion
}
segmentacion = false;
}
goto ok2;//volver a etiqueta
corteH2();
}
/*------CORTE H REGRESAR TH-----*/
void corteH3() {

lcd.setCursor(4, 0), lcd.print("REGRESANDO-TH"); //indicar en la lcd que se esta regresando th


pasos = ((thir) / unionFB3.datoF3) * 1000; //obtener pasos
ptvrd = round(pasos); //redondear pasos
carroTH.setCurrentPosition(0);//setear posicion del th
ff1:
if (carroTH.currentPosition() == ptvrd) { //si la posicion actual no es igual a los pasos mover th si es
igual parar th
carroTH.stop();//parar th
goto ff2;//ir a siguiente etiqueta
}

carroTH.moveTo(ptvrd);//mover th a la posicion
carroTH.run();//mover
goto ff1;

ff2:
posth = posth - (unionFB3.datoF3 * pasos) / 1000; //modificar variable de posicion
lcd.setCursor(12, 2), lcd.print(posth); //imprimir variable de poscion
//enviar valores de posicion a la web a traves del wifi por el serial2
Serial2.print(":"), Serial2.print(poscv), Serial2.print(":"), Serial2.print(posth), Serial2.print(":");
lcd.clear(); //limpiar lcd
delay(100);
Serial3.print("D");//enviar dato que ya se regreso el th
Serial.println(" ");
delay(100);
recordar = poscv;
loop();//ir al incio
}
/*------CORTE H -PROLIJO- CONFIGURAR PASOS-----*/
void corteH_prolijo() {
//configurar parametros de velocidad y aceleracion de carro CV
carroCV.setMaxSpeed(450.0);
carroCV.setAcceleration(50.0);
carroCV.setSpeed(15);
lcd.setCursor(4, 0), lcd.print("MOVIENDO-CV "); //indicar que se esta movendo cv
//enviar valores de posicion a la web a traves del wifi por el serial2
Serial2.print(":"), Serial2.print(poscv), Serial2.print(":"), Serial2.print(posth), Serial2.print(":");
Serial3.print("Y");//enviar dato a arduinoA que ya se inicio el corte H prolijo
Serial.print(" ");

if (poscv > (res)) { //si la posicion atual es mayor al valor ingresado


pasos = ((poscv - res) / unionFB2.datoF2) * 1000; //formula para obtener los pasos
pasosround = round(pasos); //redondear pasos
carroCV.setCurrentPosition(0); //setear valor de posicion de cv en la libreria
corteHD_prolijo();//ir a funcion para bajar cv
}

if (poscv < (res)) { //si la posicion actual es menor al valor ingresado


pasos = ((res - poscv) / unionFB2.datoF2) * 1000; //formula para obtener los pasos
pasosround = round(pasos); //redondear pasos
carroCV.setCurrentPosition(pasosround);//setear valor en la posicion para mover hasta 0 en la
libreria y subir cv
corteHU_prolijo();//ir a funcion para subir cv
}
if (poscv == res) { //si los valores son iguales saltar funcion
cvcorte_prolijo(); //ir a siguiente funcion
}
corteH_prolijo(); //volver a funcion
}
/*------CORTE H -PROLIJO- SUBIR CV-----*/
void corteHU_prolijo() {

if (carroCV.currentPosition() <= 0) { //cuando sea igual o menor que 0


if (t2 == 1) {
poscv = poscv + (unionFB2.datoF2 * pasos) / 1000; //formula para obtener pasos con t2=1
}
if (t2 == 0) {
poscv = poscv - resta + (unionFB2.datoF2 * pasos) / 1000; //formula para obtener pasos con t2=0
}
//mostrar valor en la lcd
lcd.setCursor(3, 1), lcd.print(" CV:");
lcd.setCursor(3, 2), lcd.print(" TH:");
lcd.setCursor(9, 2), lcd.print(posth);
lcd.setCursor(9, 1), lcd.print(poscv);
//enviar valores de posicion a la web a traves del wifi por el serial2
Serial2.print(":"), Serial2.print(poscv), Serial2.print(":"), Serial2.print(posth), Serial2.print(":");
carroCV.stop();//para cv
cvcorte_prolijo();//ir a siguiente funcion
}

carroCV.moveTo(0); //mover hasta cero en la libreria para mover hacia en la posicion en el driver
carroCV.run();//mover
corteHU_prolijo();//volver a la posicion
}
/*------CORTE H -PROLIJO- BAJAR CV-----*/
void corteHD_prolijo() {

if (carroCV.currentPosition() >= pasosround) { //cuando la posicion actual sea mayor o igual a los
pasos obtenidos
if (t2 == 1) {
poscv = poscv - (unionFB2.datoF2 * pasos) / 1000; //formula para obtener pasos con t2=1
}
if (t2 == 0) {
poscv = poscv - resta - (unionFB2.datoF2 * pasos) / 1000; //formula para obtener pasos con t2=0
}
//mostrar valores en lcd
lcd.setCursor(3, 1), lcd.print(" CV:");
lcd.setCursor(9, 1), lcd.print(poscv);
lcd.setCursor(3, 2), lcd.print(" TH:");
lcd.setCursor(9, 2), lcd.print(posth);
//enviar valores de posicion a la web a traves del wifi por el serial2
Serial2.print(":"), Serial2.print(poscv), Serial2.print(":"), Serial2.print(posth), Serial2.print(":");
carroCV.stop();
cvcorte_prolijo();
}
carroCV.moveTo(pasosround); //mover hacia laposicion para bajar cv hasta los pasos indicados
carroCV.run();//mover
corteHD_prolijo();//volver a funcion
}
/*------CORTE H -PROLIJO- CONFIRMAR MOVIEMIENTO CORRECTO-----*/
void cvcorte_prolijo() {
// CUANDO T2=0 SIGNIFICA QUE ES EL PRIMER MOVIMIENTO LUEGO DE HABER ALIMENTADO EL
SISTEMA
// POR LO TANTO E LE SUMA UN VALOR PREVIAMENTE ESTABLECIDO PERO SOLO LA PRIMERA VEZ
// LUEGO DE ESO SE PONE T2 EN 1 Y NO SE LE RESTA EL VALOR POR ESO ESTAN LAS 2 CONDICIONES
CON T2 EN 0 Y 1
if (t2 == 1) {
if (((poscv) > res - 1) && ((pos) < res + 1)) { //si la posicion cv es igual a la ingresada ir a sig funcion
carroCV.stop();
delay(100); corteHH_prolijo(); //ir a siguiente funcion
}
}
if (t2 == 0) {
t2 = 1;
if (((poscv + resta) > res - 1) && ((pos + resta) < res + 1)) { //si la posicion cv es igual a la ingresada ir
a sig funcion
carroCV.stop();
delay(100); corteHH_prolijo();//ir a siguiente funcion
}
}
cvcorte_prolijo();//volver a funcion
}
/*------CORTE H -PROLIJO- ESPERAR CP REGRESE-----*/
void corteHH_prolijo() {

lcd.setCursor(4, 0); lcd.print("ESPERANDO-CP<"); //indicar en la lcd que se esta esperando finalizar el


movimiento del cp
delay(100);
while (Serial3.available() > 0) { //cuando llegue un dato por serial3 de arduino A
charN = Serial3.read(); //leer dato tipo char
segmentacion = true;//activar el siguiente condicional
}

if (segmentacion == true) {
dt = data;
if (charN == 'I') { //si el dato recibido es igual a I ir a siguiente funcion
dt = " ";
data = " ";
delay(100);
charN = ' ';
segmentacion = false;
corteH2_prolijo(); //ir a siguiente funcion
}
}
corteHH_prolijo();//volver a funcion
}
/*------CORTE H -PROLIJO- ACTIVAR SIERRA MOVER TH Y CORTAR-----*/
void corteH2_prolijo() {
digitalWrite(releP, condicionV()); //activar releP
condicion:
if (condicionV() == LOW) { // si falla el sistema neumatico
sensorPP = digitalRead(sensorP);
if (sensorPP == HIGH || sensorPP == 1) {
lcd.clear();
delay(200);
lcd.setCursor(2, 1), lcd.print("ERROR EN SISTEMA"); //indicar error
lcd.setCursor(2, 2), lcd.print(" NEUMATICO"); //indicar error
delay(800);
goto condicion;
}

}
lcd.clear();
lcd.setCursor(3, 1), lcd.print(" CV:");
lcd.setCursor(3, 2), lcd.print(" TH:");
lcd.setCursor(9, 2), lcd.print(posth);
lcd.setCursor(9, 1), lcd.print(poscv);
//delay(4000);
lcd.setCursor(4, 3), lcd.print("SIERRA-H-ON "); //indicar que se activa la sierra
digitalWrite(releH, LOW); //activar releH
Serial2.print("r");//enviar dato por serial2 al wifi para indicar en la pagina que esta activo el releh

if (thactivo == 1) { //variable para sacar el Th la primera vez y luego en 1


pasos = ((thir - prolijoh) / unionFB3.datoF3) * 1000; //formula para obtener los pasos
}
if (thactivo == 0) { //variable para sacar el Th la primera vez en 0
thactivo = 1;
pasos = ((salir - prolijoh) / unionFB3.datoF3) * 1000; //formula para obtener los pasos
}

lcd.setCursor(4, 0), lcd.print("MOVIENDO-TH "); //indicar en la lcd el movimiento de th


ptvrd = round(pasos); //redondear pasos
carroTH.setCurrentPosition(ptvrd);//setear posicion actual en la libreria y mover hasta cero

ff1:
if (carroTH.currentPosition() == 0) { //mover th mientras la posicion no sea igual a 0
carroTH.stop();//parar th
goto ff2;//ir a siguiente etiqueta
}
carroTH.moveTo(0);//mover th hasta cero
carroTH.run();//mover
goto ff1;//volver la etiqueta

ff2:
posth = posth + (unionFB3.datoF3 * pasos) / 1000; //modificar posicion de th

delay(100);
Serial3.print("R");//enviar dato a arduino A por serial3 que ya se saco el th y se encendio la sierra
Serial.println(" ");
delay(100);

lcd.setCursor(4, 0); lcd.print("ESPERANDO-CP>"); //indicar en la lcd que se espera el moviemineto de


cp
ok2:
//esperar dato por serial
delay(100);
while (Serial3.available() > 0) { //cuando reciba dato por serial
charN = Serial3.read(); //guardar dato en un char
segmentacion = true;//activar condicional posteriol
}

if (segmentacion == true) {
dt = data;
if (charN == 'Q') { //si el dato recibido es B entonces apagar releH e ir a siguiente funcion
dt = " ";
data = " ";
delay(100);
digitalWrite(releH, HIGH); //apagar releH
Serial2.print("s");//enviar dato a la pagina que el rele esta desactivado
lcd.setCursor(4, 3), lcd.print("SIERRA-H-OFF"); //indicar en la lcd que el rele esta desactivado
charN = ' ';
segmentacion = false;
corteH3_prolijo();//ir a siguiente funcion
}
segmentacion = false;
}

goto ok2; //volver a etiqueta


corteH2_prolijo();
}
/*------CORTE H -PROLIJO- REGRESAR TH-----*/
void corteH3_prolijo() {

lcd.setCursor(4, 0), lcd.print("REGRESANDO-TH"); //indicar en la lcd que se esta regresando th


pasos = ((thir - prolijoh) / unionFB3.datoF3) * 1000; //obtener pasos
ptvrd = round(pasos); //redondear pasos
carroTH.setCurrentPosition(0);//setear posicion del th

ff1:
if (carroTH.currentPosition() == ptvrd) { //si la posicion actual no es igual a los pasos mover th si es
igual parar th
carroTH.stop();//parar th
goto ff2;//ir a siguiente etiqueta
}
carroTH.moveTo(ptvrd);//mover th a la posicion
carroTH.run();//mover
goto ff1;
ff2:
posth = posth - (unionFB3.datoF3 * pasos) / 1000; //modificar variable de posicion
lcd.setCursor(12, 2), lcd.print(posth); //imprimir variable de poscion
//enviar valores de posicion a la web a traves del wifi por el serial2
Serial2.print(":"), Serial2.print(poscv), Serial2.print(":"), Serial2.print(posth), Serial2.print(":");
lcd.clear();//limpiar lcd
delay(100);
Serial3.print("F");//enviar dato que ya se regreso el th
Serial.println(" ");
delay(500);
cvcorte_prolijo2();//ir al Siguiente pase
}
/*------CORTE H -PROLIJO#2#- CONFIRMAR SIGUENTE PASE-----*/
void cvcorte_prolijo2() {
Serial3.print("J");//enviar dato al arduino A para continuar con el siguiente pase
Serial.print(" ");
delay(100);
corteHH_prolijo2();//ir a siguiente funcion
}
/*------CORTE H -PROLIJO#2#- ESPERAR CP REGRESE-----*/
void corteHH_prolijo2() {
lcd.setCursor(4, 0); lcd.print("ESPERANDO-CP<"); //indicar en la lcd que se esta esperando finalizar el
movimiento del cp
delay(100);
while (Serial3.available() > 0) { //cuando llegue un dato por serial3 de arduino A
charN = Serial3.read(); //leer dato tipo char
segmentacion = true;//activar el siguiente condicional
}

if (segmentacion == true) {
dt = data;
if (charN == 'L') { //si el dato recibido es igual a L ir a siguiente funcion
Serial.println("ok");
dt = " ";
data = " ";
delay(100);
charN = ' ';
segmentacion = false;
corteH2_prolijo2();//ir a siguiente funcion
}
}
corteHH_prolijo2();//volver a funcion
}
/*------CORTE H -PROLIJO#2#- ACTIVAR SIERRA MOVER TH Y CORTAR-----*/
void corteH2_prolijo2() {
digitalWrite(releP, condicionV()); //activar releP
condicion:
if (condicionV() == LOW) {
sensorPP = digitalRead(sensorP);
if (sensorPP == HIGH || sensorPP == 1) { // si falla el sistema neumatico
lcd.clear();
delay(200);
lcd.setCursor(2, 1), lcd.print("ERROR EN SISTEMA"); //indicar error ERROR EN SISTEMA
lcd.setCursor(2, 2), lcd.print(" NEUMATICO"); //indicar error ERROR EN SISTEMA
delay(800);
goto condicion;
}

}
lcd.clear();
lcd.setCursor(3, 1), lcd.print(" CV:");
lcd.setCursor(3, 2), lcd.print(" TH:");
lcd.setCursor(9, 2), lcd.print(posth);
lcd.setCursor(9, 1), lcd.print(poscv);
//delay(4000);
lcd.setCursor(4, 3), lcd.print("SIERRA-H-ON "); //indicar que se activa la sierra
digitalWrite(releH, LOW); //activar releH
Serial2.print("r");//enviar dato por serial2 al wifi para indicar en la pagina que esta activo el releh
pasos = ((thir) / unionFB3.datoF3) * 1000; //obtener pasos

lcd.setCursor(4, 0), lcd.print("MOVIENDO-TH "); //indicar en la lcd el movimiento de th


ptvrd = round(pasos); //redondear pasos
carroTH.setCurrentPosition(ptvrd);//setear posicion actual en la libreria y mover hasta cero

ff1:
if (carroTH.currentPosition() == 0) { //mover th mientras la posicion no sea igual a 0
carroTH.stop();//parar th
goto ff2;//ir a siguiente etiqueta
}

carroTH.moveTo(0);//mover th hasta cero


carroTH.run();//mover
goto ff1;//volver la etiqueta

ff2:
posth = posth + (unionFB3.datoF3 * pasos) / 1000; //modificar posicion de th

delay(100);
Serial3.print("S");//enviar dato a arduino A por serial3 que ya se saco el th y se encendio la sierra
Serial.println(" ");
delay(100);

lcd.setCursor(4, 0); lcd.print("ESPERANDO-CP>"); //indicar en la lcd que se espera el moviemineto de


cp

ok2:
//esperar dato por serial
delay(100);
while (Serial3.available() > 0) { //cuando reciba dato por serial
charN = Serial3.read(); //guardar dato en un char
segmentacion = true;//activar condicional posteriol
}

if (segmentacion == true) {
dt = data;
if (charN == 'P') { //si el dato recibido es P entonces apagar releH e ir a siguiente funcion
dt = " ";
data = " ";
delay(100);
digitalWrite(releH, HIGH); //apagar releH
Serial2.print("s");//enviar dato a la pagina que el rele esta desactivado
lcd.setCursor(4, 3), lcd.print("SIERRA-H-OFF"); //indicar en la lcd que el rele esta desactivado
charN = ' ';
segmentacion = false;
corteH3_prolijo2();//ir a siguiente funcion
}
segmentacion = false;
}
goto ok2;//volver a etiqueta
corteH2_prolijo2();
}
/*------CORTE H -PROLIJO#2#- REGRESAR TH FIN DEL CORTE-----*/
void corteH3_prolijo2() {

lcd.setCursor(4, 0), lcd.print("REGRESANDO-TH"); //indicar en la lcd que se esta regresando th


pasos = ((thir) / unionFB3.datoF3) * 1000; //obtener pasos
ptvrd = round(pasos); //redondear pasos
carroTH.setCurrentPosition(0);//setear posicion del th

ff1:
if (carroTH.currentPosition() == ptvrd) { //si la posicion actual no es igual a los pasos mover th si es
igual parar th
carroTH.stop();//parar th
goto ff2;//ir a siguiente etiqueta
}
carroTH.moveTo(ptvrd);//mover th a la posicion
carroTH.run();//mover
goto ff1;
ff2:
posth = posth - (unionFB3.datoF3 * pasos) / 1000; //modificar variable de posicion
lcd.setCursor(12, 2), lcd.print(posth); //imprimir variable de poscion
//enviar valores de posicion a la web a traves del wifi por el serial2
Serial2.print(":"), Serial2.print(poscv), Serial2.print(":"), Serial2.print(posth), Serial2.print(":");
lcd.clear();//limpiar lcd
delay(100);
Serial3.print("X");//enviar dato que ya se regreso el th
Serial.println(" ");
delay(100);
recordar = poscv;
loop();//ir al incio

}
/*------PROLIJO H-----*/
void thprolijo() {
//ESTA CALIBRACION ES PARA EDITAR EL VALOR DE Prolijo TH
lcd.setCursor(0, 0);
lcd.print("actualmente:");
lcd.print(prolijoh);//mostrar valor actual del valor
lcd.setCursor(0, 1);
lcd.print("PROLIJO H(mm):");
if (keypad.getKeys()) { /*INGRESO DE TECLADO LA MISMA LOGICA*/
for (int i = 0; i < LIST_MAX; i++) {
switch (keypad.key[i].kstate) {
case PRESSED:
if ( keypad.key[i].stateChanged ) {
char key = keypad.key[i].kchar;
if (key == 'C') { //volver al loop
delay(300);
lcd.clear();
loop();
}
if (key == '#') { //ingresar coma
delay(300);
counter1 = counter1 + 5;
rt1 = counter1 + 4;
lcd.setCursor(rt1, 2);
lcd.print(",");
}

if ((key != '*') && (key != 'B') && (key != '#') && (key != 'A') && (key != 'C') && (key != 'K')) {
//agregar digito a la lcd y mover cursor
lcd.setCursor(0, 1);
counter1 = counter1 + 1;
if (counter1 > 6) {
rt1 = counter1 + 4;
} else {
rt1 = counter1 + 8;
}
lcd.setCursor(rt1, 2);
lcd.print(keypad.key[i].kchar);
lcd.setCursor(rt1 + 1, 2);
}
if ((key != '*') && (key != 'B') && (key != '#') && (key != 'A') && (key != 'C') && (key != 'K')) {
//agrupar digitos ingresados(decena centena)
delay(300);
if (counter1 == 2) { //unidad
char hy = keypad.key[i].kchar;
p11 = char(hy) - 48;
if (p11 < 0) {
p11 = 0;
}
res1 = p11;
}
if (counter1 == 3) { //decena
p22 = keypad.key[i].kchar - 48;
if (p22 < 0) {
p22 = 0;
}
res1 = (p11 * 10) + p22;
}
if (counter1 == 4) { //centena
p33 = keypad.key[i].kchar - 48;
if (p33 < 0) {
p33 = 0;
}
counter1 = 1;
y11 = 1;
res1 = (p11 * 100) + (p22 * 10) + p33;
}
if (counter1 > 7) { //decimal
c11 = keypad.key[i].kchar - 48;
resc1 = (c11 / 10);
counter1 = 1;
}

calib4 = res1 + resc1; //resultado total


}

if (key == 'K') { //cuando el digito del teclado es 'K' guarda el nuevo valor ingreado fraccionado
en la nueva eeprom
delay(300);
unionFB7.datoF7 = calib4;//guardar valor float en el arreglo de la eeprom
EEPROM.write(100, unionFB7.datoB7[0]);
EEPROM.write(101, unionFB7.datoB7[1]);
EEPROM.write(102, unionFB7.datoB7[2]);
EEPROM.write(103, unionFB7.datoB7[3]);
delay(60);
//leer datos en de la eeprom y guardar en la variable
unionFB7.datoB7[0] = EEPROM.read(100);
unionFB7.datoB7[1] = EEPROM.read(101);
unionFB7.datoB7[2] = EEPROM.read(102);
unionFB7.datoB7[3] = EEPROM.read(103);
counter = 1;
prolijoh = unionFB7.datoF7; //guardar valor leido en varibale
lcd.clear();//limpiar lcd
loop();//volver al inicio
}
if (key == '*') { //borrar un digito y limpiar lcd
if (counter1 > 6) {
rt = counter1 + 5;
lcd.setCursor(rt, 2);
lcd.print(" ");
counter1 = counter1 - 3;
} else {
rt = counter1 + 8;
lcd.setCursor(rt, 2);
lcd.print(" ");
}
if (counter1 > 1) {
counter1 = counter1 - 1;
} else {
lcd.setCursor(rt + 1, 2);
lcd.print(" ");
}
}
break;
}
}
}
}
thprolijo();//volver a la funcion
}
/*------AJUSTAR CV-----*/
void ajustarcv() {
//agregar valor de una variable sin necesidad de calibrar algun motor simplemente se agrega el
valor y este se guarda en la eeprom
lcd.setCursor(0, 0);
lcd.print("actualmente:");
lcd.print(resta);//mostrar valor actual del valor
lcd.setCursor(0, 1);
lcd.print("AJUSTAR CV(-mm):");

if (keypad.getKeys()) { /*INGRESO DE TECLADO LA MISMA LOGICA*/


for (int i = 0; i < LIST_MAX; i++) {
switch (keypad.key[i].kstate) {
case PRESSED:
if ( keypad.key[i].stateChanged ) {
char key = keypad.key[i].kchar;
if (key == 'C') { //volver al inicio
delay(300);
lcd.clear();
loop();
}
if (key == '#') { //agregar coma
delay(300);
counter1 = counter1 + 5;
rt1 = counter1 + 4;
lcd.setCursor(rt1, 2);
lcd.print(",");
}

if ((key != '*') && (key != 'B') && (key != '#') && (key != 'A') && (key != 'C') && (key != 'K')) {
//agregar digito a la lcd y mover cursor
lcd.setCursor(0, 1);
counter1 = counter1 + 1;
if (counter1 > 6) {
rt1 = counter1 + 4;
} else {
rt1 = counter1 + 8;
}
lcd.setCursor(rt1, 2);
lcd.print(keypad.key[i].kchar);
lcd.setCursor(rt1 + 1, 2);
}
if ((key != '*') && (key != 'B') && (key != '#') && (key != 'A') && (key != 'C') && (key != 'K')) {
//agrupar digitos ingresados(decena centena)
delay(300);
if (counter1 == 2) { //unidad
char hy = keypad.key[i].kchar; //valor leido del teclado en char
p11 = char(hy) - 48; //restar 48 de casting de char a int
if (p11 < 0) {
p11 = 0;
}
res1 = p11;
}
if (counter1 == 3) { //decena
p22 = keypad.key[i].kchar - 48;
if (p22 < 0) {
p22 = 0;
}
res1 = (p11 * 10) + p22;
}
if (counter1 == 4) { //centena
p33 = keypad.key[i].kchar - 48;
if (p33 < 0) {
p33 = 0;
}
counter1 = 1;
y11 = 1;
res1 = (p11 * 100) + (p22 * 10) + p33;
}
if (counter1 > 7) { //decimal
c11 = keypad.key[i].kchar - 48;
resc1 = (c11 / 10);
counter1 = 1;
}
calib4 = res1 + resc1; //suma total de valor entero y decimal
}
if (key == 'K') { //cuando el digito del teclado es 'K' guarda el nuevo valor ingreado fraccionado
en la nueva eeprom
delay(300);
unionFB4.datoF4 = calib4;
EEPROM.write(80, unionFB4.datoB4[0]);
EEPROM.write(81, unionFB4.datoB4[1]);
EEPROM.write(82, unionFB4.datoB4[2]);
EEPROM.write(83, unionFB4.datoB4[3]);
delay(60);
//leer datos en de la eeprom y guardar en la variable
unionFB4.datoB4[0] = EEPROM.read(80);
unionFB4.datoB4[1] = EEPROM.read(81);
unionFB4.datoB4[2] = EEPROM.read(82);
unionFB4.datoB4[3] = EEPROM.read(83);
counter = 1;
resta = -unionFB4.datoF4; //guardar valor leido en varibale
lcd.clear();//limpiar lcd
loop();//volver al inicio
}

if (key == '*') { //borrar un digito y limpiar lcd


if (counter1 > 6) {
rt = counter1 + 5;
lcd.setCursor(rt, 2);
lcd.print(" ");
counter1 = counter1 - 3;
} else {
rt = counter1 + 8;
lcd.setCursor(rt, 2);
lcd.print(" ");
}
if (counter1 > 1) {
counter1 = counter1 - 1;
} else {
lcd.setCursor(rt + 1, 2);
lcd.print(" ");
}
}
break;
}
}
}
}
ajustarcv();//volver a la funcion
}
/*------AJUSTAR TH SALIR-----*/
void thsalir() {
//agregar valor de una variable sin necesidad de calibrar algun motor simplemente se agrega el
valor y este se guarda en la eeprom
lcd.setCursor(0, 0);
lcd.print("actualmente:");
lcd.print(unionFB5.datoF5);//mostrar valor actual del valor
lcd.setCursor(0, 1);
lcd.print("AJUSTAR SALIR(mm):");

if (keypad.getKeys()) { /*INGRESO DE TECLADO LA MISMA LOGICA*/


for (int i = 0; i < LIST_MAX; i++) {
switch (keypad.key[i].kstate) {
case PRESSED:
if ( keypad.key[i].stateChanged ) {
char key = keypad.key[i].kchar;
if (key == 'C') { //volver al inicio
delay(300);
lcd.clear();
menu2();
}
if (key == '#') { //agregar coma
delay(300);
counter1 = counter1 + 5;
rt1 = counter1 + 4;
lcd.setCursor(rt1, 2);
lcd.print(",");
}

if ((key != '*') && (key != 'B') && (key != '#') && (key != 'A') && (key != 'C') && (key != 'K')) {
//agregar digito a la lcd y mover cursor
lcd.setCursor(0, 1);
counter1 = counter1 + 1;
if (counter1 > 6) {
rt1 = counter1 + 4;
} else {
rt1 = counter1 + 8;
}
lcd.setCursor(rt1, 2);
lcd.print(keypad.key[i].kchar);
lcd.setCursor(rt1 + 1, 2);
}
if ((key != '*') && (key != 'B') && (key != '#') && (key != 'A') && (key != 'C') && (key != 'K')) {
//agrupar digitos ingresados(decena centena)
delay(300);
if (counter1 == 2) { //unidad
char hy = keypad.key[i].kchar;
p11 = char(hy) - 48;
if (p11 < 0) {
p11 = 0;
}
res1 = p11;
}
if (counter1 == 3) { //decena
p22 = keypad.key[i].kchar - 48;
if (p22 < 0) {
p22 = 0;
}
res1 = (p11 * 10) + p22;
}
if (counter1 == 4) { //centena
p33 = keypad.key[i].kchar - 48;
if (p33 < 0) {
p33 = 0;
}
counter1 = 1;
y11 = 1;
res1 = (p11 * 100) + (p22 * 10) + p33;
}
if (counter1 > 7) { //decimal
c11 = keypad.key[i].kchar - 48;
resc1 = (c11 / 10);
}
salir = res1 + resc1; //suma total de valor entero y decimal
}
if (key == 'K') { //cuando el digito del teclado es 'K' guarda el nuevo valor ingreado fraccionado
en la nueva eeprom
delay(300);
unionFB5.datoF5 = salir;//guardar valor en la varibale para fraccionar en la eeprom
EEPROM.write(90, unionFB5.datoB5[0]);
EEPROM.write(91, unionFB5.datoB5[1]);
EEPROM.write(92, unionFB5.datoB5[2]);
EEPROM.write(93, unionFB5.datoB5[3]);
delay(60);
//leer datos en de la eeprom y guardar en la variable
unionFB5.datoB5[0] = EEPROM.read(90);
unionFB5.datoB5[1] = EEPROM.read(91);
unionFB5.datoB5[2] = EEPROM.read(92);
unionFB5.datoB5[3] = EEPROM.read(93);
counter = 1;
salir = unionFB5.datoF5; //guardar valor leido en varibale
thir = salir - 22; //calibrar otra variable dependiente de la modificada
lcd.clear();//limpiar lcd
counter1 = 1;
menu2(); //volver al menu
}
if (key == '*') { //borrar un digito y limpiar lcd
if (counter1 > 6) {
rt = counter1 + 5;
lcd.setCursor(rt, 2);
lcd.print(" ");
counter1 = counter1 - 3;
} else {
rt = counter1 + 8;
lcd.setCursor(rt, 2);
lcd.print(" ");
}
if (counter1 > 1) {
counter1 = counter1 - 1;
} else {
lcd.setCursor(rt + 1, 2);
lcd.print(" ");
}
}
break;
}
}
}
}
thsalir();//volver a la funcion
}
/*------AJUSTAR TH AJUSTE 0-----*/
void tvajuste0() {
//agregar valor de una variable sin necesidad de calibrar algun motor simplemente se agrega el
valor y este se guarda en la eeprom
lcd.setCursor(0, 0);
lcd.print("actualmente:");
lcd.print(unionFB6.datoF6);//mostrar valor actual
lcd.setCursor(0, 1);
lcd.print("AJUSTAR 0(mm):");

if (keypad.getKeys()) { /*INGRESO DE TECLADO LA MISMA LOGICA*/


for (int i = 0; i < LIST_MAX; i++) {
switch (keypad.key[i].kstate) {
case PRESSED:
if ( keypad.key[i].stateChanged ) {
char key = keypad.key[i].kchar;
if (key == 'C') { //volver al menu
delay(300);
lcd.clear();
menu2();
}
if (key == '#') { //agregar coma
delay(300);
counter1 = counter1 + 5;
rt1 = counter1 + 4;
lcd.setCursor(rt1, 2);
lcd.print(",");
}

if ((key != '*') && (key != 'B') && (key != '#') && (key != 'A') && (key != 'C') && (key != 'K')) {
//agregar digito a la lcd y mover cursor
lcd.setCursor(0, 1);
counter1 = counter1 + 1;
if (counter1 > 6) {
rt1 = counter1 + 4;
} else {
rt1 = counter1 + 8;
}
lcd.setCursor(rt1, 2);
lcd.print(keypad.key[i].kchar);
lcd.setCursor(rt1 + 1, 2);
}
if ((key != '*') && (key != 'B') && (key != '#') && (key != 'A') && (key != 'C') && (key != 'K')) {
//agrupar digitos ingresados(decena centena)
delay(300);
if (counter1 == 2) { //unidad
char hy = keypad.key[i].kchar;
p11 = char(hy) - 48;
if (p11 < 0) {
p11 = 0;
}
res1 = p11;
}
if (counter1 == 3) { //decena
p22 = keypad.key[i].kchar - 48;
if (p22 < 0) {
p22 = 0;
}
res1 = (p11 * 10) + p22;
}
if (counter1 == 4) { //centena
p33 = keypad.key[i].kchar - 48;
if (p33 < 0) {
p33 = 0;
}
counter1 = 1;
y11 = 1;
res1 = (p11 * 100) + (p22 * 10) + p33;
}
if (counter1 > 7) { //decimal
c11 = keypad.key[i].kchar - 48;
resc1 = (c11 / 10);
}
cero = res1 + resc1; //suma total de valor entero y decimal
}
if (key == 'K') { //cuando el digito del teclado es 'K' guarda el nuevo valor ingreado fraccionado
en la nueva eeprom
delay(300);
unionFB6.datoF6 = cero;//guardar valor en el arreglo para guardar en la eeprom
EEPROM.write(94, unionFB6.datoB6[0]);
EEPROM.write(95, unionFB6.datoB6[1]);
EEPROM.write(96, unionFB6.datoB6[2]);
EEPROM.write(97, unionFB6.datoB6[3]);
delay(60);
//leer datos en de la eeprom y guardar en la variable
unionFB6.datoB6[0] = EEPROM.read(94);
unionFB6.datoB6[1] = EEPROM.read(95);
unionFB6.datoB6[2] = EEPROM.read(96);
unionFB6.datoB6[3] = EEPROM.read(97);
counter = 1;
cero = unionFB6.datoF6; //guardar valor leido en varibale
lcd.clear();//limpiar lcd
counter1 = 1;
menu2();//volver al menu
}

if (key == '*') { //borrar un digito y limpiar lcd


if (counter1 > 6) {
rt = counter1 + 5;
lcd.setCursor(rt, 2);
lcd.print(" ");
counter1 = counter1 - 3;
} else {
rt = counter1 + 8;
lcd.setCursor(rt, 2);
lcd.print(" ");
}
if (counter1 > 1) {
counter1 = counter1 - 1;
} else {
lcd.setCursor(rt + 1, 2);
lcd.print(" ");
}
}
break;
}
}
}
}

tvajuste0();//volver a funcion
}
/*------AJUSTAR PROFUNDIDAD TH-----*/
void profth() {
if (ptv1 == 1) { //si la variable es 1 la profundidad th esta activada
lcd.setCursor(3, 3);
lcd.print("PROF. TH ON ");//mostrar lcd que esta activada
} else if (ptv1 == 0) { //sino esta desactivada
lcd.setCursor(3, 3);
lcd.print("PROF. TH OFF");//mostrar lcd que esta desactivada
}
//agregar valor de una variable sin necesidad de calibrar algun motor simplemente se agrega el
valor y este se guarda en la eeprom
lcd.setCursor(0, 0);
lcd.print("actualmente:");
lcd.print(profun);//mostrar valor actual
lcd.setCursor(0, 1);
lcd.print("PROFUNDIDAD(+/-mm):");

if (keypad.getKeys()) { /*INGRESO DE TECLADO LA MISMA LOGICA*/


for (int i = 0; i < LIST_MAX; i++) {
switch (keypad.key[i].kstate) {
case PRESSED:
if ( keypad.key[i].stateChanged ) {
char key = keypad.key[i].kchar;
if (key == 'C') { //volver al menu
delay(300);
lcd.clear();
menu2();
}
if (key == 'A') { //cambiar de estado la variable de activacion de profundidad
delay(100);
if (ptv1 == 1) {
ptv1 = 0;
profth();
}
if (ptv1 == 0) {
ptv1 = 1;
profth();
}
}
if (key == 'B') { //Cambiar de valor la variable negativo en 0 o 1
if (negativo == 0) {
lcd.setCursor(8, 2);
lcd.print("-");
negativo = 1;
profth();
}
if (negativo == 1) {
lcd.setCursor(8, 2);
lcd.print(" ");
negativo = 0;
profth();
}
}
if (key == '#') { //agregar coma
delay(300);
counter1 = counter1 + 5;
rt1 = counter1 + 4;
lcd.setCursor(rt1, 2);
lcd.print(",");
}

if ((key != '*') && (key != 'B') && (key != '#') && (key != 'A') && (key != 'C') && (key != 'K')) {
//agregar digito a la lcd y mover cursor
lcd.setCursor(0, 1);
counter1 = counter1 + 1;
if (counter1 > 6) {
rt1 = counter1 + 4;
} else {
rt1 = counter1 + 8;
}
lcd.setCursor(rt1, 2);
lcd.print(keypad.key[i].kchar);
lcd.setCursor(rt1 + 1, 2);
}
if ((key != '*') && (key != 'B') && (key != '#') && (key != 'A') && (key != 'C') && (key != 'K')) {
//agrupar digitos ingresados(decena centena)
delay(300);
if (counter1 == 2) { //unidad
char hy = keypad.key[i].kchar;
p11 = char(hy) - 48;
if (p11 < 0) {
p11 = 0;
}
res1 = p11;
}
if (counter1 == 3) { //decena
p22 = keypad.key[i].kchar - 48;
if (p22 < 0) {
p22 = 0;
}
res1 = (p11 * 10) + p22;
}
if (counter1 == 4) { //centena
p33 = keypad.key[i].kchar - 48;
if (p33 < 0) {
p33 = 0;
}
counter1 = 1;
y11 = 1;
res1 = (p11 * 100) + (p22 * 10) + p33;
}
if (counter1 > 7) { //decimal
c11 = keypad.key[i].kchar - 48;
resc1 = (c11 / 10);
}
profun = res1 + resc1; //suma total de valor entero y decimal
}

if (key == 'K') { //cuando el digito del teclado es 'K' guarda el nuevo valor ingreado
delay(300);
if (ptv1 == 1) { //si ptv1 esta activado
if (negativo == 1) { //si la variable negativo esta en 1
salir = cero + profun; //el resultado de la variable salir sera con esta formula
thir = salir - 22; //formula de thir dependiente dela variable salir
} else { //sino
salir = cero - profun; //el resultado de la variable salir sera con esta formula
thir = salir - 22; //formula de thir dependiente dela variable salir
}
}
if (ptv1 == 0) { //si ptv1 esta activado
salir = unionFB5.datoF5; //la variable salir proviene de la eeprom
thir = salir - 22; //formula de thir dependiente dela variable salir
}
lcd.clear();//limpiar lcd
counter1 = 1; //resetear variable
negativo = 0; //dejar variable en cero
menu2();//volver al menu
}
if (key == '*') { //borrar un digito y limpiar lcd
if (counter1 > 6) {
rt = counter1 + 5;
lcd.setCursor(rt, 2);
lcd.print(" ");
counter1 = counter1 - 3;
} else {
rt = counter1 + 8;
lcd.setCursor(rt, 2);
lcd.print(" ");
}
if (counter1 > 1) {
counter1 = counter1 - 1;
} else {
lcd.setCursor(rt + 1, 2);
lcd.print(" ");
negativo = 0;
}
}
break;
}
}
}
}

profth();//volver a funcion
}

void recordar_th() {
//agregar valor de una variable sin necesidad de calibrar algun motor simplemente se agrega el
valor y este se guarda en la eeprom
lcd.setCursor(0, 0);
lcd.print("actualmente:");
lcd.print(unionFB8.datoF8);//mostrar valor actual del valor
lcd.setCursor(0, 1);
lcd.print("RECORDAR TH(mm):");

if (keypad.getKeys()) { /*INGRESO DE TECLADO LA MISMA LOGICA*/


for (int i = 0; i < LIST_MAX; i++) {
switch (keypad.key[i].kstate) {
case PRESSED:
if ( keypad.key[i].stateChanged ) {
char key = keypad.key[i].kchar;
if (key == 'C') { //volver al inicio
delay(300);
lcd.clear();
menu2();
}
if (key == '#') { //agregar coma
delay(300);
counter1 = counter1 + 5;
rt1 = counter1 + 4;
lcd.setCursor(rt1, 2);
lcd.print(",");
}

if ((key != '*') && (key != 'B') && (key != '#') && (key != 'A') && (key != 'C') && (key != 'K')) {
//agregar digito a la lcd y mover cursor
lcd.setCursor(0, 1);
counter1 = counter1 + 1;
if (counter1 > 6) {
rt1 = counter1 + 4;
} else {
rt1 = counter1 + 8;
}
lcd.setCursor(rt1, 2);
lcd.print(keypad.key[i].kchar);
lcd.setCursor(rt1 + 1, 2);
}
if ((key != '*') && (key != 'B') && (key != '#') && (key != 'A') && (key != 'C') && (key != 'K')) {
//agrupar digitos ingresados(decena centena)
delay(300);
if (counter1 == 2) { //unidad
char hy = keypad.key[i].kchar;
p11 = char(hy) - 48;
if (p11 < 0) {
p11 = 0;
}
res1 = p11;
}
if (counter1 == 3) { //decena
p22 = keypad.key[i].kchar - 48;
if (p22 < 0) {
p22 = 0;
}
res1 = (p11 * 10) + p22;
}
if (counter1 == 4) { //centena
p33 = keypad.key[i].kchar - 48;
if (p33 < 0) {
p33 = 0;
}
counter1 = 1;
y11 = 1;
res1 = (p11 * 100) + (p22 * 10) + p33;
}
if (counter1 > 7) { //decimal
c11 = keypad.key[i].kchar - 48;
resc1 = (c11 / 10);
}
ajuste_recordar = res1 + resc1; //suma total de valor entero y decimal
}
if (key == 'K') { //cuando el digito del teclado es 'K' guarda el nuevo valor ingreado fraccionado
en la nueva eeprom
delay(300);
unionFB8.datoF8 = ajuste_recordar;//guardar valor en la varibale para fraccionar en la
eeprom
EEPROM.write(110, unionFB8.datoB8[0]);
EEPROM.write(111, unionFB8.datoB8[1]);
EEPROM.write(112, unionFB8.datoB8[2]);
EEPROM.write(113, unionFB8.datoB8[3]);
delay(60);
//leer datos en de la eeprom y guardar en la variable
unionFB8.datoB8[0] = EEPROM.read(110);
unionFB8.datoB8[1] = EEPROM.read(111);
unionFB8.datoB8[2] = EEPROM.read(112);
unionFB8.datoB8[3] = EEPROM.read(113);
counter = 1;
ajuste_recordar = unionFB8.datoF8; //guardar valor leido en varibale
lcd.clear();//limpiar lcd
counter1 = 1;
menu2(); //volver al menu
}
if (key == '*') { //borrar un digito y limpiar lcd
if (counter1 > 6) {
rt = counter1 + 5;
lcd.setCursor(rt, 2);
lcd.print(" ");
counter1 = counter1 - 3;
} else {
rt = counter1 + 8;
lcd.setCursor(rt, 2);
lcd.print(" ");
}
if (counter1 > 1) {
counter1 = counter1 - 1;
} else {
lcd.setCursor(rt + 1, 2);
lcd.print(" ");
}
}
break;
}
}
}
}
recordar_th();//volver a funcion
}

You might also like