mt12/SCRIPTS/TELEMETRY/gplusl.lua
2025-06-26 07:54:22 -04:00

63 lines
No EOL
1.8 KiB
Lua
Executable file

-- This code was originally written by Miami Mike to calculate the Open Location Code (Google+Code)
-- It was altered by ChrisOhara to permanently store the last received GPS coordinates by background function.
-- So that it can display the last position as Google+Code even after connection to receiver is lost.
-- Works on taranis
local mid = LCD_W / 2
local map = {[0] =
"2", "3", "4", "5", "6", "7", "8", "9", "C", "F",
"G", "H", "J", "M", "P", "Q", "R", "V", "W", "X"}
local my_gpsId
local latitude, longitude = 0.0, 0.0
local lat = 0
local lon = 0
local pluscode = ""
local function init_func()
my_gpsId = getFieldInfo("GPS") and getFieldInfo("GPS").id or nil;
end
local function getcode(lat, lon)
local int = math.floor(lat)
local codepair = map[int]
lat = 20 * (lat - int)
int = math.floor(lon)
codepair = codepair .. map[int]
lon = 20 * (lon - int)
return lat, lon, codepair
end
local function bg_func()
if getValue(my_gpsId) ~= 0 then
local gps = getValue(my_gpsId)
latitude, longitude = gps.lat, gps.lon
end
end
local function run_func()
lat = (latitude + 90) / 20
lon = (longitude + 180) / 20
pluscode = ""
for i = 1, 4 do
lat, lon, codepair = getcode(lat, lon)
pluscode = pluscode .. codepair
end
pluscode = pluscode .. "+"
lat, lon, codepair = getcode(lat, lon)
pluscode = pluscode .. codepair
pluscode = pluscode .. map[4 * math.floor(lat / 5) + math.floor(lon / 4)]
lcd.clear()
lcd.drawText(mid - 53, 5, "GPS coordinates are")
lcd.drawText(mid - 44, 15, latitude.. ", " .. longitude)
lcd.drawText(mid- 49, 35, "Google Plus Code is")
lcd.drawText(mid - 32, 45, pluscode) -- full 12 characters
--- lcd.drawText(mid - 20, 45, string.sub(pluscode, 5, 12)) -- shortened version
return 0
end
return {run=run_func, init=init_func, background=bg_func}