     command.pin = stepPin;
     command.times = amount;
   }
+
+  void updateLoop() {
+    if(update) {
+      if(incr < command.times) {
+        // Alternate
+        dw(stepPin, HIGH);
+        delay(1);
+        dw(stepPin, LOW);
+
+        // Add one to increment
+        ++incr;
+      } else {
+        update = false;
+        incr = 0;
+      }
+    }
+  }
 };
 
 

  // Print welcome message
  Serial.println("miscr v0.1 [enter \"?\" for commands and \"$\" for status]\n");

  sX.begin();
  //sY.begin();
}

void loop() {
  getSerialInput();

  if(sX.update) {
    if(sX.incr < sX.command.times) {
      // Alternate
      dw(sX.stepPin, HIGH);
      delay(1);
      dw(sX.stepPin, LOW);

      // Add one to increment
      ++sX.incr;
    } else {
      sX.update = false;
      sX.incr = 0;
    }
  }

  // TODO other motors
}

 * functions - one for each stepper.
 */
class Stepper {
 private:
  bool update;
  Command command;
  int incr;
  int stepPin;
  int dirPin;
  int enablePin;
  int minPin;
  int maxPin;

 public:
  Stepper(int stepPinIn, int dirPinIn, int enablePinIn,
          int minPinIn, int maxPinIn) {
    stepPin = stepPinIn;
