Allow speed on a per axis basis like the fw expects
parent
7dcb3df98d
commit
94314cce9d
|
@ -11,7 +11,10 @@ defmodule Farmbot.CeleryScript.AST.Node.MoveAbsolute do
|
|||
{:ok, pos_b} <- ast_to_vec3(offset)
|
||||
do
|
||||
pos = vec3_math(pos_a, :+, pos_b)
|
||||
case Farmbot.Firmware.move_absolute(pos, speed) do
|
||||
speed_x = speed * (Farmbot.BotState.get_param(:movement_max_spd_x) || 1)
|
||||
speed_y = speed * (Farmbot.BotState.get_param(:movement_max_spd_y) || 1)
|
||||
speed_z = speed * (Farmbot.BotState.get_param(:movement_max_spd_z) || 1)
|
||||
case Farmbot.Firmware.move_absolute(pos, speed_x, speed_y, speed_z) do
|
||||
:ok -> {:ok, env}
|
||||
{:error, reason} -> {:error, reason, env}
|
||||
end
|
||||
|
|
|
@ -5,8 +5,8 @@ defmodule Farmbot.Firmware do
|
|||
use Farmbot.Logger
|
||||
|
||||
@doc "Move the bot to a position."
|
||||
def move_absolute(vec3, speed) do
|
||||
GenStage.call(__MODULE__, {:move_absolute, [vec3, speed]}, :infinity)
|
||||
def move_absolute(vec3, x_speed, y_speed, z_speed) do
|
||||
GenStage.call(__MODULE__, {:move_absolute, [vec3, x_speed, y_speed, z_speed]}, :infinity)
|
||||
end
|
||||
|
||||
@doc "Calibrate an axis."
|
||||
|
|
|
@ -36,7 +36,7 @@ defmodule Farmbot.Firmware.Handler do
|
|||
@type pin_mode :: :digital | :analog
|
||||
|
||||
@doc "Move to a position."
|
||||
@callback move_absolute(handler, vec3, speed) :: fw_ret_val
|
||||
@callback move_absolute(handler, vec3, speed, speed, speed) :: fw_ret_val
|
||||
|
||||
@doc "Calibrate an axis."
|
||||
@callback calibrate(handler, axis, speed) :: fw_ret_val
|
||||
|
|
|
@ -14,8 +14,8 @@ defmodule Farmbot.Firmware.StubHandler do
|
|||
GenStage.start_link(__MODULE__, [])
|
||||
end
|
||||
|
||||
def move_absolute(handler, pos, speed) do
|
||||
GenStage.call(handler, {:move_absolute, pos, speed})
|
||||
def move_absolute(handler, pos, x_speed, y_speed, z_speed) do
|
||||
GenStage.call(handler, {:move_absolute, pos, x_speed, y_speed, z_speed})
|
||||
end
|
||||
|
||||
def calibrate(handler, axis, speed) do
|
||||
|
@ -97,7 +97,7 @@ defmodule Farmbot.Firmware.StubHandler do
|
|||
{:noreply, [:idle], state}
|
||||
end
|
||||
|
||||
def handle_call({:move_absolute, pos, _speed}, _from, state) do
|
||||
def handle_call({:move_absolute, pos, _x_speed, _y_speed, _z_speed}, _from, state) do
|
||||
{:reply, :ok, [{:report_current_position, pos.x, pos.y, pos.z}, :done], %{state | pos: pos}}
|
||||
end
|
||||
|
||||
|
|
|
@ -12,8 +12,8 @@ defmodule Farmbot.Firmware.UartHandler do
|
|||
GenStage.start_link(__MODULE__, [])
|
||||
end
|
||||
|
||||
def move_absolute(handler, pos, speed) do
|
||||
GenStage.call(handler, {:move_absolute, pos, speed})
|
||||
def move_absolute(handler, pos, x_speed, y_speed, z_speed) do
|
||||
GenStage.call(handler, {:move_absolute, pos, x_speed, y_speed, z_speed})
|
||||
end
|
||||
|
||||
def calibrate(handler, axis, speed) do
|
||||
|
@ -204,8 +204,8 @@ defmodule Farmbot.Firmware.UartHandler do
|
|||
end
|
||||
end
|
||||
|
||||
def handle_call({:move_absolute, pos, speed}, _from, state) do
|
||||
wrote = "G00 X#{pos.x} Y#{pos.y} Z#{pos.z} A#{speed} B#{speed} C#{speed}"
|
||||
def handle_call({:move_absolute, pos, x_speed, y_speed, z_speed}, _from, state) do
|
||||
wrote = "G00 X#{pos.x} Y#{pos.y} Z#{pos.z} A#{x_speed} B#{y_speed} C#{z_speed}"
|
||||
do_write(wrote, state)
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in New Issue