Lua: Calling functions in own module
<p>I created a module for an RTC. It looks like this:</p>

<pre><code>local moduleName = ...
local M = {}
_G[moduleName] = M

---------- Local variables ---------------------
local id = 0
local address = 0x68


---------- Helper functions --------------------
local function bcdToDec(val)
    local hl=bit.rshift(val, 4)
    local hh=bit.band(val,0xf)
    local hr = string.format("%d%d", hl, hh)
  return string.format("%d%d", hl, hh)
end

local function decToBcd(val)
   local d = string.format("%d",tonumber(val / 10))
   local d1 = tonumber(d*10)
   local d2 = val - d1
   return tonumber(d*16+d2)
end

---------- Module functions --------------------
function M.Init(sda, scl)
    i2c.setup(id, sda, scl, i2c.SLOW)
end


function M.PrintTime()
    i2c.start(id)
    i2c.address(id, address, i2c.TRANSMITTER)
    i2c.write(id, 0x00)
    i2c.stop(id)
    i2c.start(id)
    i2c.address(id, address, i2c.RECEIVER)
    c=i2c.read(id, 7)
    i2c.stop(id)
    s = bcdToDec(string.byte(c,1))
    m = bcdToDec(string.byte(c,2))
    h = bcdToDec(string.byte(c,3))

    time=string.format(" %s:%s:%s", h, m, s)
    print(time);
end

function M.PrintDate()
    i2c.start(id)
    i2c.address(id, address, i2c.TRANSMITTER)
    i2c.write(id, 0x00)
    i2c.stop(id)
    i2c.start(id)
    i2c.address(id, address, i2c.RECEIVER)
    c=i2c.read(id, 7)
    i2c.stop(id)
    s = bcdToDec(string.byte(c,1))
    m = bcdToDec(string.byte(c,2))
    h = bcdToDec(string.byte(c,3))
    wkd = bcdToDec(string.byte(c,4))
    day = bcdToDec(string.byte(c,5))
    month = bcdToDec(string.byte(c,6))
    year = bcdToDec(string.byte(c,7))

    time=string.format(" %s.%s.%s", day, month, year)
    print(time);
end

return M
</code></pre>

<p>I saved this file as "ds3231_m.lua". Calling functions from another file works like this:</p>

<pre><code>m = require 'ds3231_m'
m.Init(2,1)   --sda, scl = 2, 1
m.PrintTime()
--m.PrintDate()
package.loaded.ds3231_m = Nil
</code></pre>

<p>as well as</p>

<pre><code>m = require 'ds3231_m'
m.Init(2,1)   --sda, scl = 2, 1
--m.PrintTime()
m.PrintDate()
package.loaded.ds3231_m = Nil
</code></pre>

<p>But when I try calling both functions:</p>

<pre><code>m = require 'ds3231_m'
m.Init(2,1)   --sda, scl = 2, 1
m.PrintTime()
m.PrintDate()
package.loaded.ds3231_m = Nil
</code></pre>

<p>I get an error:</p>

<pre><code>test.lua:4: attempt to call field 'PrintDate' (a nil value)
</code></pre>

<p>Can anyone tell me what is going wrong?</p>

<p>Thank you very much in advance!</p>

<p>Regards</p>