80 lines
2.3 KiB
Python
80 lines
2.3 KiB
Python
# SPDX-FileCopyrightText: 2018 Anne Barela for Adafruit Industries
|
|
#
|
|
# SPDX-License-Identifier: MIT
|
|
|
|
# CircuitPython Speaking Thermometer Example
|
|
# Coded for Circuit Playground Express but it may be
|
|
# modified for any CircuitPython board with changes to
|
|
# button, thermister and audio board definitions.
|
|
# Anne Barela for Adafruit Industries, MIT License
|
|
|
|
import time
|
|
import board
|
|
import adafruit_thermistor
|
|
import audioio
|
|
import audiocore
|
|
from digitalio import DigitalInOut, Direction, Pull
|
|
|
|
# Enables the speaker for audio output
|
|
spkrenable = DigitalInOut(board.SPEAKER_ENABLE)
|
|
spkrenable.direction = Direction.OUTPUT
|
|
spkrenable.value = True
|
|
|
|
D1 = board.BUTTON_A
|
|
D2 = board.BUTTON_B
|
|
|
|
# Button A setup (Celsius)
|
|
button_a = DigitalInOut(D1)
|
|
button_a.direction = Direction.INPUT
|
|
button_a.pull = Pull.DOWN
|
|
# Button B setup (Fahrenheit)
|
|
button_b = DigitalInOut(D2)
|
|
button_b.direction = Direction.INPUT
|
|
button_b.pull = Pull.DOWN
|
|
|
|
# Set up reading the Circuit Playground Express thermistor
|
|
thermistor = adafruit_thermistor.Thermistor(
|
|
board.TEMPERATURE, 10000, 10000, 25, 3950)
|
|
|
|
# Audio playback object and helper to play a full file
|
|
aout = audioio.AudioOut(board.A0)
|
|
|
|
# Play a wave file
|
|
def play_file(wavfile):
|
|
wavfile = "/numbers/" + wavfile
|
|
print("Playing", wavfile)
|
|
with open(wavfile, "rb") as f:
|
|
wav = audiocore.WaveFile(f)
|
|
aout.play(wav)
|
|
while aout.playing:
|
|
pass
|
|
|
|
# Function should take an integer -299 to 299 and say it
|
|
# Assumes wav files are available for the numbers
|
|
def read_temp(temp):
|
|
play_file("The temperature is.wav")
|
|
if temp < 0:
|
|
play_file("negative.wav")
|
|
temp = - temp
|
|
if temp >= 200:
|
|
play_file("200.wav")
|
|
temp = temp - 200
|
|
elif temp >= 100:
|
|
play_file("100.wav")
|
|
temp = temp - 100
|
|
if (temp >= 0 and temp < 20) or temp % 10 == 0:
|
|
play_file(str(temp) + ".wav")
|
|
else:
|
|
play_file(str(temp // 10) + "0.wav")
|
|
temp = temp - ((temp // 10) * 10 )
|
|
play_file(str(temp) + ".wav")
|
|
play_file("degrees.wav")
|
|
|
|
while True:
|
|
if button_a.value:
|
|
read_temp(int(thermistor.temperature))
|
|
play_file("celsius.wav")
|
|
if button_b.value:
|
|
read_temp(int(thermistor.temperature * 9 / 5 + 32))
|
|
play_file("fahrenheit.wav")
|
|
time.sleep(0.01)
|