Skip to content

Commit

Permalink
feat: BattAnalog - Support Li-Ion battery, layout tweaks (#78)
Browse files Browse the repository at this point in the history
* new Rotary Gauge widget

* Rotary Gauge widget: less ticks on small size

* new Rotary Gauge widget

* new Rotary Gauge widget

* BattCheck: support Li-Ion battery, and some layouts
  • Loading branch information
offer-shmuely authored Sep 14, 2022
1 parent dffca37 commit 4edfc8f
Showing 1 changed file with 127 additions and 56 deletions.
183 changes: 127 additions & 56 deletions sdcard/c480x272/WIDGETS/BattAnalog/main.lua
Original file line number Diff line number Diff line change
Expand Up @@ -31,21 +31,57 @@
-- Widget to display the levels of Lipo battery from single analog source
-- Offer Shmuely
-- Date: 2022
-- ver: 0.3
-- ver: 0.4

local _options = {
{ "Sensor", SOURCE, 0 }, -- default to 'A1'
{ "Sensor" , SOURCE, 0 }, -- default to 'A1'
{ "Color" , COLOR , YELLOW },
{ "Show_Total_Voltage", BOOL , 0 }, -- 0=Show as average Lipo cell level, 1=show the total voltage (voltage as is)
{ "Lithium_Ion" , BOOL , 0 }, -- 0=LIPO battery, 1=LI-ION (18650/21500)
}

-- Data gathered from commercial lipo sensors
local myArrayPercentList = { { 3, 0 }, { 3.093, 1 }, { 3.196, 2 }, { 3.301, 3 }, { 3.401, 4 }, { 3.477, 5 }, { 3.544, 6 }, { 3.601, 7 }, { 3.637, 8 }, { 3.664, 9 }, { 3.679, 10 }, { 3.683, 11 }, { 3.689, 12 }, { 3.692, 13 }, { 3.705, 14 }, { 3.71, 15 }, { 3.713, 16 }, { 3.715, 17 }, { 3.72, 18 }, { 3.731, 19 }, { 3.735, 20 }, { 3.744, 21 }, { 3.753, 22 }, { 3.756, 23 }, { 3.758, 24 }, { 3.762, 25 }, { 3.767, 26 }, { 3.774, 27 }, { 3.78, 28 }, { 3.783, 29 }, { 3.786, 30 }, { 3.789, 31 }, { 3.794, 32 }, { 3.797, 33 }, { 3.8, 34 }, { 3.802, 35 }, { 3.805, 36 }, { 3.808, 37 }, { 3.811, 38 }, { 3.815, 39 }, { 3.818, 40 }, { 3.822, 41 }, { 3.825, 42 }, { 3.829, 43 }, { 3.833, 44 }, { 3.836, 45 }, { 3.84, 46 }, { 3.843, 47 }, { 3.847, 48 }, { 3.85, 49 }, { 3.854, 50 }, { 3.857, 51 }, { 3.86, 52 }, { 3.863, 53 }, { 3.866, 54 }, { 3.87, 55 }, { 3.874, 56 }, { 3.879, 57 }, { 3.888, 58 }, { 3.893, 59 }, { 3.897, 60 }, { 3.902, 61 }, { 3.906, 62 }, { 3.911, 63 }, { 3.918, 64 }, { 3.923, 65 }, { 3.928, 66 }, { 3.939, 67 }, { 3.943, 68 }, { 3.949, 69 }, { 3.955, 70 }, { 3.961, 71 }, { 3.968, 72 }, { 3.974, 73 }, { 3.981, 74 }, { 3.987, 75 }, { 3.994, 76 }, { 4.001, 77 }, { 4.007, 78 }, { 4.014, 79 }, { 4.021, 80 }, { 4.029, 81 }, { 4.036, 82 }, { 4.044, 83 }, { 4.052, 84 }, { 4.062, 85 }, { 4.074, 86 }, { 4.085, 87 }, { 4.095, 88 }, { 4.105, 89 }, { 4.111, 90 }, { 4.116, 91 }, { 4.12, 92 }, { 4.125, 93 }, { 4.129, 94 }, { 4.135, 95 }, { 4.145, 96 }, { 4.176, 97 }, { 4.179, 98 }, { 4.193, 99 }, { 4.2, 100 } }
local defaultSensor = "RxBt" -- RxBt / A1 / A3/ VFAS /RxBt
local _lipoPercentListSplit = {
{ { 3.000, 0 }, { 3.093, 1 }, { 3.196, 2 }, { 3.301, 3 }, { 3.401, 4 }, { 3.477, 5 }, { 3.544, 6 }, { 3.601, 7 }, { 3.637, 8 }, { 3.664, 9 }, { 3.679, 10 }, { 3.683, 11 }, { 3.689, 12 }, { 3.692, 13 } },
{ { 3.705, 14 }, { 3.710, 15 }, { 3.713, 16 }, { 3.715, 17 }, { 3.720, 18 }, { 3.731, 19 }, { 3.735, 20 }, { 3.744, 21 }, { 3.753, 22 }, { 3.756, 23 }, { 3.758, 24 }, { 3.762, 25 }, { 3.767, 26 } },
{ { 3.774, 27 }, { 3.780, 28 }, { 3.783, 29 }, { 3.786, 30 }, { 3.789, 31 }, { 3.794, 32 }, { 3.797, 33 }, { 3.800, 34 }, { 3.802, 35 }, { 3.805, 36 }, { 3.808, 37 }, { 3.811, 38 }, { 3.815, 39 } },
{ { 3.818, 40 }, { 3.822, 41 }, { 3.825, 42 }, { 3.829, 43 }, { 3.833, 44 }, { 3.836, 45 }, { 3.840, 46 }, { 3.843, 47 }, { 3.847, 48 }, { 3.850, 49 }, { 3.854, 50 }, { 3.857, 51 }, { 3.860, 52 } },
{ { 3.863, 53 }, { 3.866, 54 }, { 3.870, 55 }, { 3.874, 56 }, { 3.879, 57 }, { 3.888, 58 }, { 3.893, 59 }, { 3.897, 60 }, { 3.902, 61 }, { 3.906, 62 }, { 3.911, 63 }, { 3.918, 64 } },
{ { 3.923, 65 }, { 3.928, 66 }, { 3.939, 67 }, { 3.943, 68 }, { 3.949, 69 }, { 3.955, 70 }, { 3.961, 71 }, { 3.968, 72 }, { 3.974, 73 }, { 3.981, 74 }, { 3.987, 75 }, { 3.994, 76 } },
{ { 4.001, 77 }, { 4.007, 78 }, { 4.014, 79 }, { 4.021, 80 }, { 4.029, 81 }, { 4.036, 82 }, { 4.044, 83 }, { 4.052, 84 }, { 4.062, 85 }, { 4.074, 86 }, { 4.085, 87 }, { 4.095, 88 } },
{ { 4.105, 89 }, { 4.111, 90 }, { 4.116, 91 }, { 4.120, 92 }, { 4.125, 93 }, { 4.129, 94 }, { 4.135, 95 }, { 4.145, 96 }, { 4.176, 97 }, { 4.179, 98 }, { 4.193, 99 }, { 4.200, 100 } },
}

-- from: https://electric-scooter.guide/guides/electric-scooter-battery-voltage-chart/
local _liionPercentListSplit = {
{ { 2.800, 0 }, { 2.840, 1 }, { 2.880, 2 }, { 2.920, 3 }, { 2.960, 4 } },
{ { 3.000, 5 }, { 3.040, 6 }, { 3.080, 7 }, { 3.096, 8 }, { 3.112, 9 } },
{ { 3.128, 10 }, { 3.144, 11 }, { 3.160, 12 }, { 3.176, 13 }, { 3.192, 14 } },
{ { 3.208, 15 }, { 3.224, 16 }, { 3.240, 17 }, { 3.256, 18 }, { 3.272, 19 } },
{ { 3.288, 20 }, { 3.304, 21 }, { 3.320, 22 }, { 3.336, 23 }, { 3.352, 24 } },
{ { 3.368, 25 }, { 3.384, 26 }, { 3.400, 27 }, { 3.416, 28 }, { 3.432, 29 } },
{ { 3.448, 30 }, { 3.464, 31 }, { 3.480, 32 }, { 3.496, 33 }, { 3.504, 34 } },
{ { 3.512, 35 }, { 3.520, 36 }, { 3.528, 37 }, { 3.536, 38 }, { 3.544, 39 } },
{ { 3.552, 40 }, { 3.560, 41 }, { 3.568, 42 }, { 3.576, 43 }, { 3.584, 44 } },
{ { 3.592, 45 }, { 3.600, 46 }, { 3.608, 47 }, { 3.616, 48 }, { 3.624, 49 } },
{ { 3.632, 50 }, { 3.640, 51 }, { 3.648, 52 }, { 3.656, 53 }, { 3.664, 54 } },
{ { 3.672, 55 }, { 3.680, 56 }, { 3.688, 57 }, { 3.696, 58 }, { 3.704, 59 } },
{ { 3.712, 60 }, { 3.720, 61 }, { 3.728, 62 }, { 3.736, 63 }, { 3.744, 64 } },
{ { 3.752, 65 }, { 3.760, 66 }, { 3.768, 67 }, { 3.776, 68 }, { 3.784, 69 } },
{ { 3.792, 70 }, { 3.800, 71 }, { 3.810, 72 }, { 3.820, 73 }, { 3.830, 74 } },
{ { 3.840, 75 }, { 3.850, 76 }, { 3.860, 77 }, { 3.870, 78 }, { 3.880, 79 } },
{ { 3.890, 80 }, { 3.900, 81 }, { 3.910, 82 }, { 3.920, 83 }, { 3.930, 84 } },
{ { 3.940, 85 }, { 3.950, 86 }, { 3.960, 87 }, { 3.970, 88 }, { 3.980, 89 } },
{ { 3.990, 90 }, { 4.000, 91 }, { 4.010, 92 }, { 4.030, 93 }, { 4.050, 94 } },
{ { 4.070, 95 }, { 4.090, 96 } },
{ { 4.10, 100}, { 4.15,100 }, { 4.20, 100} },
}

local defaultSensor = "RxBt" -- RxBt / A1 / A3/ VFAS / Batt

--------------------------------------------------------------
local function log(s)
--print("BattAnalog: " .. s)
print("BattAnalog: " .. s)
end
--------------------------------------------------------------

Expand All @@ -61,7 +97,24 @@ local function update(wgt, options)
wgt.options.Sensor = defaultSensor
end

wgt.options.source_name = ""
if (type(wgt.options.Sensor) == "number") then
local source_name = getSourceName(wgt.options.Sensor)
if (source_name ~= nil) then
if string.byte(string.sub(source_name,1,1)) > 127 then
source_name = string.sub(source_name,2,-1) -- ???? why?
end
if string.byte(string.sub(source_name,1,1)) > 127 then
source_name = string.sub(source_name,2,-1) -- ???? why?
end
log(string.format("source_name: %s", source_name))
wgt.options.source_name = source_name
end
end

wgt.options.Show_Total_Voltage = wgt.options.Show_Total_Voltage % 2 -- modulo due to bug that cause the value to be other than 0|1

log(string.format("wgt.options.Lithium_Ion: %s", wgt.options.Lithium_Ion))
end


Expand All @@ -80,10 +133,8 @@ local function create(zone, options)
vMin = 0,
vTotalLive = 0,
vPercent = 0,

cellCount = 0,
vCellLive = 0,

mainValue = 0,
secondaryValue = 0
}
Expand Down Expand Up @@ -127,17 +178,15 @@ local function detectResetEvent(wgt)
return
end


-- reset telemetry detected
wgt.telemResetLowestMinRSSI = 101

-- notify event
onTelemetryResetEvent(wgt)

end

--- This function return the percentage remaining in a single Lipo cel
local function getCellPercent(cellValue)
local function getCellPercent(wgt, cellValue)
if cellValue == nil then
return 0
end
Expand All @@ -147,12 +196,36 @@ local function getCellPercent(cellValue)
return 100
end

for i, v in ipairs(myArrayPercentList) do
if v[1] >= cellValue then
result = v[2]
break
local _percentListSplit = _lipoPercentListSplit
if wgt.options.Lithium_Ion == 1 then
_percentListSplit = _liionPercentListSplit
end


for i1, v1 in ipairs(_percentListSplit) do
--log(string.format("sub-list#: %s, head:%f, length: %d, last: %.3f", i1,v1[1][1], #v1, v1[#v1][1]))
--is the cellVal < last-value-on-sub-list? (first-val:v1[1], last-val:v1[#v1])
if (cellValue <= v1[#v1][1]) then
-- cellVal is in this sub-list, find the exact value
--log("this is the list")
for i2, v2 in ipairs(v1) do
--log(string.format("cell#: %s, %.3f--> %d%%", i2,v2[1], v2[2]))
if v2[1] >= cellValue then
result = v2[2]
--log(string.format("result: %d%%", result))
--cpuProfilerAdd(wgt, 'cell-perc', t4);
return result
end
end
end
end

--for i, v in ipairs(_percentListSplit) do
-- if v[1] >= cellValue then
-- result = v[2]
-- break
-- end
--end
return result
end

Expand Down Expand Up @@ -193,7 +266,6 @@ local function calculateBatteryData(wgt)
local v = getValue(wgt.options.Sensor)
local fieldinfo = getFieldInfo(wgt.options.Sensor)
log("wgt.options.Sensor: " .. wgt.options.Sensor)
log("v: " .. v)

if type(v) == "table" then
-- multi cell values using FLVSS liPo Voltage Sensor
Expand All @@ -206,7 +278,7 @@ local function calculateBatteryData(wgt)
elseif v ~= nil and v >= 1 then
-- single cell or VFAS lipo sensor
if fieldinfo then
log("single value: " .. fieldinfo['name'] .. "=" .. v)
log(wgt.options.source_name .. ", value: " .. fieldinfo.name .. "=" .. v)
else
log("only one cell using Ax lipo sensor")
end
Expand All @@ -222,6 +294,7 @@ local function calculateBatteryData(wgt)
end

local newCellCount = calcCellCount(wgt, v)
log("newCellCount: " .. newCellCount)

-- this is necessary for simu where cell-count can change
if newCellCount ~= wgt.cellCount then
Expand All @@ -237,7 +310,7 @@ local function calculateBatteryData(wgt)
wgt.cellCount = newCellCount
wgt.vTotalLive = v
wgt.vCellLive = wgt.vTotalLive / wgt.cellCount
wgt.vPercent = getCellPercent(wgt.vCellLive)
wgt.vPercent = getCellPercent(wgt, wgt.vCellLive)

-- log("wgt.vCellLive: ".. wgt.vCellLive)
-- log("wgt.vPercent: ".. wgt.vPercent)
Expand Down Expand Up @@ -331,9 +404,9 @@ local function drawBattery(wgt, myBatt)
--lcd.drawText(wgt.zone.x + myBatt.x + 20, wgt.zone.y + myBatt.y + 5, string.format("%2.1fV", wgt.mainValue), LEFT + MIDSIZE + wgt.text_color)
end

--- Zone size: 70x39 1/8th top bar
--- Zone size: 70x39 top bar
local function refreshZoneTiny(wgt)
local myString = string.format("%2.1fV", wgt.mainValue)
local myString = string.format("%2.2fV", wgt.mainValue)

-- write text
lcd.drawText(wgt.zone.x + wgt.zone.w - 25, wgt.zone.y + 5, wgt.vPercent .. "%", RIGHT + SMLSIZE + wgt.text_color + wgt.no_telem_blink)
Expand All @@ -349,18 +422,18 @@ end

--- Zone size: 160x32 1/8th
local function refreshZoneSmall(wgt)
local myBatt = { ["x"] = 0, ["y"] = 0, ["w"] = 155, ["h"] = 35, ["segments_w"] = 25, ["color"] = WHITE, ["cath_w"] = 6, ["cath_h"] = 20 }
local myBatt = { ["x"] = 5, ["y"] = 5, ["w"] = wgt.zone.w - 10, ["h"] = wgt.zone.h - 9, ["segments_w"] = 25, ["color"] = WHITE, ["cath_w"] = 6, ["cath_h"] = 20 }

-- fill battery
local fill_color = getPercentColor(wgt.vPercent)
lcd.drawGauge(wgt.zone.x, wgt.zone.y, myBatt.w, myBatt.h, wgt.vPercent, 100, fill_color)
lcd.drawGauge(myBatt.x, myBatt.y, myBatt.w, myBatt.h, wgt.vPercent, 100, fill_color)

-- draw battery
lcd.drawRectangle(wgt.zone.x + myBatt.x, wgt.zone.y + myBatt.y, myBatt.w, myBatt.h, WHITE, 2)
lcd.drawRectangle(myBatt.x, myBatt.y, myBatt.w, myBatt.h, WHITE, 2)

-- write text
local topLine = string.format("%2.1fV %2.0f%%", wgt.mainValue, wgt.vPercent)
lcd.drawText(wgt.zone.x + 20, wgt.zone.y + 2, topLine, MIDSIZE + wgt.text_color + wgt.no_telem_blink)
local topLine = string.format(" %2.2f V %2.0f %%", wgt.mainValue, wgt.vPercent)
lcd.drawText(myBatt.x + 15, myBatt.y + 1, topLine, MIDSIZE + wgt.text_color + wgt.no_telem_blink)
end


Expand All @@ -370,30 +443,32 @@ local function refreshZoneMedium(wgt)
local myBatt = { ["x"] = 0, ["y"] = 0, ["w"] = 50, ["h"] = wgt.zone.h, ["segments_w"] = 15, ["color"] = WHITE, ["cath_w"] = 26, ["cath_h"] = 10, ["segments_h"] = 16 }

-- draw values
lcd.drawText(wgt.zone.x + myBatt.w + 10, wgt.zone.y, string.format("%2.1fV", wgt.mainValue), DBLSIZE + wgt.text_color + wgt.no_telem_blink)
lcd.drawText(wgt.zone.x + myBatt.w + 10, wgt.zone.y + 30, string.format("%2.0f%%", wgt.vPercent), MIDSIZE + wgt.text_color + wgt.no_telem_blink)
lcd.drawText(wgt.zone.x + myBatt.w + 10, wgt.zone.y, string.format("%2.2f V", wgt.mainValue), DBLSIZE + wgt.text_color + wgt.no_telem_blink)
lcd.drawText(wgt.zone.x + myBatt.w + 12, wgt.zone.y + 30, string.format("%2.0f %%", wgt.vPercent), MIDSIZE + wgt.text_color + wgt.no_telem_blink)
lcd.drawText(wgt.zone.x + wgt.zone.w - 5, wgt.zone.y + wgt.zone.h -55, wgt.options.source_name, RIGHT + SMLSIZE + wgt.text_color + wgt.no_telem_blink)
if wgt.options.Show_Total_Voltage == 0 then
lcd.drawText(wgt.zone.x + wgt.zone.w, wgt.zone.y + wgt.zone.h -35, string.format("%2.1fV %dS", wgt.secondaryValue, wgt.cellCount), RIGHT + SMLSIZE + wgt.text_color + wgt.no_telem_blink)
lcd.drawText(wgt.zone.x + wgt.zone.w - 5, wgt.zone.y + wgt.zone.h -35, string.format("%2.2fV %dS", wgt.secondaryValue, wgt.cellCount), RIGHT + SMLSIZE + wgt.text_color + wgt.no_telem_blink)
else
--lcd.drawText(wgt.zone.x, wgt.zone.y + 40, string.format("%2.1fV", wgt.mainValue), DBLSIZE + wgt.text_color + wgt.no_telem_blink)
--lcd.drawText(wgt.zone.x, wgt.zone.y + 40, string.format("%2.2fV", wgt.mainValue), DBLSIZE + wgt.text_color + wgt.no_telem_blink)
end
lcd.drawText(wgt.zone.x + wgt.zone.w, wgt.zone.y + wgt.zone.h - 20, string.format("Min %2.2fV", wgt.vMin), RIGHT + SMLSIZE + wgt.text_color + wgt.no_telem_blink)
lcd.drawText(wgt.zone.x + wgt.zone.w - 5, wgt.zone.y + wgt.zone.h - 20, string.format("Min %2.2fV", wgt.vMin), RIGHT + SMLSIZE + wgt.text_color + wgt.no_telem_blink)

-- more info if 1/4 is high enough (without trim & slider)
if wgt.zone.h > 80 then
end

drawBattery(wgt, myBatt)

end

--- Zone size: 192x152 1/2
local function refreshZoneLarge(wgt)
local myBatt = { ["x"] = 0, ["y"] = 0, ["w"] = 76, ["h"] = wgt.zone.h, ["segments_h"] = 30, ["color"] = WHITE, ["cath_w"] = 30, ["cath_h"] = 10 }

lcd.drawText(wgt.zone.x + wgt.zone.w, wgt.zone.y + 0, string.format("%2.1fV", wgt.mainValue), RIGHT + DBLSIZE + wgt.text_color)
lcd.drawText(wgt.zone.x + wgt.zone.w, wgt.zone.y + 30, wgt.vPercent .. "%", RIGHT + DBLSIZE + wgt.text_color)
lcd.drawText(wgt.zone.x + wgt.zone.w, wgt.zone.y + wgt.zone.h - 35, string.format("%2.1fV %dS", wgt.secondaryValue, wgt.cellCount), RIGHT + SMLSIZE + wgt.text_color)
lcd.drawText(wgt.zone.x + wgt.zone.w, wgt.zone.y + 10, string.format("%2.2f V", wgt.mainValue), RIGHT + DBLSIZE + wgt.text_color)
lcd.drawText(wgt.zone.x + wgt.zone.w, wgt.zone.y + 40, wgt.vPercent .. " %", RIGHT + DBLSIZE + wgt.text_color)

lcd.drawText(wgt.zone.x + wgt.zone.w, wgt.zone.y + wgt.zone.h - 53, wgt.options.source_name, RIGHT + SMLSIZE + wgt.text_color)
lcd.drawText(wgt.zone.x + wgt.zone.w, wgt.zone.y + wgt.zone.h - 35, string.format("%2.2fV %dS", wgt.secondaryValue, wgt.cellCount), RIGHT + SMLSIZE + wgt.text_color)
lcd.drawText(wgt.zone.x + wgt.zone.w, wgt.zone.y + wgt.zone.h - 20, string.format("min %2.2fV", wgt.vMin), RIGHT + SMLSIZE + wgt.text_color + wgt.no_telem_blink)

drawBattery(wgt, myBatt)
Expand All @@ -411,12 +486,14 @@ local function refreshZoneXLarge(wgt)
local myBatt = { ["x"] = 10, ["y"] = 0, ["w"] = 80, ["h"] = h, ["segments_h"] = 30, ["color"] = WHITE, ["cath_w"] = 30, ["cath_h"] = 10 }

-- draw right text section
lcd.drawText(x + w, y + myBatt.y + 0, string.format("%2.1fV %2.0f%%", wgt.mainValue, wgt.vPercent), RIGHT + XXLSIZE + wgt.text_color + wgt.no_telem_blink)
lcd.drawText(x + w, y +h - 60 , string.format("%2.1fV %dS", wgt.secondaryValue, wgt.cellCount), RIGHT + DBLSIZE + wgt.text_color + wgt.no_telem_blink)
--lcd.drawText(x + w, y + myBatt.y + 0, string.format("%2.2f V %2.0f%%", wgt.mainValue, wgt.vPercent), RIGHT + XXLSIZE + wgt.text_color + wgt.no_telem_blink)
--lcd.drawText(x + w, y + myBatt.y + 0, string.format("%2.2f V", wgt.mainValue), RIGHT + XXLSIZE + wgt.text_color + wgt.no_telem_blink)
lcd.drawText(x + 150, y + myBatt.y + 0, string.format("%2.2f V", wgt.mainValue), XXLSIZE + wgt.text_color + wgt.no_telem_blink)
lcd.drawText(x + 150, y + myBatt.y + 70, wgt.options.source_name, DBLSIZE + wgt.text_color + wgt.no_telem_blink)
lcd.drawText(x + w, y + myBatt.y + 80, string.format("%2.0f%%", wgt.vPercent), RIGHT + DBLSIZE + wgt.text_color + wgt.no_telem_blink)
lcd.drawText(x + w, y +h - 60 , string.format("%2.2fV %dS", wgt.secondaryValue, wgt.cellCount), RIGHT + DBLSIZE + wgt.text_color + wgt.no_telem_blink)
lcd.drawText(x + w, y +h - 30 , string.format("min %2.2fV", wgt.vMin), RIGHT + DBLSIZE + wgt.text_color + wgt.no_telem_blink)

drawBattery(wgt, myBatt)

return
end

Expand All @@ -435,13 +512,16 @@ local function refreshAppMode(wgt, event, touchState)
end

-- draw right text section
lcd.drawText(x + w - 20, y + myBatt.y + 0, string.format("%2.1fV %2.0f%%", wgt.mainValue, wgt.vPercent), RIGHT + XXLSIZE + wgt.text_color + wgt.no_telem_blink)
lcd.drawText(x + w - 20, y + 80, string.format("%2.1fV", wgt.secondaryValue), RIGHT + XXLSIZE + wgt.text_color + wgt.no_telem_blink)
lcd.drawText(x + w - 20, y + 150, string.format("%dS", wgt.cellCount), RIGHT + XXLSIZE + wgt.text_color + wgt.no_telem_blink)
lcd.drawText(x + w - 20, y +h - 30, string.format("min %2.2fV", wgt.vMin), RIGHT + DBLSIZE + wgt.text_color + wgt.no_telem_blink)
--lcd.drawText(x + w - 20, y + myBatt.y + 0, string.format("%2.2f V %2.0f%%", wgt.mainValue, wgt.vPercent), RIGHT + XXLSIZE + wgt.text_color + wgt.no_telem_blink)
lcd.drawText(x + 180, y + 0, wgt.options.source_name, DBLSIZE + wgt.text_color + wgt.no_telem_blink)
lcd.drawText(x + 180, y + 30, string.format("%2.2f V", wgt.mainValue), XXLSIZE + wgt.text_color + wgt.no_telem_blink)
lcd.drawText(x + 180, y + 90, string.format("%2.0f %%", wgt.vPercent), XXLSIZE + wgt.text_color + wgt.no_telem_blink)

drawBattery(wgt, myBatt)
lcd.drawText(x + w - 20, y + h - 90, string.format("%2.2fV", wgt.secondaryValue), RIGHT + DBLSIZE + wgt.text_color + wgt.no_telem_blink)
lcd.drawText(x + w - 20, y + h - 60, string.format("%dS", wgt.cellCount), RIGHT + DBLSIZE + wgt.text_color + wgt.no_telem_blink)
lcd.drawText(x + w - 20, y + h - 30, string.format("min %2.2fV", wgt.vMin), RIGHT + DBLSIZE + wgt.text_color + wgt.no_telem_blink)

drawBattery(wgt, myBatt)
return
end

Expand All @@ -452,9 +532,7 @@ local function background(wgt)
end

detectResetEvent(wgt)

calculateBatteryData(wgt)

end

local function refresh(wgt, event, touchState)
Expand All @@ -466,9 +544,7 @@ local function refresh(wgt, event, touchState)
if (wgt.options.Show_Total_Voltage == nil) then return end

detectResetEvent(wgt)

calculateBatteryData(wgt)

if wgt.isDataAvailable then
wgt.no_telem_blink = 0
wgt.text_color = wgt.options.Color
Expand All @@ -479,16 +555,11 @@ local function refresh(wgt, event, touchState)

if (event ~= nil) then
refreshAppMode(wgt, event, touchState)
elseif wgt.zone.w > 380 and wgt.zone.h > 165 then
refreshZoneXLarge(wgt)
elseif wgt.zone.w > 180 and wgt.zone.h > 145 then
refreshZoneLarge(wgt)
elseif wgt.zone.w > 170 and wgt.zone.h > 65 then
refreshZoneMedium(wgt)
elseif wgt.zone.w > 150 and wgt.zone.h > 28 then
refreshZoneSmall(wgt)
elseif wgt.zone.w > 65 and wgt.zone.h > 35 then
refreshZoneTiny(wgt)
elseif wgt.zone.w > 380 and wgt.zone.h > 165 then refreshZoneXLarge(wgt)
elseif wgt.zone.w > 180 and wgt.zone.h > 145 then refreshZoneLarge(wgt)
elseif wgt.zone.w > 170 and wgt.zone.h > 65 then refreshZoneMedium(wgt)
elseif wgt.zone.w > 150 and wgt.zone.h > 28 then refreshZoneSmall(wgt)
elseif wgt.zone.w > 65 and wgt.zone.h > 35 then refreshZoneTiny(wgt)
end

end
Expand Down

0 comments on commit 4edfc8f

Please sign in to comment.