63 lines
No EOL
1.8 KiB
Lua
Executable file
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} |