Einstellbarer Timer für ein Projekt in der Arbeit

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
mombasa1990
User
Beiträge: 5
Registriert: Dienstag 28. August 2018, 09:28

Hallo, ich habe leider ein mittelschweres Problem.

Folgende Situation:
Wir haben Anfang September eine Infoveranstaltung in der Arbeit für unser vielleicht zukünftigen Azubis. Dafür ist zur allgemeinen Belustigung und als spaßbringenden Zeitvertreib eine lebensgroße GFK-Kuh gekauft worden. Die kann mit Wasser gefüllt werden und soll dann auf Zeit gemolken werden. Nun zum Problem den Mechatronik-Azubis ist nun die Aufgabe gestellt worden, einen Countdown zu realisieren der nach 60 Sekunden muht.
Dazu sei erwähnt unser Betrieb ist eine Käserei :lol:

Da das anfangs mit irgendwelchen Amazon-Platinen usw. gemacht werden sollte, aber das aus dem stehgreif nicht so einfach ist. Habe ich mich drum angenommen den Azubis zu helfen. Da ich einen Raspberry Pi3 mit 10"Zoll Touch Display daheim habe, dachte ich mir ich versuche mich endlich im programmieren. Das Problem ist nur das ist komplizierter als gedacht :oops: :?:

Habe es mittlerweile Geschafft einen Countdown zu Programmieren der momentan 60 Sekunden herunterzählt, und über einen Start-Butten gestartet werden kann. Also ein wenig GUI gebastelt.

Das Problem in meiner Geschwindigkeit werde ich bis Anfang September nicht mehr fertig, und ohne Hilfestellung alles selber beibringen schaff ich leider nicht.

Darum suche ich evtl. jemanden der mir das Programmieren könnte.

Eigentlich wie eine Eieruhr.
Sollte wie folgt aussehen:
**Eine Grafische Oberfläche die unten links einen Start-Button hat, der dann bei laufendem Countdown zum stoppen genutzt werden kann
**unten rechts einen Reset-Button um wieder in Ausgangsstellung zurück zu springen
**oben in der ecke (links oder rechts, egal) einen Platz für unser Firmenlogo
**eine Möglichkeit die Sekunden einzustellen über pfeil hoch runter, evtl über einen butten Einstellungen
** 2 Möglichkeiten je nachdem wie schwierig das ist

Man drückt auf START und es laufen x Sekunden runter und dann ertönt ein Muh-Geräusch als Zeichen das die Zeit um ist.

Man drückt auf START es wird eine Startsequenz gestartet 3 Sekunden evtl mit Ton.. bieb bieb bieb mööp .... 3..2..1.. Start und dann der Countdown bis 0 und bei 0 soll es Muh machen

die Töne würde ich selber suchen bearbeiten usw...

Wäre super wenn ihr mir helfen könntet damit der Azubi-Tag klappt, bzw. damit meine Chefs zufrieden sind

Danke Grüße Mombasa
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Zeig doch, was Du bisher hast, damit man sehen kann, wo noch etwas fehlt.
mombasa1990
User
Beiträge: 5
Registriert: Dienstag 28. August 2018, 09:28

Bin momentan in der Arbeit, das Zeug liegt alles Daheim. Könnte ich später bzw. morgen posten. Aber eigentlich habe ich so gut wie nichts.
Habe verschiedene Sachen ausprobiert und nachprogrammiert aber ich weiß eigentlich nicht wirklich was ich da mache.

aber ich poste das was ich bis jetzt hab mal hier rein
mombasa1990
User
Beiträge: 5
Registriert: Dienstag 28. August 2018, 09:28

Hallo

Das habe ich im Moment, wobei der Reset-Butten die gleiche Funktion hat wie der Start-Button. Ich habe wirklich wenig bis keinen Plan, deshalb bin ich auf eure Hilfe angewiesen.
Gruß Mombasa

Code: Alles auswählen

from tkinter import *

# Ereignis
def buttonCountdownClick():
    stand = int(labelZahl.cget('text'))
    if stand > 0:
        # Zähler aktualisieren
        stand = stand - 1
        labelZahl.config(text=str(stand))
        tkFenster.after(1000, buttonCountdownClick)
        
def buttonResetClick():
    stand = int(labelZahl.cget('text'))
    if stand > 0:
        # Zähler Reset
        stand = stand - 1
        labelZahl.config(text=str(stand))
        tkFenster.after(1000, buttonCountdownClick)
        
# Fenster
tkFenster = Tk()
tkFenster.title('Countdown')
tkFenster.geometry('790x425')
# Label
labelZahl = Label(master=tkFenster, text='10', bg='gray', font=('Arial', 190))
labelZahl.place(x=5, y=5, width=780, height=350)
# Button
buttonCountdown = Button(master=tkFenster, text='START', bg='#FBD975',
                         command=buttonCountdownClick, font=('Arial', 32))
buttonCountdown.place(x=5, y=360, width=300, height=60)

buttonReset = Button(master=tkFenster, text='RESET', bg='#FBD975',
                         command=buttonResetClick, font=('Arial', 32))
buttonReset.place(x=485, y=360, width=300, height=60)

# Aktivierung des Fensters
tkFenster.mainloop()
mombasa1990
User
Beiträge: 5
Registriert: Dienstag 28. August 2018, 09:28

ich schaff es einfach nicht. Würde mir bitte jemand das Programm schreiben. Wäre super nett von demjenigen. Gruß Mombasa
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Variablen sollten nicht aus dem Nichts in Funktionen auftauchen. Alles was eine Funktion braucht, bekommt sie über ihre Argumente. Statt direkt Werte aus Labels zu nehmen, benutze IntVar:

Code: Alles auswählen

from functools import partial
import tkinter as tk

def button_countdown(label, counter):
    stand = counter.get() - 1
    counter.set(stand)
    label.configure(fg='red' if stand == 0 else 'black')
    if stand > 0:
        label.after(1000, button_countdown, label, counter)

def button_start(label, counter):
    label.after(1000, button_countdown, label, counter)

def button_reset(label, counter, start_value):
    counter.set(start_value.get())
    label.configure(fg='black')

def main():
    root = tk.Tk()
    root.title('Countdown')
    root.geometry('790x425')
    counter = tk.IntVar(root)
    start_value = tk.IntVar(root, 10)

    label = tk.Label(root, textvariable=counter, font=('Arial', 190))
    label.grid(column=2,row=2)
    tk.Button(root, text='START', command=partial(button_start, label, counter), font=('Arial', 32)).grid(column=1,row=3)
    tk.Button(root, text='RESET', command=partial(button_reset, label, counter, start_value), font=('Arial', 32)).grid(column=3,row=3)
    tk.Label(root, text='Startwert').grid(column=1,row=4)
    tk.Entry(root, textvariable=start_value).grid(column=2,row=4)
    root.mainloop()

if __name__ == '__main__':
    main()
Für Sound bietet sich pygame oder ein externes Programm an.
mombasa1990
User
Beiträge: 5
Registriert: Dienstag 28. August 2018, 09:28

Danke Sirius3, Wahnsinn das hilft mir wirklich sehr. Dankeschön den Rest bekomme ich hin, wenn nicht melde ich mich nochmal. Gruß Mombasa
Antworten