Example #1
0
uint8_t NMX::moveToPosition(int32_t pos)
{
	if(currentPos > pos)
	{
		return moveSteps(1, (uint32_t)(currentPos - pos));
	}
	else if(currentPos < pos)
	{
		return moveSteps(0, (uint32_t)(pos - currentPos));
	}
	else
	{
		return 0;
	}
}
Example #2
0
String KnitControl::run(char c) {
  String res = "nop";
  bool processed = false;
  switch (c){
    case ' ':
      processed=true;
      break;
    case 'a':      // toggle BACK servos
    case 'A':
      processed = true;
      stepsToDo=0;
      lastStepsToDo=0;
      res = "Trying to ABORT!";
      break;
    case 'b':      // toggle BACK servos
    case 'B':
      processed = true;
      sm->setFB(false,ServoMgr::Toggle);
      res = "Toggling BACK servos.";
      break;
    case 'c':      // toggle BACK servos
    case 'C':
      processed = true;
      stepsToDo=0;
      lastStepsToDo=0;
      homed = awayed = false;
      curPos = 0;
      awayPos = maxSteps;
      res = "Settings Clearde!";
      break;
    case 'f':      // toggle FRONT servos
    case 'F':
      processed = true;
      sm->setFB(true,ServoMgr::Toggle);
      res = "Toggling FRONT servos.";
      break;
    case 'G':
    case 'g':      // just go until we can go no more
      processed = true;
      if (homed && awayed){
        stepsToDo=-1;
        lastStepsToDo=0;
        res = "Going for it!";
      }
      else{
        res = "Better HOME and AWAY first...";
      }
      break;
    case 'h':
    case 'H':      // set the current position as home
      setHome();
      processed = true;
      res = "Homed!";
      break;
    case 'k':      // toggle FRONT servos
    case 'K':
      processed = true;
      sm->setServos2Knit(dir);
      res = String("Servos set to knit: ") + String(dir ? "LEFT" : "RIGHT");
      break;
    case 'l':
    case 'L':     // take a step left
      processed = true;
      setDir(true);
      res = "Direction:  LEFT!";
      break;
    case 'n':     // chang to needle mode, i.e. numbers entered refer to needles
    case 'N':
      processed = true;
      needleMode = true;
      res = "Needle Movement Mode activited!";
      break;
    case 'p':    // display curren position
    case 'P':
      processed = true;
      res = "Current Position: " + String(curPos); // NOTE: the string 'Current' is parsed by Processing GUI, do not remove it!
      break;
    case 'r':     // take one step right
    case 'R':
      processed = true;
      setDir(false);
      res = "Direction: RIGHT!";
      break;
    case 's':     // switch tostep mode: numbers entered refer to steps
    case 'S':
      processed = true;
      needleMode = false;
      res = "Step Movement Mode activited!";
      break;
    case 't':      // toggle TOP servo
    case 'T':
      processed = true;
      sm->toggle(ServoMgr::Top);
      res = "Toggling TOP servo.";
      break;
    case 'v':      // Visualize status
    case 'V':
      processed = true;      
      res = getStatus();
      break;
    case 'y':
    case 'Y':      // set the current position as home
      processed = true;
      if(homed){
        setAway();
        res = "Awayed!";
      }
      else{
        res = "Please Home before setting Away!";
      }
      break;
    case 'z':      // all servos OUT 
    case 'Z':
      processed = true;
      for (int i=0;i<ServoMgr::nbServos;i++){
        sm->set(i,false);
      }
      res = "Servos set to OUT.";
      break;
  }
  if (!processed){
    if (c >= '0' && c <= '9'){
      int nbSteps = ((c -'0') * 5) + 1;
      if (needleMode){
        moveNeedles(nbSteps);
      }
      else{
        moveSteps(nbSteps);
      }
    }
  }
  return res;
}
Example #3
0
uint8_t NMX::moveBackward()
{
	return moveSteps(1, stepSize);
}
Example #4
0
uint8_t NMX::moveForward()
{
	return moveSteps(0, stepSize);
}