Hola amigos y gracias por estar ahi.
Al grano, dispongo de dos motores, uno hace que una plataforma se mueva horizontalmente por un husillo y el otro, gire recogiendo hilo, lo que podríamos denominar en su conjunto, como "BOBINADORA.
Lo que me gustaria, es que cuando seleccionas vueltas, por ejemplo 100 o 200 vueltas, y pasas a seleccionar, grosor del hilo y asi sucesivamente hasta completar la demanda de tus preferencias y que la bobinadora empiece a funcionar. tambien querria, que mientras esta bobinando, apareciese en el LCD las vueltas seleccionadas y cada giro que da el motor fuese descontando.
Ahi ya me pierdo, y no se en que parte del codigo, debo introducir la "funcion", para que aparezca en la pantalla (por ejmplo) "vueltas" y a su lado las vueltas seleccionadas, y que como decia cada giro que da el motor, vaya descontando.
He estado introduciendo y jugando con funciones, dentro de los "while/s" 4 y 5, pero no consigo el resultado esperado.
Por lo demás, este es un sketch sacado de internet, y que mediante su código he confeccionado la construcción "hardware" de la boninadora.
La misma esta funcionando (a falta de ultimar materiales que aun no me han llegado).
Pero poco a poco me gustaria ir introduciendo, mejoras.
GRACIAS.
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); //
int avance;
float diametro=1;
int vueltas=1;
int largobobina=3;
int ajuste;
//int valor;
//unsigned long tiempo_espera = 0;
//int contador = 0;
#include <AccelStepper.h>
AccelStepper motor_plataforma(1, 3, 2); // 1 = interfaz Easy Driver
// UNO Pin 3 conectado al pin STEP del Easy Driver
// UNO Pin 2 conectado al pin DIR del Easy Driver
AccelStepper motor_carrete(1, 13, 12); // 1 = interfaz Easy Driver
// UNO Pin 13 conectado al pin STEP del Easy Driver
// UNO Pin 12 conectado al pin DIR del Easy Driver
int direccionsubprograma=1;
const int enable = 11 ;
int selec=0;
int lcd_key = 0;
int adc_key_in = 0;
#define btnRIGHT 0
#define btnUP 1
#define btnDOWN 2
#define btnLEFT 3
#define btnSELECT 4
#define btnNONE 5
int read_LCD_buttons() // para leer los botones
{ adc_key_in = analogRead(0); // Leemos A0
if (adc_key_in > 900) return btnNONE; // Ningun boton pulsado
if (adc_key_in < 50) return btnRIGHT;
if (adc_key_in < 250) return btnUP;
if (adc_key_in < 450) return btnDOWN;
if (adc_key_in < 650) return btnLEFT;
if (adc_key_in < 850) return btnSELECT;
return btnNONE; // Por si todo falla
}
void setup(){
Serial.begin(9600);
pinMode(enable, OUTPUT);
digitalWrite(enable, LOW);
lcd.begin(16,2); // Inicializar el LCD
lcd.setCursor(0,0);
lcd.print(" BOBINADORA");
lcd.setCursor(0,1); // Cursor a linea 2, posicion 1
lcd.print(" Práctica1 ");
//tiempo_espera = millis();
delay (5000);
motor_plataforma.setSpeed(600.0);
motor_plataforma.setMaxSpeed(600.0); // Maximo Speed of X axis
motor_plataforma.setAcceleration(1600.0); //relación entre aceleración/desaceleracion, Acceleracion of X axis
motor_carrete.setSpeed(300.0); // velocidad inicio
motor_carrete.setMaxSpeed(300.0); // Maximo Speed of Y axis
motor_carrete.setAcceleration(1600.0); //relación entre aceleración/desaceleracion ,Acceleracion of Y axis
lcd.clear();
lcd.setCursor(0,0);
lcd.print("AJUSTAR POSICION:");
lcd.setCursor(0,1);
lcd.print("<IZDA> - <DCHA>");
digitalWrite(enable, HIGH);
}
void loop(){
while(selec==0){
lcd_key = read_LCD_buttons();
if( lcd_key == btnRIGHT){
motor_carrete.move(-300);
motor_carrete.run();
}
if( lcd_key == btnLEFT ){
motor_carrete.move(+300);
motor_carrete.run();
}
if( lcd_key == btnSELECT){
digitalWrite(enable, LOW);
selec=selec+1;
delay(200);
}
}
while(selec==1){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Numero Vueltas:");
lcd_key = read_LCD_buttons();
if( lcd_key == btnUP){
vueltas = (vueltas + 1);
}
if ( lcd_key == btnDOWN){
vueltas = (vueltas -1);
}
if( lcd_key == btnRIGHT){
vueltas = (vueltas + 100);
}
if ( lcd_key == btnLEFT ){
vueltas = (vueltas -100);
}
if ( lcd_key == btnSELECT){
selec=selec+1;
}
lcd.setCursor(0,1);
lcd.print(vueltas);
delay(200);
}
while(selec==2){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Diametro Hilo:");
lcd_key = read_LCD_buttons();
if( lcd_key == btnUP){
diametro = (diametro + 0.1);
}
if ( lcd_key == btnDOWN){
diametro = (diametro - 0.1);
}
if ( lcd_key == btnSELECT){
selec=selec+1;
}
lcd.setCursor(0,1);
lcd.print(diametro);
delay(200);
}
while(selec==3){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Largo Bobina:");
lcd_key = read_LCD_buttons();
lcd_key = read_LCD_buttons();
if( lcd_key == btnRIGHT){
largobobina = (largobobina + 20);
}
if ( lcd_key == btnLEFT){
largobobina = (largobobina - 20);
}
if( lcd_key == btnUP){
largobobina = (largobobina + 1);
}
if ( lcd_key == btnDOWN){
largobobina = (largobobina - 1);
}
if ( lcd_key == btnSELECT){
avance = (largobobina * diametro);
avance = (avance*200);
selec=selec+1;
}
lcd.setCursor(0,1);
lcd.print(largobobina);
delay(200);
}
while(selec==4){
lcd.setCursor(0,0);
lcd.print(" TODO LISTO !!");
lcd.setCursor(0,1);
lcd.print(" ESPERANDO ");
lcd_key = read_LCD_buttons();
if ( lcd_key == btnSELECT){
digitalWrite(enable, HIGH);
selec=selec+1;
motor_plataforma.moveTo(vueltas*200);
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" BOBINANDO !!");
}
delay(200);
}
while(selec==5){
motor_plataforma.run();
motor_carrete.run();
if (motor_carrete.distanceToGo()==0){
decidedireccion();
direccionsubprograma++;
}
if (direccionsubprograma>2) {
motor_carrete.move(avance);
motor_carrete.run();
direccionsubprograma=1;
}
if (motor_plataforma.distanceToGo()==0){
digitalWrite(enable, LOW);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("FIN DE PROGRAMA!");
lcd.setCursor(0,1);
lcd.print(" RESET ");
delay(99999);
}
}
}
void decidedireccion(){
switch(direccionsubprograma){
case 1:
motor_carrete.move(avance);
case 2:
motor_carrete.move(-avance);
}
}