- Thu Mar 12, 2015 7:33 am
#11870
Patriko wrote:Hi!

Thanks, I think that it'll solve the problem with ap scan, but it another hand other functions stopped working correctly, maybe I'm doing something wrong or there is a little bug with variables. Please take a look:

Code: Select all`mod = { MOD_NAME = "led" }`

mod.values = {0,0,0}

mod.desired = {0,0,0}

function mod.adjust()

local change = false

for i = 1, 3 do

if mod.values[i] < mod.desired[i] then

mod.values[i] = mod.values[i] + 1

change = true

elseif mod.values[i] > mod.desired[i] then

mod.values[i] = mod.values[i] - 1

change = true

end

end

if change then

ws2812.write(8, string.char(mod.values[2], mod.values[1], mod.values[3]):rep(10))

end

end

function led.DesiredHex()

return string.format("%02X%02X%02X", mod.desired[1], mod.desired[2], mod.desired[3])

end

function led.CurrentHex()

return string.format("%02X%02X%02X", mod.values[1], mod.values[2], mod.values[3])

end

flashMod(mod)

return mod

First, you have CurrentHex and DesiredHex on led instead of mod, so when you execute them below, you are executing whatever the last version of them is that was on mod and got serialized to flash. You might want to delete led_*.lc to clean up old versions. Either way, put these functions on mod.

Patriko wrote:When I call:

Code: Select all`l = flashMod("led")`

print(l.CurrentHex())

I get an error:

Code: Select all`led.lua:28: attempt to index field 'values' (a nil value)`

It's looks like the flashMod is trying to put the variables into flash functions, isn't it?

Thanks,

Patriko

l = flashMod("led") creates an empty table with no variables that looks for files named led_CurrentHex.lc to execute when you call l.CurrentHex().

flashMod(mod) removes the functions from the mod table and stires them in flash, and adds the lookup mentioned above. So the variables are still there in this variant.

So, to fix your code, you have a few options:

1. Add an init function that you call first that populates the variables.

2. Change l = flashMod("led") to l = dofile("led.lua") to let the other file populate the variables... this will rewrite the functions to flash every time it is called, shortening the lifespan of your esp.

3. Split into flash and memory files, execute the flash file once, and dofile the memory file, similar to the oledv2 example.