BattCheck updated look&feel
bigger values of the important cell-value/percentage on every widget size View is visible even while selecting the widget (instead of warn message) move the values inside the battery picture, to enable larger font
This commit is contained in:
@@ -19,7 +19,7 @@
|
||||
local shadowed = 0
|
||||
|
||||
local options = {
|
||||
{ "Sensor", SOURCE, 1 },
|
||||
{ "Sensor", SOURCE, 0 },
|
||||
{ "Color", COLOR, WHITE },
|
||||
{ "Shadow", BOOL, 0 }
|
||||
}
|
||||
@@ -28,12 +28,24 @@ local options = {
|
||||
local function create(zone, options)
|
||||
local myZone = { zone=zone, options=options, counter=0 }
|
||||
histCellData = {}
|
||||
|
||||
-- use default if user did not set, So widget is operational when selecting the widget
|
||||
if myZone.options.Sensor == 0 then
|
||||
myZone.options.Sensor = "Cels"
|
||||
end
|
||||
|
||||
return myZone
|
||||
end
|
||||
|
||||
-- This function allow updates when you change widgets settings
|
||||
local function update(myZone, options)
|
||||
myZone.options = options
|
||||
|
||||
-- use default if user did not set, So widget is operational when selecting the widget
|
||||
if myZone.options.Sensor == 0 then
|
||||
myZone.options.Sensor = "Cels"
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
-- A quick and dirty check for empty table
|
||||
@@ -100,6 +112,9 @@ end
|
||||
|
||||
--- This function return the percentage remaining in a single Lipo cel
|
||||
local function getCellPercent(cellValue)
|
||||
if cellValue == nil then
|
||||
return 0
|
||||
end
|
||||
--## 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}}
|
||||
@@ -129,7 +144,8 @@ local function getCellAvg(cellData)
|
||||
end
|
||||
end
|
||||
|
||||
-- This function returns green at 100%, red bellow 30% and graduate in betwwen
|
||||
-- This function returns green at 100%, red bellow 30% and graduate in between
|
||||
-- color for battery
|
||||
local function getPercentColor(cpercent)
|
||||
if cpercent < 30 then
|
||||
return lcd.RGB(0xff, 0, 0)
|
||||
@@ -140,7 +156,8 @@ local function getPercentColor(cpercent)
|
||||
end
|
||||
end
|
||||
|
||||
-- This function returns green at gvalue, red at rvalue and graduate in betwwen
|
||||
-- This function returns green at gvalue, red at rvalue and graduate in between
|
||||
-- color for cell
|
||||
local function getRangeColor(value, gvalue, rvalue)
|
||||
if gvalue > rvalue and not range==0 then
|
||||
range = gvalue - rvalue
|
||||
@@ -162,8 +179,9 @@ end
|
||||
-- This size is for top bar widgets
|
||||
local function zoneTiny(zone)
|
||||
local mySensor = getCels(zone.options.Sensor)
|
||||
if type(mySensor) == "table" then
|
||||
local myString = string.format("%2.1fV", getCellSum(mySensor))
|
||||
local isHaveData = (type(mySensor) == "table")
|
||||
if isHaveData then
|
||||
local myString = string.format("%2.1fV", getCellMin(mySensor))
|
||||
local percent = getCellPercent(getCellAvg(mySensor))
|
||||
lcd.drawText(zone.zone.x + zone.zone.w, zone.zone.y, percent.."%", RIGHT + SMLSIZE + CUSTOM_COLOR)
|
||||
lcd.drawText(zone.zone.x + zone.zone.w, zone.zone.y + 15, myString, RIGHT + SMLSIZE + CUSTOM_COLOR)
|
||||
@@ -177,28 +195,33 @@ end
|
||||
|
||||
--- Size is 160x30 1/8th
|
||||
local function zoneSmall(zone)
|
||||
local myBatt = {["x"]=0, ["y"]=0, ["w"]=75, ["h"]=28, ["segments_w"]=15, ["color"]=WHITE, ["cath_w"]=6, ["cath_h"]=20}
|
||||
local myBatt = {["x"]=0, ["y"]=0, ["w"]=155, ["h"]=35, ["segments_w"]=25, ["color"]=WHITE, ["cath_w"]=6, ["cath_h"]=20}
|
||||
local mySensor = getCels(zone.options.Sensor)
|
||||
local isHaveData = (type(mySensor) == "table")
|
||||
|
||||
lcd.setColor(CUSTOM_COLOR, zone.options.Color)
|
||||
if type(mySensor) == "table" then
|
||||
local myString = string.format("%2.1fV", getCellSum(mySensor)).." ("..getCellCount(mySensor).."S)"
|
||||
local percent = getCellPercent(getCellAvg(mySensor))
|
||||
lcd.drawText(zone.zone.x + zone.zone.w, zone.zone.y + 22, myString, RIGHT + SMLSIZE + CUSTOM_COLOR + shadowed)
|
||||
lcd.drawText(zone.zone.x + zone.zone.w, zone.zone.y, percent.."%", RIGHT + MIDSIZE + CUSTOM_COLOR + shadowed)
|
||||
-- fils batt
|
||||
lcd.setColor(CUSTOM_COLOR, getPercentColor(percent))
|
||||
lcd.drawGauge(zone.zone.x+2, zone.zone.y+2, 75, zone.zone.h - 4, percent, 100, CUSTOM_COLOR)
|
||||
-- draws bat
|
||||
lcd.setColor(CUSTOM_COLOR, WHITE)
|
||||
lcd.drawRectangle(zone.zone.x + myBatt.x, zone.zone.y + myBatt.y, myBatt.w, myBatt.h, CUSTOM_COLOR, 2)
|
||||
lcd.drawFilledRectangle(zone.zone.x + myBatt.x + myBatt.w, zone.zone.y + myBatt.h/2 - myBatt.cath_h/2, myBatt.cath_w, myBatt.cath_h, CUSTOM_COLOR)
|
||||
for i=1, myBatt.w - myBatt.segments_w, myBatt.segments_w do
|
||||
lcd.drawRectangle(zone.zone.x + myBatt.x + i, zone.zone.y + myBatt.y, myBatt.segments_w, myBatt.h, CUSTOM_COLOR, 1)
|
||||
end
|
||||
local percent = getCellPercent(getCellAvg(mySensor))
|
||||
|
||||
-- draws bat
|
||||
lcd.setColor(CUSTOM_COLOR, WHITE)
|
||||
lcd.drawRectangle(zone.zone.x + myBatt.x, zone.zone.y + myBatt.y, myBatt.w, myBatt.h, CUSTOM_COLOR, 2)
|
||||
lcd.drawFilledRectangle(zone.zone.x + myBatt.x + myBatt.w, zone.zone.y + myBatt.h/2 - myBatt.cath_h/2, myBatt.cath_w, myBatt.cath_h, CUSTOM_COLOR)
|
||||
|
||||
local mainValue = getCellMin(mySensor)
|
||||
local secondaryValue = getCellSum(mySensor)
|
||||
|
||||
-- fils batt
|
||||
lcd.setColor(CUSTOM_COLOR, getPercentColor(percent))
|
||||
lcd.drawGauge(zone.zone.x+2, zone.zone.y+2, myBatt.w-4, zone.zone.h, percent, 100, CUSTOM_COLOR)
|
||||
-- write text
|
||||
if isHaveData then
|
||||
lcd.setColor(CUSTOM_COLOR, zone.options.Color)
|
||||
local topLine = string.format("%2.1fV %2.0f%%", mainValue, percent)
|
||||
lcd.drawText(zone.zone.x + 20, zone.zone.y +2, topLine , MIDSIZE + CUSTOM_COLOR + shadowed)
|
||||
else
|
||||
lcd.drawText(zone.zone.x, zone.zone.y+10, "No FLVSS sensor data", LEFT + SMLSIZE + INVERS + CUSTOM_COLOR + shadowed)
|
||||
lcd.drawText(zone.zone.x + 10, zone.zone.y+10, "No Voltage Data", LEFT + SMLSIZE + INVERS + CUSTOM_COLOR + shadowed)
|
||||
end
|
||||
|
||||
|
||||
return
|
||||
end
|
||||
|
||||
@@ -206,11 +229,12 @@ end
|
||||
local function zoneMedium(zone)
|
||||
local myBatt = {["x"]=0, ["y"]=0, ["w"]=95, ["h"]=35, ["segments_w"]=15, ["color"]=WHITE, ["cath_w"]=6, ["cath_h"]=20}
|
||||
local mySensor = getCels(zone.options.Sensor)
|
||||
local isHaveData = (type(mySensor) == "table")
|
||||
|
||||
lcd.setColor(CUSTOM_COLOR, zone.options.Color)
|
||||
if type(mySensor) == "table" then
|
||||
if isHaveData then
|
||||
local percent = getCellPercent(getCellAvg(mySensor))
|
||||
lcd.drawText(zone.zone.x + zone.zone.w, zone.zone.y+5, percent.."% ", RIGHT + MIDSIZE + CUSTOM_COLOR + shadowed)
|
||||
lcd.drawText(zone.zone.x + myBatt.w + 20, zone.zone.y, string.format("%2.1fV", getCellMin(mySensor)) , DBLSIZE + CUSTOM_COLOR + shadowed)
|
||||
|
||||
-- fils batt
|
||||
lcd.setColor(CUSTOM_COLOR, getPercentColor(percent))
|
||||
@@ -225,13 +249,13 @@ local function zoneMedium(zone)
|
||||
lcd.drawRectangle(zone.zone.x + pos[i].x, zone.zone.y + pos[i].y, 59, 20, CUSTOM_COLOR,1)
|
||||
end
|
||||
else
|
||||
lcd.drawText(zone.zone.x, zone.zone.y+35, "No FLVSS sensor data", LEFT + SMLSIZE + INVERS + CUSTOM_COLOR)
|
||||
lcd.drawText(zone.zone.x, zone.zone.y+35, "No Voltage Data", LEFT + SMLSIZE + INVERS + CUSTOM_COLOR)
|
||||
end
|
||||
-- draws bat
|
||||
lcd.setColor(CUSTOM_COLOR, WHITE)
|
||||
lcd.drawRectangle(zone.zone.x + myBatt.x , zone.zone.y + myBatt.y, myBatt.w, myBatt.h, CUSTOM_COLOR, 2)
|
||||
lcd.drawFilledRectangle(zone.zone.x + myBatt.x + myBatt.w, zone.zone.y + myBatt.h/2 - myBatt.cath_h/2, myBatt.cath_w, myBatt.cath_h, CUSTOM_COLOR)
|
||||
lcd.drawText(zone.zone.x + myBatt.x + 5 , zone.zone.y + myBatt.y + 5, string.format("%2.1fV", getCellSum(mySensor)), LEFT + MIDSIZE + CUSTOM_COLOR + shadowed)
|
||||
lcd.drawText(zone.zone.x + myBatt.x + 20 , zone.zone.y + myBatt.y + 5, string.format("%2.0f%%", getCellPercent(getCellAvg(mySensor))), LEFT + MIDSIZE + CUSTOM_COLOR + shadowed)
|
||||
--for i=1, myBatt.w - myBatt.segments_w, myBatt.segments_w do
|
||||
-- lcd.drawRectangle(zone.zone.x + myBatt.x + i, zone.zone.y + myBatt.y, myBatt.segments_w, myBatt.h, CUSTOM_COLOR, 1)
|
||||
--end
|
||||
@@ -242,13 +266,15 @@ end
|
||||
local function zoneLarge(zone)
|
||||
local myBatt = {["x"]=0, ["y"]=18, ["w"]=76, ["h"]=121, ["segments_h"]=30, ["color"]=WHITE, ["cath_w"]=30, ["cath_h"]=10}
|
||||
local mySensor = getCels(zone.options.Sensor)
|
||||
local isHaveData = (type(mySensor) == "table")
|
||||
|
||||
lcd.setColor(CUSTOM_COLOR, zone.options.Color)
|
||||
if type(mySensor) == "table" then
|
||||
if isHaveData then
|
||||
local percent = getCellPercent(getCellAvg(mySensor))
|
||||
lcd.drawText(zone.zone.x+zone.zone.w, zone.zone.y+15, percent.."%", RIGHT + DBLSIZE + CUSTOM_COLOR + shadowed)
|
||||
lcd.drawText(zone.zone.x+zone.zone.w, zone.zone.y+44, string.format("%2.1fV", getCellSum(mySensor)), RIGHT + MIDSIZE + CUSTOM_COLOR + shadowed)
|
||||
lcd.drawText(zone.zone.x+zone.zone.w, zone.zone.y+65, getCellCount(mySensor).."S", RIGHT + MIDSIZE + CUSTOM_COLOR + shadowed)
|
||||
|
||||
lcd.drawText(zone.zone.x+zone.zone.w, zone.zone.y, percent.."%", RIGHT + DBLSIZE + CUSTOM_COLOR + shadowed)
|
||||
lcd.drawText(zone.zone.x+zone.zone.w, zone.zone.y+30, string.format("%2.1fV", getCellMin(mySensor)), RIGHT + DBLSIZE + CUSTOM_COLOR + shadowed)
|
||||
lcd.drawText(zone.zone.x+zone.zone.w, zone.zone.y+70, string.format("%2.1fV %2.1fS", getCellSum(mySensor), getCellCount(mySensor)), RIGHT + SMLSIZE + CUSTOM_COLOR + shadowed)
|
||||
-- fils batt
|
||||
lcd.setColor(CUSTOM_COLOR, getPercentColor(percent))
|
||||
lcd.drawFilledRectangle(zone.zone.x + myBatt.x, zone.zone.y + myBatt.y + myBatt.h + myBatt.cath_h - math.floor(percent/100 * myBatt.h), myBatt.w, math.floor(percent/100 * myBatt.h), CUSTOM_COLOR)
|
||||
@@ -262,7 +288,7 @@ local function zoneLarge(zone)
|
||||
lcd.drawRectangle(zone.zone.x + pos[i].x, zone.zone.y + pos[i].y, 59, 20, CUSTOM_COLOR, 1)
|
||||
end
|
||||
else
|
||||
lcd.drawText(zone.zone.x+5, zone.zone.y, "No FLVSS sensor data", LEFT + SMLSIZE + INVERS + CUSTOM_COLOR + shadowed)
|
||||
lcd.drawText(zone.zone.x+5, zone.zone.y, "No Voltage Data", LEFT + SMLSIZE + INVERS + CUSTOM_COLOR + shadowed)
|
||||
end
|
||||
-- draws bat
|
||||
lcd.setColor(CUSTOM_COLOR, WHITE)
|
||||
@@ -278,9 +304,10 @@ end
|
||||
local function zoneXLarge(zone)
|
||||
local myBatt = {["x"]=10, ["y"]=20, ["w"]=80, ["h"]=121, ["segments_h"]=30, ["color"]=WHITE, ["cath_w"]=30, ["cath_h"]=10}
|
||||
local mySensor = getCels(zone.options.Sensor)
|
||||
local isHaveData = (type(mySensor) == "table")
|
||||
|
||||
lcd.setColor(CUSTOM_COLOR, zone.options.Color)
|
||||
if type(mySensor) == "table" then
|
||||
if isHaveData then
|
||||
local percent = getCellPercent(getCellAvg(mySensor))
|
||||
-- fils batt
|
||||
lcd.setColor(CUSTOM_COLOR, getPercentColor(percent))
|
||||
@@ -288,8 +315,13 @@ local function zoneXLarge(zone)
|
||||
-- draw right text section
|
||||
lcd.setColor(CUSTOM_COLOR, zone.options.Color)
|
||||
lcd.drawText(zone.zone.x+zone.zone.w, zone.zone.y + myBatt.y, percent.."%", RIGHT + DBLSIZE + CUSTOM_COLOR + shadowed)
|
||||
lcd.drawText(zone.zone.x+zone.zone.w, zone.zone.y + myBatt.y + 63, string.format("%2.1fV", getCellSum(mySensor)), RIGHT + MIDSIZE + CUSTOM_COLOR + shadowed)
|
||||
lcd.drawText(zone.zone.x+zone.zone.w, zone.zone.y + myBatt.y + 105, getCellCount(mySensor).."S", RIGHT + MIDSIZE + CUSTOM_COLOR + shadowed)
|
||||
|
||||
local mainValue = getCellMin(mySensor)
|
||||
local secondaryValue = getCellSum(mySensor)
|
||||
|
||||
lcd.drawText(zone.zone.x+zone.zone.w, zone.zone.y + myBatt.y + 30, string.format("%2.1fV", mainValue), RIGHT + DBLSIZE + CUSTOM_COLOR + shadowed)
|
||||
lcd.drawText(zone.zone.x+zone.zone.w, zone.zone.y + myBatt.y + 105, string.format("%2.1fV %2.1fS", secondaryValue, getCellCount(mySensor)) , RIGHT + SMLSIZE + CUSTOM_COLOR + shadowed)
|
||||
|
||||
-- draw cells
|
||||
local pos = {{x=111, y=38}, {x=164, y=38}, {x=217, y=38}, {x=111, y=57}, {x=164, y=57}, {x=217, y=57}}
|
||||
for i=1, getCellCount(mySensor), 1 do
|
||||
@@ -309,7 +341,7 @@ local function zoneXLarge(zone)
|
||||
lcd.drawText(zone.zone.x + pos[i].x+10, zone.zone.y + pos[i].y, string.format("%.2f", histCellData[i]), CUSTOM_COLOR + shadowed)
|
||||
end
|
||||
else
|
||||
lcd.drawText(zone.zone.x+5, zone.zone.y, "No FLVSS sensor data", LEFT + SMLSIZE + INVERS + CUSTOM_COLOR)
|
||||
lcd.drawText(zone.zone.x+5, zone.zone.y, "No Voltage Data", LEFT + SMLSIZE + INVERS + CUSTOM_COLOR)
|
||||
end
|
||||
-- draws bat
|
||||
lcd.setColor(CUSTOM_COLOR, WHITE)
|
||||
@@ -320,9 +352,9 @@ local function zoneXLarge(zone)
|
||||
end
|
||||
-- draw middle rectangles
|
||||
lcd.drawRectangle(zone.zone.x + 110, zone.zone.y + 38, 161, 40, CUSTOM_COLOR, 1)
|
||||
lcd.drawText(zone.zone.x + 270, zone.zone.y + 21, "Live data", RIGHT + SMLSIZE + INVERS + CUSTOM_COLOR + shadowed)
|
||||
lcd.drawText(zone.zone.x + 220, zone.zone.y + 21, "Live data", RIGHT + SMLSIZE + INVERS + CUSTOM_COLOR + shadowed)
|
||||
lcd.drawRectangle(zone.zone.x + 110, zone.zone.y + 110, 161, 40, CUSTOM_COLOR, 1)
|
||||
lcd.drawText(zone.zone.x + 270, zone.zone.y + 93, "Lowest data", RIGHT + SMLSIZE + INVERS + CUSTOM_COLOR + shadowed)
|
||||
lcd.drawText(zone.zone.x + 230, zone.zone.y + 93, "Lowest data", RIGHT + SMLSIZE + INVERS + CUSTOM_COLOR + shadowed)
|
||||
return
|
||||
end
|
||||
|
||||
@@ -338,16 +370,17 @@ function refresh(myZone)
|
||||
else
|
||||
shadowed = 0
|
||||
end
|
||||
if myZone.options.Sensor == 1 then
|
||||
lcd.drawText(myZone.zone.x+2, myZone.zone.y+2, "Not configured", LEFT + SMLSIZE + CUSTOM_COLOR)
|
||||
lcd.drawText(myZone.zone.x+2, myZone.zone.y+20, "Requires FLVSS sensor", LEFT + SMLSIZE + INVERS + CUSTOM_COLOR)
|
||||
return
|
||||
end
|
||||
if myZone.zone.w > 380 and myZone.zone.h > 165 then zoneXLarge(myZone)
|
||||
elseif myZone.zone.w > 180 and myZone.zone.h > 145 then zoneLarge(myZone)
|
||||
elseif myZone.zone.w > 170 and myZone.zone.h > 65 then zoneMedium(myZone)
|
||||
elseif myZone.zone.w > 150 and myZone.zone.h > 28 then zoneSmall(myZone)
|
||||
elseif myZone.zone.w > 65 and myZone.zone.h > 35 then zoneTiny(myZone)
|
||||
|
||||
--if myZone.options.Sensor == 1 then
|
||||
-- lcd.drawText(myZone.zone.x+2, myZone.zone.y+2, "Not configured", LEFT + SMLSIZE + CUSTOM_COLOR)
|
||||
-- lcd.drawText(myZone.zone.x+2, myZone.zone.y+20, "Requires setting a Voltage Sensor", LEFT + SMLSIZE + INVERS + CUSTOM_COLOR)
|
||||
-- return
|
||||
--end
|
||||
if myZone.zone.w > 380 and myZone.zone.h > 165 then zoneXLarge(myZone)
|
||||
elseif myZone.zone.w > 180 and myZone.zone.h > 145 then zoneLarge(myZone)
|
||||
elseif myZone.zone.w > 170 and myZone.zone.h > 65 then zoneMedium(myZone)
|
||||
elseif myZone.zone.w > 150 and myZone.zone.h > 28 then zoneSmall(myZone)
|
||||
elseif myZone.zone.w > 65 and myZone.zone.h > 35 then zoneTiny(myZone)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user