ir function stuck

  while (pulseIn(IR_PIN, HIGH) < start_bit);

Will wait until you get a pulse so you will not be moving your motor when you are waiting for a pulse.

You will need to interleave checking for pulses with updating your stepper for this to work.

HTH.