Allow speed on a per axis basis like the fw expects

pull/363/head
connor rigby 2017-11-27 13:13:16 -08:00
parent 7dcb3df98d
commit 94314cce9d
5 changed files with 14 additions and 11 deletions

View File

@ -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

View File

@ -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."

View File

@ -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

View File

@ -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

View File

@ -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