diff --git a/lib/navigation.ks b/lib/navigation.ks index 959669f..b23f1ed 100644 --- a/lib/navigation.ks +++ b/lib/navigation.ks @@ -45,3 +45,22 @@ function CreateCircularizationNode { return n. } + +// function PredictGeo { +// parameter t. + +// local pos is PositionAt(SHIP,t). +// local rDir is VDOT(SHIP:BODY:NORTH:FOREVECTOR,SHIP:BODY:ANGULARVEL). //the number of radians the body will rotate in one second (negative if rotating counter clockwise when viewed looking down on north +// local dT is t - TIME:SECONDS. +// local geoPos is SHIP:BODY:GeoPositionOf(pos). +// local drift is rDir * dT * CONSTANT:RADTODEG. +// local long is Mod(geoPos:LNG + drift, 360). +// if long < -180 { +// set long to long + 360. +// } +// if long > 180 { +// set long TO long - 360. +// } + +// return LatLng(geoPos:LAT, long). +// } diff --git a/lib/sensors.ks b/lib/sensors.ks index 001b370..5e74605 100644 --- a/lib/sensors.ks +++ b/lib/sensors.ks @@ -24,5 +24,31 @@ function ReadSensor { if not sList:HasKey(s) { return -1. // TODO: is -1 an impossible result for all sensors? I suspect not... } - return s:DISPLAY:TOSCALAR. + + if not sList[s]:ACTIVE { + sList[s]:Toggle(). + } + + // UGH, this appears to be the only way to do this. + local ret is -1. + if s = "PRES" { + set ret to SHIP:SENSORS:PRES. + } + if s = "TEMP" { + set ret to SHIP:SENSORS:TEMP. + } + if s = "ACC" { + set ret to SHIP:SENSORS:ACC:MAG. + } + if s = "GRAV" { + set ret to SHIP:SENSORS:GRAV. + } + if s = "LIGHT" { + set ret to SHIP:SENSORS:LIGHT. + } + + // turn off the sensor when we're done with it + sList[s]:Toggle(). + + return ret. } diff --git a/lib/stabilize_rocket.ks b/lib/stabilize_rocket.ks index a3dbf80..8ad50d6 100644 --- a/lib/stabilize_rocket.ks +++ b/lib/stabilize_rocket.ks @@ -46,7 +46,7 @@ function Hover { function alignForHover { if ReadSensor("PRES") = 0 { // if we're in a vacuum, align with retrograde for smoother horizontal control. - lock STEERING to SHIP:SRFRETROGRADE. + lock STEERING to LookDirUp(SHIP:SRFRETROGRADE:FOREVECTOR, SHIP:FACING:TOPVECTOR).. print "Aligning with retrograde.". wait until done or VAng(SHIP:FACING:FOREVECTOR, SHIP:SRFRETROGRADE:FOREVECTOR) < 0.1. if done { @@ -55,7 +55,7 @@ function alignForHover { } } else { // ... otherwise just align vertically. - lock STEERING to SHIP:UP. + lock STEERING to LookDirUp(SHIP:UP:FOREVECTOR, SHIP:FACING:TOPVECTOR).. print "Aligning vertical.". wait until done or VAng(SHIP:FACING:FOREVECTOR, SHIP:UP:FOREVECTOR) < 1. if done { diff --git a/prog/rocket.ks b/prog/rocket.ks index 1cff1e7..5ba6c67 100644 --- a/prog/rocket.ks +++ b/prog/rocket.ks @@ -6,6 +6,7 @@ runoncepath("/lib/throttle"). runoncepath("/lib/node"). runoncepath("/lib/stabilize_rocket"). runoncepath("/lib/launch_rocket"). +runoncepath("/lib/sensors"). clearguis(). @@ -36,6 +37,21 @@ set btn:ONTOGGLE to { } }. +MakeMenu( + stk, + MakeButton(rows[0], "SENSOR"), + List( + List("Pressure", "RO", "-1"), + List("Temperature", "RO", "-1"), + List("Acceleration", "RO", "-1"), + List("Gravity", "RO", "-1"), + List("Light", "RO", "-1") + ), + "Refresh", + refreshSensors@, + refreshSensors@ +). + MakeMenu( stk, MakeButton(rows[0], "CONF"), @@ -124,3 +140,12 @@ MakeMenu( iface:show(). wait until false. + +function refreshSensors { + parameter options. + set options["Pressure"]:TEXT to ReadSensor("PRES"):TOSTRING. + set options["Temperature"]:TEXT to ReadSensor("TEMP"):TOSTRING. + set options["Acceleration"]:TEXT to ReadSensor("ACC"):TOSTRING. + set options["Gravity"]:TEXT to ReadSensor("GRAV"):TOSTRING. + set options["Light"]:TEXT to ReadSensor("LIGHT"):TOSTRING. +}