Page 1 of 1
Lua script sub-functions?
Posted: Sat Dec 13, 2014 2:46 pm
by GTIspirit
What is the syntax for writing a Lua script function (sub-function?)?
I see a number of built-in Functions, but I would like to write my own sub-function for use within one of the existing Functions. Specifically, I want to write a sub-function that will calculate a value 0 to 100 based on engine speed between low and high limits. The math is the easy part, the exact syntax to define it is what I need help with.
What I'm getting at is staged, variable duty cycle shift light.
Because then I don't need to repeat the above manual syntax three times, I could just call the same sub-function for each of the three LED's.
Posted: Sun Dec 14, 2014 2:31 pm
by GTIspirit
In Excel format this is the calculation I want to make as a sub-function:
=IF((UL-PP)>(UL-LL),0,IF((UL-PP)<(0),1,1-(UL-PP)/(UL-LL)))
Where
UL is the upper rpm limit
LL is the lower rpm limit
PP is the process point (actual engine speed)
I guess this would be a few lines of code, which I don't want to repeat for each of the LED's, that is why I was asking how to make sub-functions in Lua scripting.
So if you're following me here, when engine speed is below the lower limit the LED would be off. When it is between the lower and upper limits the light would blink with varying on duration, faster as it approaches the upper limit. When it is above the upper limit then the light stays on.
Posted: Thu Dec 18, 2014 11:45 pm
by brentp
writing a function in lua is as simple as going:
Code: Select all
function add_two_numbers(a,b)
return a + b
end
you can include these into your overall script to provide useful capabilities.
The RaceCapture/Pro uses pretty standard Lua scripting, so any of the Lua scripting reference / tutorials will help.
For example, this might help:
http://luatut.com/crash_course.html
We have an example of flashing LEDs above a certain point; let me ping a team member and they might be able to help.
Shift lights in Lua
Posted: Fri Dec 19, 2014 12:07 am
by stieg
Here is a script I wrote for our Lemons car. It controls our shift lights by controlling the duty cycle of the PWM outputs. The outputs were acting as current sinks, so on (duty cycle at 100%) meant the lights were off, and vice versa at 0%. The script is attached.
Code: Select all
--[[
Cheesy RCP script
Inputs as wired on 2014-12-05 -- Stieg
Input
Timer 0 - RPM
Tach Lights
0 - Green Light
1 - Yellow Light
2 - Red Light
]]
-- Globals --
LIGHTS = 3
LIGHT_VALS = {}
FREQUENCY_HZ = 25
-- Global Init --
setTickRate(FREQUENCY_HZ)
function toggleLight(index)
LIGHT_VALS[index] = not LIGHT_VALS[index]
end
function lightOn(index)
LIGHT_VALS[index] = true
end
function lightOff(index)
LIGHT_VALS[index] = false
end
local lCount = 0
repeat
lightOff(lCount)
lCount = lCount + 1
until lCount >= LIGHTS
-- Script --
function updateLights()
local l = 0
repeat
-- Convert our booleans to 1 (true) or 0 (false) --
local val = LIGHT_VALS[l]
local dc = 0
if not val then
dc = 100
end
setPwmDutyCycle(l, dc)
l = l + 1
until l >= LIGHTS
end
function checkRpm()
local rpm = getTimerRpm(0)
if rpm < 3000 then
lightOff(0)
lightOff(1)
lightOff(2)
elseif 3000 < rpm and rpm < 4500 then
lightOn(0)
lightOff(1)
lightOff(2)
elseif 4500 < rpm and rpm < 5000 then
lightOn(0)
lightOn(1)
lightOff(2)
elseif 5000 < rpm and rpm < 5500 then
lightOn(0)
lightOn(1)
lightOn(2)
else
toggleLight(0)
toggleLight(1)
toggleLight(2)
end
end
function controlLights()
checkRpm()
updateLights()
end
-- Start!
function onTick()
controlLights()
end
Posted: Fri Dec 19, 2014 8:01 pm
by brentp
Blog post here:
http://www.autosportlabs.com/sequential ... apturepro/
Note, I learned from Stieg that the red flashing LED is controlled separately, so I updated the code in the how-to so that it can control a 4th flashing indicator, just like you see in the video. Enjoy!