|
Post by MarkH on Oct 14, 2019 17:55:34 GMT
Someone asked to see the Lua code, so here it is. This is the entire contents of 'logic.lua', which is the script for a gauge that has no visual parts to it. You just add this gauge to a panel and it runs the hardware. This isn't tidy code, it's technically still a work in progress.
-- Autopilot
local M_LED_AP_TrimUp = hw_output_add("ARDUINO_MEGA2560_A_D33", false) local M_LED_AP_TrimDown = hw_output_add("ARDUINO_MEGA2560_A_D32", false) local M_LED_AP_APP = hw_output_add("ARDUINO_MEGA2560_A_D27", false) local M_LED_AP_BC = hw_output_add("ARDUINO_MEGA2560_A_D26", false) local M_LED_AP_NAV = hw_output_add("ARDUINO_MEGA2560_A_D29", false) local M_LED_AP_IAS = hw_output_add("ARDUINO_MEGA2560_A_D28", false) local M_LED_AP_ALT = hw_output_add("ARDUINO_MEGA2560_A_D30", false) local M_LED_AP_HDG = hw_output_add("ARDUINO_MEGA2560_A_D31", false) local M_LED_AP_ENG = hw_output_add("ARDUINO_MEGA2560_A_D39", false) --]]
--[[ --local function fif(condition, if_true, if_false) -- if condition then return if_true else return if_false end --end --]] local function fAutopilotStateChange(bAP_On, bHDG_On, bNAV_On, bAPP_On, nIAS_On, bBC_On, bALT_On, nTrimDown_On, nTrimUp_On, nACVolts)
if bAP_On then hw_output_set(M_LED_AP_ENG, true) --hw_output_set(M_LED_AP_DIS, false) else hw_output_set(M_LED_AP_ENG, false) --hw_output_set(M_LED_AP_DIS, true) end hw_output_set(M_LED_AP_HDG, bHDG_On and true or false) -- bHDG_On ? true : false hw_output_set(M_LED_AP_NAV, bNAV_On and true or false) hw_output_set(M_LED_AP_APP, bAPP_On and true or false) hw_output_set(M_LED_AP_ALT, bALT_On and true or false) hw_output_set(M_LED_AP_IAS, (nIAS_On ~= 0) and true or false) hw_output_set(M_LED_AP_BC, bBC_On and true or false) hw_output_set(M_LED_AP_TrimUp, (nTrimUp_On ~= 0) and true or false) hw_output_set(M_LED_AP_TrimDown, (nTrimDown_On ~= 0) and true or false)
end
fsx_variable_subscribe( "AUTOPILOT MASTER", "bool", "AUTOPILOT HEADING LOCK", "bool", "AUTOPILOT NAV1 LOCK", "bool", "AUTOPILOT APPROACH HOLD", "bool", "L:AP_IAS_HOLD", "number", "AUTOPILOT BACKCOURSE HOLD", "bool", "AUTOPILOT ALTITUDE LOCK", "bool", "L:AP_TrimDn","number", "L:AP_TrimUp","number", "L:TW_115VAC_bus", "number", fAutopilotStateChange) --]] -- Altitude Alerter
--local M_ALT_DIGITS = hw_chr_display_add("MAX7219", 1, "ARDUINO_MEGA2560_A_D14", "ARDUINO_MEGA2560_A_D16", "ARDUINO_MEGA2560_A_D15") --local M_ALT_DIGITS = hw_chr_display_add("MAX7219", 1, "ARDUINO_MEGA2560_A_D48", "ARDUINO_MEGA2560_A_D49", "ARDUINO_MEGA2560_A_D46") local M_ALT_DIGITS = hw_chr_display_add("MAX7219", 1, "ARDUINO_MEGA2560_A_D48", "ARDUINO_MEGA2560_A_D46", "ARDUINO_MEGA2560_A_D49") --]] local M_LED_AA_WARNING = hw_output_add("ARDUINO_MEGA2560_A_D47", false) local M_LED_AA_MDA = hw_output_add("ARDUINO_MEGA2560_A_D44", false) local M_LED_AA_GOAROUND = hw_output_add("ARDUINO_MEGA2560_A_D45", false) local M_LED_AA_ALERT = hw_output_add("ARDUINO_MEGA2560_A_D43", false)
function fAltSelectUpdate(nAltitude, nLeftMainBusVolts, nLeftMainBusVoltsAlternate)
-- if (nAlertLampState ~= 0) and (nLeftMainBusVolts >= 20 or nLeftMainBusVoltsAlternate >= 20) then --print("Altitude = " .. nAltitude .. " (" .. string.format("%6.3f", math.max(nAltitude, 0) / 1000) .. ")") -- In the formatted output string below, the leading 'o88' uses the hidden three digits to backlight the 'set altitude' label! --hw_chr_display_set_text(M_ALT_DIGITS, 0, 0, string.format("o88%6.3f", math.max(nAltitude, 0) / 1000)) hw_chr_display_set_text(M_ALT_DIGITS, 0, 0, string.format("%6.3f", math.max(nAltitude, 0) / 1000))
end
fsx_variable_subscribe( "L:Alt_alert_setting", "number", "L:TW_Leftmain_bus_voltage", "number", "L:TW_LMain_Volt", "number" , -- This is a duplicate to fix a problem accessing the original bus volts Lvar fAltSelectUpdate) --]] local function fAltAlerterModeChange(nAlertLampState, nModeAlert, nModeGA, nModeMDA, nLeftMainBusVolts, nLeftMainBusVoltsAlternate, n26vACBusVolts)
-- if (nAlertLampState ~= 0) and (nLeftMainBusVolts >= 20 or nLeftMainBusVoltsAlternate >= 20) then -- hw_output_set(M_LED_AA_WARNING, true) -- else -- hw_output_set(M_LED_AA_WARNING, false) -- end
-- if n26vACBusVolts > 20 then hw_output_set(M_LED_AA_WARNING, (nAlertLampState ~= 0) and true or false) -- (nAlertLampState ~= 0) ? true : false hw_output_set(M_LED_AA_ALERT, (nModeAlert ~= 0) and true or false) hw_output_set(M_LED_AA_GOAROUND, (nModeGA ~= 0) and true or false) hw_output_set(M_LED_AA_MDA, (nModeMDA ~= 0) and true or false) -- else -- hw_output_set(M_LED_AA_WARNING, false) -- hw_output_set(M_LED_AA_WARNING, false) -- hw_output_set(M_LED_AA_ALERT, false) -- hw_output_set(M_LED_AA_GOAROUND, false) -- hw_output_set(M_LED_AA_MDA, false) -- end
end
fsx_variable_subscribe( "L:Alert_lamp_hist", "number", "L:AP_AltAlert","number", "L:AP_GA","number", "L:AP_MDA","number", "L:TW_Leftmain_bus_voltage", "number", "L:TW_LMain_Volt", "number" , -- This is a duplicate to fix a problem accessing the original bus volts Lvar "L:TW_26VAC_bus", "number", fAltAlerterModeChange) --]] -- Miscellaneous indicators
--local M_LED_YAW_DAMPER = hw_output_add("ARDUINO_MEGA2560_A_D13", false) local M_LED_YAW_DAMPER = hw_output_add("ARDUINO_MEGA2560_A_D42", false) local M_LED_GS_ARM = hw_output_add("ARDUINO_MEGA2560_A_D24", false) local M_LED_GS_CAPT = hw_output_add("ARDUINO_MEGA2560_A_D22", false) local M_LED_NAV_ARM = hw_output_add("ARDUINO_MEGA2560_A_D25", false) local M_LED_NAV_CAPT = hw_output_add("ARDUINO_MEGA2560_A_D23", false) local M_LED_AF_SELECT = hw_output_add("ARDUINO_MEGA2560_A_D35", false) local M_LED_AF_ARM = hw_output_add("ARDUINO_MEGA2560_A_D34", false) local M_LED_BETA_LEFT = hw_output_add("ARDUINO_MEGA2560_A_D36", false) local M_LED_BETA_RIGHT = hw_output_add("ARDUINO_MEGA2560_A_D37", false)
local function fIndicatorsChange(bYawDamper, nGSArm, nNAVArm, nGSCap, nNAVCap, bAutoFeatherSel, nAutoFeatherArm, nBetaLeft, nBetaRight, nTestButton) --print(">fIndicatorsChange") hw_output_set(M_LED_YAW_DAMPER, bYawDamper and true or false) hw_output_set(M_LED_GS_ARM, (nGSArm ~= 0) and true or false) hw_output_set(M_LED_NAV_ARM, (nNAVArm ~= 0) and true or false) hw_output_set(M_LED_GS_CAPT, (nGSCap ~= 0) and true or false) hw_output_set(M_LED_NAV_CAPT, (nNAVCap ~= 0) and true or false) hw_output_set(M_LED_AF_SELECT, bAutoFeatherSel and true or false) hw_output_set(M_LED_AF_ARM, (nAutoFeatherArm ~= 0) and true or false) hw_output_set(M_LED_BETA_LEFT, (nBetaLeft ~= 0) and true or false) hw_output_set(M_LED_BETA_RIGHT, (nBetaRight ~= 0) and true or false)
--if bAutoFeatherSel then -- hw_output_set(M_LED_AF_SELECT, 1) --else -- hw_output_set(M_LED_AF_SELECT, 0) --end --print("<fIndicatorsChange")
end
fsx_variable_subscribe( "AUTOPILOT YAW DAMPER", "Bool", "L:AP_GSArm", "number", "L:AP_NAVArm", "number", "L:AP_GSCapt", "number", "L:AP_NAVCapt", "number", "PANEL AUTO FEATHER SWITCH:1", "bool", "PROP AUTO FEATHER ARMED:1", "number", "L:Twot_BetaRange_L","number", "L:Twot_BetaRange_R","number", "L:Ann_Test", "number", fIndicatorsChange)
-- Ice warning
local M_LED_ICE_BLUE = hw_output_add("ARDUINO_MEGA2560_A_D41", false) local M_LED_ICE_YEL = hw_output_add("ARDUINO_MEGA2560_A_D40", false) local M_LED_ICE_RED = hw_output_add("ARDUINO_MEGA2560_A_D38", false)
local function fIcingStateChange(nSeverity) hw_output_set(M_LED_ICE_BLUE, (nSeverity == 1) and true or false) hw_output_set(M_LED_ICE_YEL, (nSeverity == 2) and true or false) hw_output_set(M_LED_ICE_RED, (nSeverity == 3) and true or false) end
fsx_variable_subscribe( "L:IcingSeverity", "number", fIcingStateChange) --]]
local function fAnnunciatorTestButton(nButtonState) if nButtonState > 0 then hw_output_set(M_LED_YAW_DAMPER, true) -- hw_output_set(M_LED_GS_ARM, true) -- hw_output_set(M_LED_GS_CAPT, true) -- hw_output_set(M_LED_NAV_ARM, true) -- hw_output_set(M_LED_NAV_CAPT, true) -- hw_output_set(M_LED_AP_APP, true) -- hw_output_set(M_LED_AP_BC, true) -- hw_output_set(M_LED_AP_NAV, true) -- hw_output_set(M_LED_AP_IAS, true) -- hw_output_set(M_LED_AP_ALT, true) -- hw_output_set(M_LED_AP_HDG, true)
-- hw_output_set(M_LED_AA_WARNING, true) -- hw_output_set(M_LED_AA_MDA, true) -- hw_output_set(M_LED_AA_GOAROUND, true) -- hw_output_set(M_LED_AA_ALERT, true)
hw_output_set(M_LED_ICE_BLUE, true) hw_output_set(M_LED_ICE_YEL, true) hw_output_set(M_LED_ICE_RED, true)
hw_output_set(M_LED_AF_SELECT, true) hw_output_set(M_LED_AF_ARM, true) hw_output_set(M_LED_BETA_LEFT, true) hw_output_set(M_LED_BETA_RIGHT, true) -- hw_output_set(M_LED_AP_ENG, true) -- hw_output_set(M_LED_AP_TrimUp, true) -- hw_output_set(M_LED_AP_TrimDown, true) -- hw_chr_display_set_text(M_ALT_DIGITS, 0, 0, "DhC-6") else hw_output_set(M_LED_YAW_DAMPER, false) -- hw_output_set(M_LED_GS_ARM, false) -- hw_output_set(M_LED_GS_CAPT, false) -- hw_output_set(M_LED_NAV_ARM, false) -- hw_output_set(M_LED_NAV_CAPT, false) -- hw_output_set(M_LED_AP_APP, false) -- hw_output_set(M_LED_AP_BC, false) -- hw_output_set(M_LED_AP_NAV, false) -- hw_output_set(M_LED_AP_IAS, false) -- hw_output_set(M_LED_AP_ALT, false) -- hw_output_set(M_LED_AP_HDG, false)
-- hw_output_set(M_LED_AA_WARNING, false) -- hw_output_set(M_LED_AA_MDA, false) -- hw_output_set(M_LED_AA_GOAROUND, false) -- hw_output_set(M_LED_AA_ALERT, false)
hw_output_set(M_LED_ICE_BLUE, false) hw_output_set(M_LED_ICE_YEL, false) hw_output_set(M_LED_ICE_RED, false)
hw_output_set(M_LED_AF_SELECT, false) hw_output_set(M_LED_AF_ARM, false) hw_output_set(M_LED_BETA_LEFT, false) hw_output_set(M_LED_BETA_RIGHT, false) -- hw_output_set(M_LED_AP_ENG, false) -- hw_output_set(M_LED_AP_TrimUp, false) -- hw_output_set(M_LED_AP_TrimDown, false) -- request_callback(fAltSelectUpdate) end
end
fsx_variable_subscribe("L:Ann_Test", "number", fAnnunciatorTestButton)
local function fAPTestButton(nButtonState) if nButtonState > 0 then -- hw_output_set(M_LED_YAW_DAMPER, true) hw_output_set(M_LED_GS_ARM, true) hw_output_set(M_LED_GS_CAPT, true) hw_output_set(M_LED_NAV_ARM, true) hw_output_set(M_LED_NAV_CAPT, true) hw_output_set(M_LED_AP_APP, true) hw_output_set(M_LED_AP_BC, true) hw_output_set(M_LED_AP_NAV, true) hw_output_set(M_LED_AP_IAS, true) hw_output_set(M_LED_AP_ALT, true) hw_output_set(M_LED_AP_HDG, true)
hw_output_set(M_LED_AA_WARNING, true) hw_output_set(M_LED_AA_MDA, true) hw_output_set(M_LED_AA_GOAROUND, true) hw_output_set(M_LED_AA_ALERT, true)
-- hw_output_set(M_LED_ICE_BLUE, true) -- hw_output_set(M_LED_ICE_YEL, true) -- hw_output_set(M_LED_ICE_RED, true)
-- hw_output_set(M_LED_AF_SELECT, true) -- hw_output_set(M_LED_AF_ARM, true) -- hw_output_set(M_LED_BETA_LEFT, true) -- hw_output_set(M_LED_BETA_RIGHT, true) hw_output_set(M_LED_AP_ENG, true) hw_output_set(M_LED_AP_TrimUp, true) hw_output_set(M_LED_AP_TrimDown, true) hw_chr_display_set_text(M_ALT_DIGITS, 0, 0, " DhC-6") else -- hw_output_set(M_LED_YAW_DAMPER, false) hw_output_set(M_LED_GS_ARM, false) hw_output_set(M_LED_GS_CAPT, false) hw_output_set(M_LED_NAV_ARM, false) hw_output_set(M_LED_NAV_CAPT, false) hw_output_set(M_LED_AP_APP, false) hw_output_set(M_LED_AP_BC, false) hw_output_set(M_LED_AP_NAV, false) hw_output_set(M_LED_AP_IAS, false) hw_output_set(M_LED_AP_ALT, false) hw_output_set(M_LED_AP_HDG, false)
hw_output_set(M_LED_AA_WARNING, false) hw_output_set(M_LED_AA_MDA, false) hw_output_set(M_LED_AA_GOAROUND, false) hw_output_set(M_LED_AA_ALERT, false)
-- hw_output_set(M_LED_ICE_BLUE, false) -- hw_output_set(M_LED_ICE_YEL, false) -- hw_output_set(M_LED_ICE_RED, false)
-- hw_output_set(M_LED_AF_SELECT, false) -- hw_output_set(M_LED_AF_ARM, false) -- hw_output_set(M_LED_BETA_LEFT, false) -- hw_output_set(M_LED_BETA_RIGHT, false) hw_output_set(M_LED_AP_ENG, false) hw_output_set(M_LED_AP_TrimUp, false) hw_output_set(M_LED_AP_TrimDown, false) request_callback(fAltSelectUpdate) end
end
fsx_variable_subscribe("L:AP_Test bool", "number", fAPTestButton)
-- Engine Fire
local M_LED_FIRE_LEFT = hw_output_add("ARDUINO_MEGA2560_A_D12", false) local M_LED_FIRE_RIGHT = hw_output_add("ARDUINO_MEGA2560_A_D13", false)
local function fFireStateChange(nTestSwitch, nFireLeft, nFireRight, nExtLeft, nExtRight) hw_output_set(M_LED_FIRE_LEFT, ((nFireLeft ~= 0) or (nTestSwitch ~= 0)) and true or false) hw_output_set(M_LED_FIRE_RIGHT, ((nFireRight ~= 0) or (nTestSwitch ~= 0)) and true or false) end
fsx_variable_subscribe( "L:FireTest_sw", "number", "L:Twot_Enge1_Fire", "number", -- Left "L:Twot_Enge2_Fire", "number", -- Right "L:Firehandle_L", "number", "L:Firehandle_R", "number", fFireStateChange)
-- Cockpit lights
--local M_LED_COCKPIT_LIGHT1 = hw_output_add("ARDUINO_MEGA2560_A_D11", true) --local M_LED_COCKPIT_LIGHT2 = hw_output_add("ARDUINO_MEGA2560_A_D10", true)
|
|