Go Down

Topic: Contador Incremental (Read 61 times) previous topic - next topic

manchap23

Buenas noches!

Necesito un poco de ayuda con este programa, soy nuevo en Arduino y estoy teniendo problemas con este codigo.

Este es el programa completo, estoy utilizando la libreria accelstepper.
La seccion setup corre una rutina de home (la cual funciona correctamente), el problema es la seccion de loop.
Code: [Select]

#include "AccelStepper.h"

AccelStepper stepper (1, 9 , 8);

#define home_switch 4
#define buttonState 7
long initial_homing = -1;
int x;
int sensorPushCounter = 0;
int sensorState = 0;
int lastsensorState = 0;


void setup() {


   pinMode(buttonState, INPUT);
   pinMode(home_switch, INPUT_PULLUP);
   
   delay(150); 

  stepper.setCurrentPosition(0);
  stepper.setMaxSpeed(1.0);     
  stepper.setAcceleration(1500.0);
  initial_homing=1;
 
  while (digitalRead(home_switch)) {   
    stepper.moveTo(initial_homing); 
    initial_homing++; 
    stepper.run();
    delay(5);
}


  stepper.setCurrentPosition(0);
  stepper.setMaxSpeed(1.0);     
  stepper.setAcceleration(1500.0);
  initial_homing=1;

  while (!digitalRead(home_switch)) {
    stepper.moveTo(initial_homing); 
    stepper.run();
    initial_homing++;
    delay(5);
  }
 
  stepper.setCurrentPosition(0);
  x == 0;
  stepper.setMaxSpeed(3000.0);     
  stepper.setAcceleration(45000.0);
  stepper.setSpeed(2000); 

}
 
void loop()
{       
  sensorState = digitalRead(buttonState);

  if (sensorState != lastsensorState){
    if (buttonState == HIGH){
      sensorPushCounter++;
    }
    delay(50);
  }

  lastsensorState = sensorState;

  if (sensorPushCounter % 9 == 0) {
    stepper.runSpeed();
  } else {
    stepper.stop();
  }


  if (digitalRead(home_switch) == HIGH) {
    stepper.stop();
    sensorPushCounter = 0;
    }
}



La seccion de loop debe contar cuantas veces se activa el sensor, al llegar al conteo definido debera correr el comando stepper.runSpeed().

Por ahora lo que pasa es que terminada la rutina de home, el stepper comienza a correr incluso antes de que active por primera vez el sensor.

Gracias de antemano!

IgnoranteAbsoluto

La condición
Code: [Select]
if (sensorPushCounter % 9 == 0) {
se cumple para todo valor de sensorPushCounter que sea múltiplo de 9, es decir, se cumple cuando sensorPushCounter vale 0, 9, 18, 27, 36, etc.

Así que, inicialmente, si no hay incremento alguno de la variable sensorPushCounter se cumplirá la condición ya que se inicializa con el valor 0, que es múltiplo de 9 (nueve por cero es cero).

El operador % da como resultado el resto de la división entera entre sensorPushCounter y 9. Dividir cero entre nueve da como resultado cero y de resto cero. Y cero es igual acero, con lo que de cumple la condición.

Go Up