Read Serial.print while stepper is working

Last week I posted about a project I’m making and thanks to some guys I continued nicely.


I have my stepper motor and my encoder.

I need to calculate some things in order to proceed with my project, by now I need to read the encoder position when my stepper moves some steps…

But… I noticed a few codes ago that I cant manage to move my stepper without problems if my code includes Serial.print’s…

Here’s my code… any time my stepper moves – my encoder moves
… any time my encoder moves – my encoder position in printed in my screen

But my stepper slows down when it happens affecting the steps… Any ideas? I really need to know my encoder position!!

#include <RotaryEncoder.h>
static int pos = 0;
RotaryEncoder encoder(A2, A3);

#define DIR_PIN 2 
#define STEP_PIN 3
#define EN_PIN 3

int ar = 11;
int ab = 12;
int arr;
int aba;
float v;

void setup() { 
  pinMode(DIR_PIN, OUTPUT); 
  pinMode(STEP_PIN, OUTPUT);
   pinMode(EN_PIN, OUTPUT);
   digitalWrite(EN_PIN, HIGH);
   pinMode(ar, INPUT);
   pinMode(ab, INPUT);

void loop()

  int newPos = encoder.getPosition();
  if (pos != newPos) {
    pos = newPos;
arr = digitalRead(ar);
aba = digitalRead(ab);
if (arr == HIGH)
    rotate(-1, v); 
if (aba == HIGH)

void rotate(int steps, float speed){ 
  int dir = (steps > 0)? HIGH:LOW;
  steps = abs(steps);


  float usDelay = (1/speed) * 70;

  for(int i=0; i < steps; i++){ 
    digitalWrite(STEP_PIN, HIGH); 

    digitalWrite(STEP_PIN, LOW); 

You've made v = 4.
1/4 *70 = 17.5.
delayMicroseconds(17.5) is nonsense. Delay() should be an int. The processor will ignore the fractional part.
You could adjust the delay to compensate for the slowing effect of Serial.print.
Using the 'blink without delay' principle here might solve it for you, if the lag caused by Serial.print is not greater than your intended 'delay'.