Skip to content

Commit

Permalink
AP_Scripting: Add send_text to display binding
Browse files Browse the repository at this point in the history
Added a notify:send_text and notify:release_text binding to override the text displayed on a display with custom text
  • Loading branch information
haydendonald authored and IamPete1 committed Feb 7, 2024
1 parent dea51c9 commit baf8958
Show file tree
Hide file tree
Showing 3 changed files with 78 additions and 0 deletions.
8 changes: 8 additions & 0 deletions libraries/AP_Scripting/docs/docs.lua
Original file line number Diff line number Diff line change
Expand Up @@ -2768,6 +2768,14 @@ function notify:handle_rgb(red, green, blue, rate_hz) end
---@param tune string
function notify:play_tune(tune) end

-- Display text on a notify display, text too long to fit will automatically be scrolled.
---@param text string -- upto 50 characters
---@param row integer -- row number to display on, 0 is at the top.
function notify:send_text(text, row) end

-- desc
---@param row integer
function notify:release_text(row) end

-- desc
---@class gps
Expand Down
66 changes: 66 additions & 0 deletions libraries/AP_Scripting/examples/hello_world_display.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
-- This script is an example of printing to a display via scripting
-- Connect a supported display to the autopilot, and configure the NTF_DISPLAY_TYPE parameter seen at https://ardupilot.org/copter/docs/common-display-onboard.html
-- The notify:send_text(text, row) method will override default on the display, disabling the default messages

local switchTimeA
local switchTimeB
local displayWidth = 18
local function update()
-- Just keep track of when we should switch to a smiley :)
if switchTimeA == nil then
switchTimeA = millis() + 5000
switchTimeB = switchTimeA + 10000
end

-- Example of overriding a line keeping some defaults, here we will replace the battery(1) and GPS(2) rows
if switchTimeA > millis() then
notify:send_text("Hello, World!", 1)
notify:send_text(tostring(millis()), 2)

-- Next demonstrate we can release the text, and the default will be shown again
elseif switchTimeB > millis() then
notify:release_text(1)
notify:release_text(2)

-- Example of overriding all lines, a smiley, try moving the autopilot around to see it change
else
-- Generate the smiley
local width = (displayWidth / 2)
local roll = math.floor(width + (ahrs:get_roll() * width)) - 4
local pitch = math.floor(ahrs:get_pitch() * 6) + 2;
local sub = 5 - roll
if sub < 0 then
sub = 0
end
local rows = {}
if pitch - 2 >= 0 and pitch - 2 <= 5 then
rows[pitch - 2] = (string.rep(" ", roll) .. " ##"):sub(sub);
end
if pitch - 1 >= 0 and pitch - 1 <= 5 then
rows[pitch - 1] = (string.rep(" ", roll) .. " # #"):sub(sub);
end
if pitch >= 0 and pitch <= 5 then
rows[pitch] = (string.rep(" ", roll) .. " #"):sub(sub);
end
if pitch + 1 >= 0 and pitch + 1 <= 5 then
rows[pitch + 1] = (string.rep(" ", roll) .. " # #"):sub(sub);
end
if pitch + 2 >= 0 and pitch + 2 <= 5 then
rows[pitch + 2] = (string.rep(" ", roll) .. " ##"):sub(sub);
end
if pitch + 3 >= 0 and pitch + 3 <= 5 then
rows[pitch + 3] = "";
end

-- Send it out to the display
for i = 0, 5 do
if rows[i] == nil then
rows[i] = ""
end
notify:send_text(rows[i], i)
end
end

return update, 10
end
return update, 1000 -- Wait a few seconds before starting
4 changes: 4 additions & 0 deletions libraries/AP_Scripting/generator/description/bindings.desc
Original file line number Diff line number Diff line change
Expand Up @@ -191,6 +191,10 @@ singleton AP_Notify depends (!defined(HAL_BUILD_AP_PERIPH) || defined(HAL_PERIPH
singleton AP_Notify method play_tune void string
singleton AP_Notify method handle_rgb void uint8_t'skip_check uint8_t'skip_check uint8_t'skip_check uint8_t'skip_check
singleton AP_Notify method handle_rgb_id void uint8_t'skip_check uint8_t'skip_check uint8_t'skip_check uint8_t'skip_check
singleton AP_Notify method send_text_scripting void string uint8_t'skip_check
singleton AP_Notify method send_text_scripting rename send_text
singleton AP_Notify method release_text_scripting void uint8_t'skip_check
singleton AP_Notify method release_text_scripting rename release_text

include AP_Proximity/AP_Proximity.h
include AP_Proximity/AP_Proximity_Backend.h
Expand Down

1 comment on commit baf8958

@kurock09
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This example script does not work, what could it be? (dispaly ssd1306, NTF_DISPLAY_TYPE=1).
Lua: /APM/scripts/hello_world_display.lua:17: attempt to call a nil value (method 'send_text')

Please sign in to comment.