Skip to content

Commit a76cc8a

Browse files
author
Mikey Sklar
committed
7-seg display temp value fix, read_raw_temp shrink, python3 compat, tested, linted
1 parent 8bdf616 commit a76cc8a

2 files changed

Lines changed: 89 additions & 0 deletions

File tree

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
# Large-Pi-Based-Thermometer-Clock
2+
3+
Code to accompany this tutorial:
4+
https://learn.adafruit.com/large-pi-based-thermometer-and-clock
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
import glob
2+
import time
3+
import datetime
4+
from Adafruit_LED_Backpack import SevenSegment
5+
import board
6+
import digitalio
7+
8+
switch_pin = digitalio.DigitalInOut(board.D18)
9+
switch_pin.direction = digitalio.Direction.INPUT
10+
switch_pin.pull = digitalio.Pull.UP
11+
12+
segment = SevenSegment.SevenSegment(address=0x70)
13+
# Initialize the display. Must be called once before using the display.
14+
segment.begin()
15+
16+
base_dir = '/sys/bus/w1/devices/'
17+
device_folder = glob.glob(base_dir + '28*')[0]
18+
device_file = device_folder + '/w1_slave'
19+
20+
def read_temp_raw():
21+
f = open(device_file, 'r')
22+
lines = f.readlines()
23+
f.close()
24+
return lines
25+
26+
def read_temp():
27+
lines = read_temp_raw()
28+
while lines[0].strip()[-3:] != 'YES':
29+
time.sleep(0.2)
30+
lines = read_temp_raw()
31+
equals_pos = lines[1].find('t=')
32+
if equals_pos != -1:
33+
temp_string = lines[1][equals_pos+2:]
34+
temp_c = float(temp_string) / 1000.0
35+
temp_f = temp_c * 9.0 / 5.0 + 32.0
36+
return temp_c, temp_f
37+
38+
def display_temp():
39+
segment.set_colon(False)
40+
temp = int(read_temp()[1]) # F
41+
# temp = int(read_temp()[0]) # C
42+
sign = (temp < 0)
43+
temp = abs(temp)
44+
digit_1 = int(temp % 10)
45+
temp = temp / 10
46+
digit_2 = int(temp % 10)
47+
temp = temp / 10
48+
digit_3 = int(temp % 10)
49+
if sign :
50+
segment.set_digit_raw(0, 0x40) # - sign
51+
if digit_3 > 0 :
52+
segment.set_digit(0, digit_3) # Hundreds
53+
else:
54+
segment.set_digit_raw(0, 0)
55+
if digit_2 > 0 :
56+
segment.set_digit(1, digit_2) # Tens
57+
else:
58+
segment.set_digit_raw(1, 0)
59+
segment.set_digit(2, digit_1) # Ones
60+
segment.set_digit_raw(3, 0x71) #F # Temp units letter
61+
# segment.set_digit_raw(3, 0x39) #C
62+
63+
def display_time():
64+
now = datetime.datetime.now()
65+
hour = now.hour
66+
minute = now.minute
67+
second = now.second
68+
# Set hours
69+
segment.set_digit(0, int(hour / 10)) # Tens
70+
segment.set_digit(1, hour % 10) # Ones
71+
# Set minutes
72+
segment.set_digit(2, int(minute / 10)) # Tens
73+
segment.set_digit(3, minute % 10) # Ones
74+
# Toggle colon
75+
segment.set_colon(second % 2) # Toggle colon at 1Hz
76+
77+
78+
while True:
79+
segment.clear()
80+
if not switch_pin.value:
81+
display_temp()
82+
else :
83+
display_time()
84+
segment.write_display()
85+
time.sleep(0.5)

0 commit comments

Comments
 (0)