     addMotion(x, y, _sys.power, _sys.speed, _sys.acceleration);
 }
 
-bool hasCommand(char cmd)
+bool hasCommand(String cmd, char cmdId)
 {
     int index = 0;
     char c = 0;
-    while (c != cmd)
-    {
-        if (index >= _sys.buffer.length())
+    while (c != cmdId)
+    {
+        if (index >= cmd.length())
         {
             return false;
         }
         else
         {
-            c = _sys.buffer.charAt(index);
+            c = cmd.charAt(index);
         }
         index++;
     }
     return true;
 }
-double getCommand(char cmd)
-{
-    int index = _sys.buffer.indexOf(cmd);
-    int startIndex = _sys.buffer.indexOf(cmd) + 1;
+double getCommand(String cmd, char cmdId)
+{
+    int index = cmd.indexOf(cmdId);
+    int startIndex = cmd.indexOf(cmdId) + 1;
     char c = 0;
     while (c != ' ')
     {
         index++;
-        if (index >= _sys.buffer.length())
+        if (index >= cmd.length())
         {
             break;
         }
         else
         {
-            c = _sys.buffer.charAt(index);
-        }
-    }
-    return _sys.buffer.substring(startIndex, index).toDouble();
+            c = cmd.charAt(index);
+        }
+    }
+    return cmd.substring(startIndex, index).toDouble();
 }
    volatile uint8_t isRunningState = MOTION_ACCELETING;
    volatile bool isRelative = false;
    uint8_t powerPin = 10;
    String buffer = "";
} SystemStatus;
static SystemStatus _sys;
static PlannerPoint _points[POINTS_COUNT];
static PlannerPoint _prevPoint;
volatile bool busy = false;
MeStepper steppers[NUM_AXIS] = {MeStepper(SLOT_1), MeStepper(SLOT_2)};

void setup()
{
    Serial.begin(115200);
    delay(1000);
    initTimer();
    for (int i = 0; i < NUM_AXIS; i++)
    {
        steppers[i].setMicroStep(16);

        _sys.plannedLength -= 1;
    }
}
uint8_t isRunningState()
{
    return _sys.isRunningState;
