Paso 5: Una pequeña peculiaridad
Una peculiaridad de controlar un plotter XY es que necesitamos asegurar que ambos motores completan su turno al mismo tiempo, y por lo tanto los dos motores pueden girar a diferentes velocidades.
Para ilustrar esto, supongamos que son a partir de (0,0) y desea mover a (45,45). Claramente, si ambos motores giran a la misma velocidad, ambos alcanzarán (45,45) al mismo tiempo. A continuación, supongamos que queremos mover de (0,0) a (30,90). En este caso, si ambos motores se mueven a la misma velocidad, entonces cuando llega al motor X 30, el motor Y también estarán en 30 y luego el motor X permanecerá detenido mientras que el motor Y se mantiene giro hasta que llega a 90. Por lo tanto, para asegurarse de que tanto alcance motores (30, 90) al mismo tiempo, tenemos que hacer la vuelta de motor Y 3 veces más rápido que el X motor. Mira la imagen para ver lo que me refiero...
Para implementar este control de velocidad, escribí algo de código que comprueba para ver que motor necesita acelerarse para garantizar ambos motores llegar a sus valores respectivos de destino en el momento exacto de la misma. También necesitamos en el ángulo que el eje de salida gira después de cada paso del motor. En mi caso, esto fue aproximadamente 0,72 grados y así en mi código fuente que han introducido una constante (como un error cero) llamada MOTOR_ERROR y ha definido su valor = 0,8 grados. Vistazo a la función XYPlotter::GotoAngle() en el código fuente para ver cómo determinar que motor tiene que ir más rápido.
Por ejemplo, si motor Y necesita girar 4 veces más rápidamente que el motor de X, entonces YMotor.StepOnce() se llama cuatro veces para cada vez que se llama el XMotor.TurnOnce().