-------------------------------------------------------------------- -- 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