cctweaked_drone/lib/etat.lua
2026-07-19 12:31:11 +02:00

63 lines
2 KiB
Lua

--------------------------------------------------------------------
-- lib/etat.lua : persistance de l'etat du drone (drone.etat)
-- Restaure apres un redemarrage: mode, consigne, et tous les
-- MAPPAGES CALIBRES (propres a chaque vaisseau):
-- roles nom RSC -> lb|rb|lf|rf|prop_l|prop_r
-- gimbal { indexTangage, signeTangage, indexRoulis, signeRoulis }
-- convention normalisee: tangage negatif = nez bas,
-- roulis negatif = penche a gauche
-- joystick direction (devant|derriere|gauche|droite) -> face relay
-- typewriter code de touche -> symbole ("0".."9", "valider", "effacer")
-- velocite nom capteur -> { axe = avant|lateral|vertical,
-- signe = 1|-1 } (positif = avant/gauche/haut)
-- points nom -> { x, y, z } (max NAV.MAX_POINTS)
-- empreintePid parametres de conf au moment de la calib PID
--------------------------------------------------------------------
local Etat = {}
local CHEMIN = "drone.etat"
local DEFAUT = {
mode = "off",
consigneY = nil,
roles = {},
gimbal = nil,
joystick = nil,
typewriter = nil,
velocite = {},
points = {},
pid = nil,
empreintePid = nil,
capaciteParNiveau = nil, -- calib moteur: niveau (1..15) -> su
stressParRpm = nil, -- calib moteur: { helice, prop } su/rpm
decollage = nil,
}
function Etat.charger(journal)
local etat = {}
for k, v in pairs(DEFAUT) do etat[k] = v end
if fs.exists(CHEMIN) then
local f = fs.open(CHEMIN, "r")
local contenu = f.readAll()
f.close()
local lu = textutils.unserialize(contenu)
if type(lu) == "table" then
for k, v in pairs(lu) do etat[k] = v end
journal.info(("etat restaure (mode %s)"):format(etat.mode))
else
journal.alerte("drone.etat illisible, etat par defaut")
end
end
return etat
end
function Etat.sauver(etat)
local f = fs.open(CHEMIN, "w")
if f then
f.write(textutils.serialize(etat))
f.close()
end
end
return Etat