7-seg display temp value fix, read_raw_temp shrink, python3 compat, tested, linted

This commit is contained in:
Mikey Sklar 2019-07-09 15:58:27 -06:00
parent 8bdf61607b
commit a76cc8aafc
2 changed files with 89 additions and 0 deletions

View file

@ -0,0 +1,4 @@
# Large-Pi-Based-Thermometer-Clock
Code to accompany this tutorial:
https://learn.adafruit.com/large-pi-based-thermometer-and-clock

View file

@ -0,0 +1,85 @@
import glob
import time
import datetime
from Adafruit_LED_Backpack import SevenSegment
import board
import digitalio
switch_pin = digitalio.DigitalInOut(board.D18)
switch_pin.direction = digitalio.Direction.INPUT
switch_pin.pull = digitalio.Pull.UP
segment = SevenSegment.SevenSegment(address=0x70)
# Initialize the display. Must be called once before using the display.
segment.begin()
base_dir = '/sys/bus/w1/devices/'
device_folder = glob.glob(base_dir + '28*')[0]
device_file = device_folder + '/w1_slave'
def read_temp_raw():
f = open(device_file, 'r')
lines = f.readlines()
f.close()
return lines
def read_temp():
lines = read_temp_raw()
while lines[0].strip()[-3:] != 'YES':
time.sleep(0.2)
lines = read_temp_raw()
equals_pos = lines[1].find('t=')
if equals_pos != -1:
temp_string = lines[1][equals_pos+2:]
temp_c = float(temp_string) / 1000.0
temp_f = temp_c * 9.0 / 5.0 + 32.0
return temp_c, temp_f
def display_temp():
segment.set_colon(False)
temp = int(read_temp()[1]) # F
# temp = int(read_temp()[0]) # C
sign = (temp < 0)
temp = abs(temp)
digit_1 = int(temp % 10)
temp = temp / 10
digit_2 = int(temp % 10)
temp = temp / 10
digit_3 = int(temp % 10)
if sign :
segment.set_digit_raw(0, 0x40) # - sign
if digit_3 > 0 :
segment.set_digit(0, digit_3) # Hundreds
else:
segment.set_digit_raw(0, 0)
if digit_2 > 0 :
segment.set_digit(1, digit_2) # Tens
else:
segment.set_digit_raw(1, 0)
segment.set_digit(2, digit_1) # Ones
segment.set_digit_raw(3, 0x71) #F # Temp units letter
# segment.set_digit_raw(3, 0x39) #C
def display_time():
now = datetime.datetime.now()
hour = now.hour
minute = now.minute
second = now.second
# Set hours
segment.set_digit(0, int(hour / 10)) # Tens
segment.set_digit(1, hour % 10) # Ones
# Set minutes
segment.set_digit(2, int(minute / 10)) # Tens
segment.set_digit(3, minute % 10) # Ones
# Toggle colon
segment.set_colon(second % 2) # Toggle colon at 1Hz
while True:
segment.clear()
if not switch_pin.value:
display_temp()
else :
display_time()
segment.write_display()
time.sleep(0.5)