89 lines
2.2 KiB
Python
89 lines
2.2 KiB
Python
'''
|
|
Created on 29 août 2022
|
|
|
|
@author: denis
|
|
'''
|
|
import logging
|
|
import threading
|
|
from RPLCD.i2c import CharLCD
|
|
|
|
logger = logging.getLogger(__name__)
|
|
logging.basicConfig(level=logging.INFO)
|
|
|
|
#lcd = CharLCD(settings.LCD_EXPANDER, settings.LCD_ADDR, port=settings.LCD_PORT)
|
|
|
|
|
|
class LCD():
|
|
def __init__(self, lcd, timeout=None):
|
|
self.lcd = lcd
|
|
self.waiter = threading.Event()
|
|
self.cols = 16
|
|
self.timeout = timeout
|
|
self.screen_enabled = True
|
|
|
|
@property
|
|
def screen_enabled(self):
|
|
return self._enabled
|
|
|
|
@screen_enabled.setter
|
|
def screen_enabled(self, v):
|
|
self.lcd.backlight_enabled = v
|
|
self._enabled = v
|
|
|
|
|
|
def create_char(self, pos, cc):
|
|
self.lcd.create_char(pos, cc)
|
|
|
|
|
|
# LCD display
|
|
def _display(self, event, msg, timeout):
|
|
self.screen_enabled = True
|
|
self.lcd.clear()
|
|
self.lcd.write_string(msg)
|
|
event.wait(timeout)
|
|
self.screen_enabled = False
|
|
|
|
|
|
def write_msg(self, msg, timeout=5):
|
|
if not self.waiter.is_set():
|
|
self.waiter.set()
|
|
self.waiter = threading.Event()
|
|
threading.Thread(target=self._display, args=(self.waiter, msg, timeout, )).start()
|
|
|
|
|
|
def _screen_enable(self, event, timeout):
|
|
self.screen_enabled = True
|
|
event.wait(timeout)
|
|
self.screen_enabled = False
|
|
|
|
|
|
def screen_disable(self):
|
|
if not self.waiter.is_set():
|
|
self.waiter.set()
|
|
self.screen_enabled = False
|
|
|
|
|
|
def screen_enable(self):
|
|
if self.timeout is not None:
|
|
if not self.waiter.is_set():
|
|
self.waiter.set()
|
|
self.waiter = threading.Event()
|
|
threading.Thread(target=self._screen_enable, args=(self.waiter, self.timeout, )).start()
|
|
else:
|
|
self.screen_enabled = True
|
|
|
|
|
|
def display(self, msg, pos=(0, 0), align=None, clear=True):
|
|
self.screen_enable()
|
|
|
|
if clear:
|
|
self.lcd.clear()
|
|
self.lcd.cursor_pos = pos
|
|
if align=='left':
|
|
self.lcd.write_string(msg.ljust(self.cols))
|
|
elif align=='right':
|
|
self.lcd.write_string(msg.rjust(self.cols))
|
|
else:
|
|
self.lcd.write_string(msg)
|
|
|