Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/lib/support/drivers/ax.lua
diff options
context:
space:
mode:
Diffstat (limited to 'lib/support/drivers/ax.lua')
-rw-r--r--lib/support/drivers/ax.lua118
1 files changed, 0 insertions, 118 deletions
diff --git a/lib/support/drivers/ax.lua b/lib/support/drivers/ax.lua
deleted file mode 100644
index d505511..0000000
--- a/lib/support/drivers/ax.lua
+++ /dev/null
@@ -1,118 +0,0 @@
-local device = _G
-local WRITE_INFO = 0x01
-local READ_INFO = 0x02
-local GET_RAW_POS = 0x03
-local char000 = string.char(0,0,0)
-local mode='wheel'
-
---byte id,byte regstart, int value
-api={}
-api.write_info = {}
-api.write_info.parameters = {[1]={rname="id", rtype="number", min=0, max=255},[2]={rname="regstart", rtype="number", min=0, max=255},[3]={rname="value", rtype="number", min=0, max=65536}} ----byte id,byte regstart, int value
-api.write_info.returns = {[1]={rname="write_info_return", rtype="number"}} --one return
-api.write_info.call = function (id, regstart, value)
- id, regstart, value = tonumber(id), tonumber(regstart), tonumber(value)
- local write_info_payload = string.char(WRITE_INFO, id, regstart, math.floor(value / 256),value % 256)
- device:send(write_info_payload)
- local write_info_response = device:read(2) or char000
- local raw_val = (string.byte(write_info_response, 2) or 0)
- return raw_val
-end
-
---- Set wheel mode.
---Set the motor to continuous rotation mode.
-api.wheel_mode = {}
-api.wheel_mode.parameters = {[1]={rname="id", rtype="number", min=0, max=255}}
-api.wheel_mode.returns = {}
-api.wheel_mode.call = function (id )
- id = tonumber(id)
- local ret = device:send(string.char(WRITE_INFO,id,0x06,0x00,0x00))
- local write_info_response = device:read(1) or string.char(0,0)
- local ret = device:send(string.char(WRITE_INFO,id,0x08,0x00,0x00))
- local write_info_response = device:read(1) or string.char(0,0)
- mode='wheel'
- end
-
---- Set joint mode.
--- Set the motor to joint mode. Angles are provided in degrees,
--- in the full servo coverage (0 - 300 degrees arc)
--- @param min the minimum joint angle (defaults to 0)
--- @param max the maximum joint angle (defaults to 300)
-api.joint_mode = {}
-api.joint_mode.parameters = {[1]={rname="id", rtype="number", min=0, max=255},[2]={rname="minimo", rtype="number", min=0, max=1023},[3]={rname="maximo", rtype="number", min=0, max=1023}}
-api.joint_mode.returns = {}
-api.joint_mode.call = function (id ,minimo, maximo)
- id = tonumber(id)
- minimo=tonumber(minimo)
- maximo=tonumber(maximo)
- local ret = device:send(string.char(WRITE_INFO,id,0x06,math.floor(minimo / 256),minimo % 256))
- local write_info_response = device:read(1) or string.char(0,0)
- local ret = device:send(string.char(WRITE_INFO,id,0x08,math.floor(maximo / 256),maximo % 256))
- local write_info_response = device:read(1) or string.char(0,0)
- mode='joint'
- end
-
-
---- Set motor position.
--- Set the target position for the motor's axle. Only works in
--- joint mode.
--- @param value Angle in degrees, in the 0 .. 300deg range.
-api.set_position = {}
-api.set_position.parameters = {[1]={rname="id", rtype="number", min=0, max=255},[2]={rname="pos", rtype="number", min=0, max=1023}}
-api.set_position.returns = {}
-api.set_position.call = function (id, pos )
- id = tonumber(id)
- pos = tonumber(pos)
- local ret = device:send(string.char(WRITE_INFO,id,0x1E,math.floor(pos / 256),pos % 256))
- local write_info_response = device:read(1) or string.char(0,0)
- end
-
-
---- Get motor position.
--- Read the axle position from the motor.
--- @return The angle in deg. The reading is only valid in the
--- 0 .. 300deg range
-api.get_position = {}
-api.get_position.parameters = {[1]={rname="id", rtype="number", min=0, max=255},[2]={rname="pos", rtype="number", min=0, max=1023}}
-api.get_position.returns = {[1]={rname="motor_position", rtype="number"}} --one return
-api.get_position.call = function(id)
- local send_response = device:send(string.char(GET_RAW_POS,id))
- local value = device:read(3) or string.char(0,0,0)
- local h_value = string.byte(value, 2)
- local l_value = string.byte(value, 3)
- local raw_angle = 256 * h_value + l_value
- local ang=0.29*(raw_angle) -- deg ?
- return raw_angle
-
- end
-
-
---- Set motor speed.
--- @param value If motor in joint mode, speed in deg/sec in the 1 .. 684 range
--- (0 means max available speed).
--- If in wheel mode, as a fraction of max torque (in the -1 .. 1 range).
-api.set_speed = {}
-api.set_speed.parameters = {[1]={rname="id", rtype="number", min=0, max=255},[2]={rname="speed", rtype="number", min=-1, max=684}}
-api.set_speed.returns = {} --no return
-api.set_speed.call = function(id, speed)
- --if mode=='joint' then
- -- 0 .. 684 deg/sec
- local vel=math.floor(speed * 1.496)
- local lowb = math.floor(vel/ 256)
- local highb = vel % 256
-
-
- --local lowb, highb = get2bytes_unsigned(vel)
- local ret = device:send(id,0x20,string.char(lowb,highb))
- print ("ret= ",ret, " lowb= ", lowb, " highb= ", highb)
- if ret then return ret:byte() end
- --else --mode=='wheel'
- -- -1 .. +1 max torque
- --local vel=math.floor(speed * 1023)
- --local lowb, highb = get2bytes_signed(vel)
- --local ret = device:send(id,0x20,string.char(lowb,highb))
- --if ret then return ret:byte() end
- --end
-end
-
-