Post your best Lua script examples here

User avatar
By The_Praiodanish
#8522 Hi,

I've modified some code I found in the internet to read a LM75 temperature sensor and want to share my final LUA code with you, hope it is useful for someone!

Code: Select all--USAGE:
--require('lm75')

-- SDA = GPIO0 = 3
-- SCL = GPIO2 = 4

--sda, scl = 3, 4
--lm75:init(sda, scl)

--=lm75:strTemp() ==> 22.5
--=lm75:intTemp() ==> 225
-- ---------------------------------------------------------------
lm75 = {
   address = 72, -- A2, A1, A0 = 0
   temp_reg = 0,
   bus = 0,

   init = function (self, sda, scl)
      self.bus = 0
      i2c.setup(self.bus, sda, scl, i2c.SLOW)
   end,

   read = function (self)
      i2c.start(self.bus)
      i2c.address(self.bus, self.address, i2c.TRANSMITTER)
      i2c.write(self.bus, self.temp_reg)
      i2c.stop(self.bus)

      i2c.start(self.bus)
      i2c.address(self.bus, self.address, i2c.RECEIVER)
      c=i2c.read(self.bus, 2)
      i2c.stop(self.bus)
      return c
   end,

   convert = function (self, msb, lsb)
      if msb > 127 then msb = msb - 255 end
      if lsb > 127 then lsb = 5 else lsb = 0 end
      --return msb, bit.band(bit.rshift(lsb, 5), 7)
      return msb, lsb
   end,

   strTemp = function (self)
      local h, l
      h, l = string.byte(self:read(), 1, 2)
      return string.format("%d.%d", self:convert(h, l))
      --return string.format("%d.%d", h, l)
   end,

   intTemp = function (self)
      local h, l
      h, l = string.byte(self:read(), 1, 2)
      return tonumber(string.format("%d%d", self:convert(h, l)))
   end
}