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; } }
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; }
uint8_t NMX::moveBackward() { return moveSteps(1, stepSize); }
uint8_t NMX::moveForward() { return moveSteps(0, stepSize); }