-
Notifications
You must be signed in to change notification settings - Fork 5
/
lcd-demo.py
73 lines (54 loc) · 1.78 KB
/
lcd-demo.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#!/usr/bin/python3
"""
Program: LCD1602 Demo with HC-SR04 Sensor (lcd-demo.py)
Author: M. Heidenreich, (c) 2020
Description:
This code is provided in support of the following YouTube tutorial:
https://youtu.be/DHbLBTRpTWM
This example shows how to use the LCD1602 I2C display and the HC-SR04 sensor
with Raspberry Pi using a multi-threaded approach.
THIS SOFTWARE AND LINKED VIDEO TOTORIAL ARE PROVIDED "AS IS" AND THE
AUTHOR DISCLAIMS ALL WARRANTIES INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
"""
from signal import signal, SIGTERM, SIGHUP, pause
from time import sleep
from threading import Thread
from gpiozero import DistanceSensor
from rpi_lcd import LCD
reading = True
message = ""
lcd = LCD()
sensor = DistanceSensor(echo=20, trigger=21)
def safe_exit(signum, frame):
exit(1)
def display_distance():
while reading:
lcd.text(message, 1)
sleep(0.25)
def read_distance():
global message
while reading:
message = f"Distance: {sensor.value:1.2f} m"
print(message)
sleep(0.1)
try:
signal(SIGTERM, safe_exit)
signal(SIGHUP, safe_exit)
reader = Thread(target=read_distance, daemon=True)
display = Thread(target=display_distance, daemon=True)
reader.start()
display.start()
pause()
except KeyboardInterrupt:
pass
finally:
reading = False
reader.join()
display.join()
lcd.clear()
sensor.close()