Función detener motor por ángulos con uno de mis 3 botones


hola todos,
les cuento que estoy trabajando en un proyecto en el que necesito elegir entre dos acciones disparadas por un botón.
mi proyecto es una mesa giratoria. consta de un motor nema 17, un easy driver, arduino uno y 3 botones.
encontré un código que me sirvió pero quiero modificar un poco y no se bien como lograrlo.
- el botón 1 hace girar el motor la izquierda
- el botón 2 para el motor
- el botón 3 gira el motor la derecha

yo necesito que el botón 2 en vez de para el motor, haga rotar el motor cada x° con un delay de x segundos.

dejo el código actual en uso.

code: [select]

#include <accelstepper.h>

// define stepper , pins use
accelstepper stepper1(accelstepper::driver, 9, 8);

// define our 3 input button pins
#define  left_pin  4
#define  stop_pin  3
#define  right_pin 2

// define our analog pot input pin
#define  speed_pin 0

// define our maximum , minimum speed in steps per second (scale pot these)
#define  max_speed 500
#define  min_speed 0.1

void setup() {
  // accelstepper value have set here max speeed, higher we'll ever go
  stepper1.setmaxspeed(10000.0);
 
  // set 3 button inputs, pullups
  pinmode(left_pin, input_pullup);
  pinmode(stop_pin, input_pullup);
  pinmode(right_pin, input_pullup);
}

void loop() {
  static float current_speed = 0.0;         // holds current motor speed in steps/second
  static int analog_read_counter = 1000;    // counts down 0 fire analog read
  static char sign = 0;                     // holds -1, 1 or 0 turn motor on/off , control direction
  static int analog_value = 0;              // holds raw analog value.
 
  // if switch pushed down (low), set sign value appropriately
  if (digitalread(left_pin) == 0) {
    sign = 1;
  }
  else if (digitalread(right_pin) == 0) {   
    sign = -1;
  }
  else if (digitalread(stop_pin) == 0) {
    sign = 0;
  }

  // want read pot every (because takes long time don't
  // want every time through main loop). 
  if (analog_read_counter > 0) {
    analog_read_counter--;
  }
  else {
    analog_read_counter = 3000;
    // read pot (from 0 1023)
    analog_value = analogread(speed_pin);
    // give stepper chance step if needs to
    stepper1.runspeed();
    //  , scale pot's value min max speeds
    current_speed = sign * (((analog_value/1023.0) * (max_speed - min_speed)) + min_speed);
    // update stepper run @ new speed
    stepper1.setspeed(current_speed);
  }

  // run stepper @ constant speed
  stepper1.runspeed();
}


fuente: http://www.schmalzhaus.com/easydriver/examples/easydriverexamples.html



muchas gracias!

lee las normas del foro
luego ve more (abajo la derecha), click, luego modify y estas en modo edicion.
si tienes que editar un código -> selecciona todo el código y click en </> arriba del emoticon.
si tienes que editar un enlace -> selecciona el enlace. copialo al portapapeles. click en el eslabón (ver abajo) y sigue los pasos que habras visto al leer las normas.  




Arduino Forum > International > Español > Software (Moderators: surbyte, Hector_A) > Función detener motor por ángulos con uno de mis 3 botones


arduino

Comments

Popular posts from this blog

Error compiling for board Arduino/Genuino Uno.

Installation database is corrupt

esp8266 (nodemcu 0.9) client.write très lent ???