code: func (s *StepperDriver) Move(stepsToMove int) error {
  	if stepsToMove == 0 {
  		return s.Halt()
  	}
  
  	if s.moving == true {
  		//stop previous motion
  		s.Halt()
  	}
  
  	s.mutex.Lock()
  	s.moving = true
  	s.direction = "forward"
  
  	if stepsToMove < 0 {
  		s.direction = "backward"
  	}
  	s.mutex.Unlock()
  
  	stepsLeft := int64(math.Abs(float64(stepsToMove)))
  	//Do not remove *1000 and change duration to time.Millisecond. It has been done for a reason
  	delay := time.Duration(60000*1000/(s.stepsPerRev*s.speed)) * time.Microsecond
  
  	for stepsLeft > 0 {
  		if err := s.step(); err != nil {
  			return err
  		}
  		stepsLeft--
  		time.Sleep(delay)
  	}
  
  	s.moving = false
  	return nil
  }
docs: // Move moves the motor for given number of steps