Code: Select all
#!/usr/bin/python
# -*- coding: utf-8 -*-
# Author : Heiner Wiegel, Berlin, 2021
# Original Author : stenobot
# Original Author Github: https://github.com/stenobot/SoundMatrixPi
# http://elecrow.com/
from __future__ import division
import signal
import time
import sys
import threading
import datetime
import Adafruit_CharLCD as LCD
import spidev
import os
import RPi.GPIO as GPIO
from Adafruit_LED_Backpack import SevenSegment
buzzer_pin=18
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(buzzer_pin, GPIO.OUT)
col_thread=0
class GracefulKiller:
def __init__(self):
signal.signal(signal.SIGINT, self.exit_gracefully)
signal.signal(signal.SIGTERM, self.exit_gracefully)
def exit_gracefully(self, signum, frame):
col_thread.stop()
segment.set_colon(True)
segment.clear()
segment.write_display()
lcd.clear()
lcd.set_backlight(1)
sys.exit()
class led_colon_thread(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
colon_v=0
self._is_running=True
def run(self):
colon_v=0
while self._is_running:
segment.set_colon(colon_v)
segment.write_display()
time.sleep(1)
colon_v=~colon_v
def stop(self):
segment.set_colon(True)
segment.write_display()
self._is_running=False
def buzz(dur=2):
GPIO.output(buzzer_pin, GPIO.HIGH)
time.sleep(dur)
GPIO.output(buzzer_pin, GPIO.LOW)
return
def seg_time(seg_min, seg_sec=0):
while seg_min>0 or seg_sec>0:
segment.set_digit(0, seg_min//10)
segment.set_digit(1, seg_min%10)
while seg_sec>0:
seg_sec=seg_sec-1
segment.set_digit(2, seg_sec//10)
segment.set_digit(3, seg_sec%10)
time.sleep(1)
if seg_min>0:
seg_min=seg_min-1
seg_sec=60
segment.clear()
return
def kstep(desc="Pause", dur=6):
durs=0
lcd.clear()
lcd.message(desc+"\n"+str(dur)+" Minuten")
lcd.set_backlight(0)
seg_time(dur)
buzz()
lcd.clear()
lcd.set_backlight(1)
return
def cleanup_displays():
col_thread.stop()
segment.clear()
segment.write_display()
lcd.clear()
lcd.set_backlight(1)
GPIO.cleanup()
return
try:
segment = SevenSegment.SevenSegment(address=0x70)
segment.begin()
segment.clear()
# Define LCD column and row size for 16x2 LCD.
lcd_columns = 16
lcd_rows = 2
# Initialize the LCD using the pins
lcd = LCD.Adafruit_CharLCDBackpack(address=0x21)
killer=GracefulKiller()
col_thread = led_colon_thread()
col_thread.start()
kstep("Br\xF5hst\xF5ck", 60)
kstep("langsam kneten 1", 12)
kstep("schnell kneten 1", 6)
kstep("Pause 1", 20)
kstep("langsam kneten 2", 12)
kstep("schnell kneten 2", 6)
kstep("Pause 2", 20)
kstep("langsam kneten 3", 12)
kstep("schnell kneten 3", 6)
kstep("240/190C, Pause3", 20)
kstep("langsam kneten 4", 12)
kstep("schnell kneten 4", 6)
kstep("Aufarbeiten", 10)
kstep("Gare", 60)
kstep("Wasser, stippen", 5)
kstep("Backen", 60)
cleanup_displays()
except KeyboardInterrupt:
cleanup_displays()
sys.exit()