Ejemplo n.º 1
0
class WaterLevel:
    def __init__(self, port):
        self.port = port
        self.uart = UART(port, 9600)
        self.uart.init(9600,
                       timeout=10)  # 9600, 1byte about 1ms, wait for 10ms
        self.buffer = RingBuffer(10)

    # return
    # False: no change
    # True: change, need read value
    def Check(self):
        count = self.uart.any()
        if count < 3:
            return False
            # At lease 3 bytes in buffer (For example:0mm)

        value_change = None

        while 1:  # maybe too many data in UART RX buffer
            data = self.uart.readline()
            if data:
                number_string = re.search(b'^\d+', data)
                if number_string:
                    number = int(number_string.group(0))
                    value_change = self.buffer.InsertData(number, True)

            else:
                break

        return value_change

    def GetValue(self):
        return self.buffer.GetAverage()
Ejemplo n.º 2
0
class TempSensor:
    def __init__(self, pin):
        self.check_ticks_ms = 0
        self.ds = DS18X20(OneWire(Pin(pin)))
        self.rom = None
        self.buffer = RingBuffer(6)
        self.state = DS_IDEL

        roms = self.ds.scan()
        if roms:
            self.rom = roms[0]
            UI.LogOut(str(self.rom))

    def Start(self):
        # Wait for 1000ms(1s) to start
        if self.state != DS_IDEL:
            return

        if time.ticks_diff(time.ticks_ms(), self.check_ticks_ms) < 1000:
            return

        if self.rom:
            self.ds.convert_temp()
            self.state = DS_START
            self.check_ticks_ms = time.ticks_ms()

    def Check(self):
        if self.rom is None:
            return None

        # Need wait for 750ms(800ms) after start
        if self.state != DS_START:
            return False

        if time.ticks_diff(time.ticks_ms(), self.check_ticks_ms) < 800:
            return False

        try:
            value = int(self.ds.read_temp(self.rom) * 100)
        except:
            UI.LogOut("Read DS18B20 failed!")
            return False
        else:
            value_change = self.buffer.InsertData(value, True)

            self.state = DS_IDEL

            return value_change

    def GetValue(self):
        return self.buffer.GetAverage()