class I2CDevice::D6T44L

Public Class Methods

new(args={}) click to toggle source
Calls superclass method I2CDevice::new
# File lib/templates/grove_pi/i2c/device/d6t-44l.rb, line 7
def initialize(args={})
        args[:address] = 0x0a
        super
end

Public Instance Methods

read_data() click to toggle source
# File lib/templates/grove_pi/i2c/device/d6t-44l.rb, line 12
def read_data
        data = i2cget(0x4c, 35)
        unless checkPEC(data, false)
                raise InvalidParityException
        end

        # PTAT はセンサ内部の参照温度データ
        ptat, *pixels = data[0..-2].unpack("v*")
        {
                :PTAT => ptat,
                :PIXELS => pixels.each_slice(4).to_a
        }
end

Private Instance Methods

calc_crc(data) click to toggle source
# File lib/templates/grove_pi/i2c/device/d6t-44l.rb, line 27
def calc_crc(data)
        8.times do
                tmp = data
                data = (data << 1) & 0xff
                if tmp & 0x80 != 0
                        data ^= 0x07
                end
        end
        data
end
checkPEC(data, userr=true) click to toggle source
# File lib/templates/grove_pi/i2c/device/d6t-44l.rb, line 38
def checkPEC(data, userr=true)
        crc = 0
        if userr
                crc = calc_crc(0x14)
                crc = calc_crc(0x4c ^ crc)
                crc = calc_crc(0x15 ^ crc)
        else
                crc = calc_crc(0x15)
        end
        (data.size - 1).times do |i|
                crc = calc_crc(data[i].ord ^ crc)
        end
        data[data.size-1].ord == crc
end