Bump to latest simapi for unix timestamp ticks. Push unix timestamp ticks to lua variable. Update test logic to test on 8000 rpms. Update example lua scripts with examples of led rpm blink.

This commit is contained in:
Paul Dino Jones 2025-07-15 16:39:41 -04:00
parent d2fa72f47c
commit 0abd5e9b68
5 changed files with 130 additions and 4 deletions

View File

@ -10,8 +10,6 @@
-- SIMAPI_FLAG_BLACK_ORANGE = 8, -- SIMAPI_FLAG_BLACK_ORANGE = 8,
-- SIMAPI_FLAG_ORANGE = 9 -- SIMAPI_FLAG_ORANGE = 9
led_clear_all()
if simdata.rpm > 0 and simdata.maxrpm > 0 then if simdata.rpm > 0 and simdata.maxrpm > 0 then
rpmmargin = .05*simdata.maxrpm; rpmmargin = .05*simdata.maxrpm;
rpminterval = (simdata.maxrpm-rpmmargin) / 6; rpminterval = (simdata.maxrpm-rpmmargin) / 6;
@ -30,7 +28,16 @@ if simdata.rpm > 0 and simdata.maxrpm > 0 then
if litleds >= 6 then if litleds >= 6 then
color = RED color = RED
end end
set_led_range_to_color(1, litleds, color) if litleds >= 6 then
if simdata.mtick % 2 == 0 then
set_led_range_to_color(1, litleds, color)
else
led_clear_all()
end
else
set_led_range_to_color(1, litleds, color)
end
end end
if simdata.playerflag == 0 then if simdata.playerflag == 0 then

91
conf/rpms_and_radar.lua Normal file
View File

@ -0,0 +1,91 @@
-- configuration
-- set these accordingly
right_leds_start = 7
right_num_leds = 42
left_leds_start = 49
left_num_leds = 42
--
max_radius = 10 -- radius is hardcoded in simapi
proxcars = simdata.proxcars -- also hard coded in simapi
rightsideset = false
leftsideset = false
-- right side
litleds = 0
i = 1
while(i <= proxcars and rightsideset == false) do
if simdata.pd[i].theta > 40 and simdata.pd[i].theta < 130 then
dist = math.abs(90 - simdata.pd[i].theta)
perct = (90 - dist)/90
litleds = math.ceil(perct * right_num_leds)
color_perct = simdata.pd[i].radius/10
yellow = math.floor(color_perct * 255)
local rgb = (255 << 16) | (yellow << 8) | (0 << 0)
if simdata.pd[1].theta >= 90 then
-- car is behind
set_led_range_to_rgb_color(right_leds_start, right_leds_start + litleds, rgb)
else
set_led_range_to_rgb_color(right_leds_start + (right_num_leds - litleds), right_leds_start + right_num_leds, rgb)
end
rightsideset = true
end
i = i + 1
end
-- left side
litleds = 0
i = 1
while(i <= proxcars and leftsideset == false) do
if simdata.pd[i].theta > 230 and simdata.pd[i].theta < 320 then
dist = math.abs(270 - simdata.pd[1].theta)
perct = (90 - dist)/90
litleds = math.ceil(perct * left_num_leds)
color_perct = simdata.pd[i].radius/10
yellow = math.floor(color_perct * 255)
local rgb = (255 << 16) | (yellow << 8) | (0 << 0)
if simdata.pd[1].theta <= 270 then
-- car is behind
set_led_range_to_rgb_color(left_leds_start, left_leds_start + litleds, rgb)
else
set_led_range_to_rgb_color(left_leds_start + (left_num_leds - litleds), left_leds_start + left_num_leds, rgb)
end
leftsideset = true
end
i = i + 1
end
-- rpm stuff
if simdata.rpm > 0 and simdata.maxrpm > 0 then
rpmmargin = .05*simdata.maxrpm;
rpminterval = (simdata.maxrpm-rpmmargin) / 6;
litleds = 0
for i = 1,6 do
if simdata.rpm >= (rpminterval * i) then
litleds = i;
end
end
color = GREEN
if litleds > 3 and litleds < 6 then
color = YELLOW
end
if litleds >= 6 then
color = RED
end
if litleds >= 6 then
if simdata.mtick % 2 == 0 then
set_led_range_to_color(1, litleds, color)
else
led_clear_all()
end
else
set_led_range_to_color(1, litleds, color)
end
end

View File

@ -3,14 +3,29 @@
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <math.h> #include <math.h>
#include <sys/time.h>
#include "arduinoledlua.h" #include "arduinoledlua.h"
#include "arduino.h" #include "arduino.h"
#include "../../slog/slog.h" #include "../../slog/slog.h"
long long ledTimeInMilliseconds(void) {
struct timeval tv;
gettimeofday(&tv,NULL);
return (((long long)tv.tv_sec)*1000)+(tv.tv_usec/1000);
}
int simdata_to_lua(lua_State *L, SimData* simdata) { int simdata_to_lua(lua_State *L, SimData* simdata) {
// make the time up now if we are running in test mode
if(simdata->mtick == 0)
{
simdata->mtick = ledTimeInMilliseconds();
}
lua_newtable(L); lua_newtable(L);
lua_pushinteger(L, simdata->playerflag); lua_pushinteger(L, simdata->playerflag);
@ -19,6 +34,9 @@ int simdata_to_lua(lua_State *L, SimData* simdata) {
lua_pushinteger(L, simdata->rpms); lua_pushinteger(L, simdata->rpms);
lua_setfield(L, -2, "rpm"); lua_setfield(L, -2, "rpm");
lua_pushinteger(L, simdata->mtick);
lua_setfield(L, -2, "mtick");
lua_pushinteger(L, simdata->maxrpm); lua_pushinteger(L, simdata->maxrpm);
lua_setfield(L, -2, "maxrpm"); lua_setfield(L, -2, "maxrpm");

View File

@ -878,6 +878,16 @@ int tester(SimDevice* devices, int numdevices)
devices[x].update(&devices[x], simdata); devices[x].update(&devices[x], simdata);
} }
} }
for(int x = 0; x < 100; x++)
{
for (int x = 0; x < numdevices; x++)
{
if (devices[x].initialized == true)
{
devices[x].update(&devices[x], simdata);
}
}
}
sleep(3); sleep(3);
simdata->velocity = 0; simdata->velocity = 0;

@ -1 +1 @@
Subproject commit 735c7d3b889810eabb42c728ae961f7c73b1c947 Subproject commit 64f1ed8b2672e31556e63eb63ae62f717237b6a6