Hallo,
für eine Anzeige von diversen Messdaten, Zeit u.s.w. an einem "Terminal" z.B. im Anschußraum habe ich ein Tastenkreuz zusammengebaut und ein 2zeiliges I2C- LCD zum RPi3Aplus gekauft.
Das ist für viele Fälle ausreichend und intuitiv zu bedienen. Denke da auch an eine Fernunterstützung, wenn mal jemand Ungeübte/r vor dem Ding steht und Messwerte durchgeben soll.
Die Abfrage der Tasten und Anzeige von Pseudodaten habe ich mittlerweile nach Wochen hinbekommen. DANKE an alle Leute mit interessanten Anwendungen und vor allem an die Profis hier im Forum. Ohne die vielen Tipps wäre ich untergegangen.
Den Code habe ich angehängt. Dazu habe ich folgende Fragen:
Stecken in dem Code noch versteckte Fehler, die mich ärgern können?
Habe ich alle Tipps für einen korrekten Code umgesetzt?
Wie kann ich die Global Variable taste_gedrueckt für die Interruptauswertung der Tasten vermeiden? Habe keinen anderen Weg gefunden, den Interrupt in das Hauptprogramm zu bekommen
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# LCD Steuerung mit Tastenkreuz Abfrage mit Py3 und gpioZero :-)
from gpiozero import Button
import datetime
from time import *
import lcddriver
lcd = lcddriver.lcd()
# KEIN bounce_time = eingeben, funkt nicht.
button_rauf = Button(24, pull_up = True)
button_runter = Button(25, pull_up = True)
button_rechts = Button(23, pull_up = True)
button_links = Button(22, pull_up = True)
button_ok = Button(17, pull_up = True)
# Funktionen (Ausgaben)
def menu_anzeigen(menu_texte,menu_nummer):
lcd.lcd_display_string('Menu > ' ,1)
lcd.lcd_display_string(menu_texte[menu_nummer] ,2)
def uhr_anzeigen():
datum = datetime.datetime.now().strftime("%d.%m.%Y")
uhrzeit = datetime.datetime.now().strftime("%H:%M")
lcd.lcd_clear()
lcd.lcd_display_string(datum, 1)
lcd.lcd_display_string(uhrzeit, 2)
def temp(temper):
try:
lcd.lcd_clear()
lcd.lcd_display_string('Temperat.:'+str(temper)+chr(223)+'C' ,1)
except:
print ('Fehler Temperaturanzeige')
def luftf(luftfeu):
try:
lcd.lcd_clear()
lcd.lcd_display_string('Luftfeuchte:'+str(luftfeu)+' %' ,1)
except:
print ('Fehler Luftfeuchteanzeige')
# Tastendruck bearbeiten
def rauf():
global taste_gedrueckt
taste_gedrueckt = 1
def runter():
global taste_gedrueckt
taste_gedrueckt = 2
def links():
global taste_gedrueckt
taste_gedrueckt = 3
def rechts():
global taste_gedrueckt
taste_gedrueckt = 4
def ok():
global taste_gedrueckt
taste_gedrueckt = 5
# Abfrage TASTEN per Interrupt
button_runter.when_pressed = runter
button_rauf.when_pressed = rauf
button_rechts.when_pressed = rechts
button_links.when_pressed = links
button_ok.when_pressed = ok
#Hauptprogramm
def main():
global taste_gedrueckt
# Variablen
temper = 21.3
luftfeu = 38
taste_gedrueckt = 0
menu_nummer = 0
menu_texte = ('Uhrzeit ', 'Temperatur ', 'Luftfeuchte ', '4. Menue ', '5. Menue ')
im_menu = True
# Startsequenz
uhr_anzeigen()
sleep(1)
menu_anzeigen(menu_texte, menu_nummer)
sleep(1)
# Schleife
while True:
if taste_gedrueckt == 1:
taste_gedrueckt = 0
im_menu = True
# was tun bei rauf
elif taste_gedrueckt == 2:
taste_gedrueckt = 0
im_menu = True
# was tun bei runter
elif taste_gedrueckt == 3:
taste_gedrueckt = 0
im_menu = True
# bei links
if menu_nummer > 0:
menu_nummer -= 1
menu_anzeigen(menu_texte,menu_nummer)
elif taste_gedrueckt == 4:
taste_gedrueckt = 0
im_menu = True
# bei rechts
if menu_nummer < 4:
menu_nummer += 1
menu_anzeigen(menu_texte,menu_nummer)
elif taste_gedrueckt == 5:
taste_gedrueckt = 0
#bei ok
if im_menu == True:
if menu_nummer == 0:
im_menu = False
uhr_anzeigen()
elif menu_nummer == 1:
im_menu = False
temp(temper)
elif menu_nummer == 2:
im_menu = False
luftf(luftfeu)
elif menu_nummer == 3:
im_menu = False
#####
elif menu_nummer == 4:
im_menu = False
#####
elif im_menu == False:
im_menu = True
menu_anzeigen(menu_texte,menu_nummer)
sleep(0.1)
# Ende Schleife
if __name__ == '__main__':
try:
running = True
main()
except KeyboardInterrupt:
running = False
lcd.lcd_clear()
lcd.lcd_display_string(' ENDE' ,2)
Alles anzeigen
Bin für jeden Tipp zu haben. Vielleicht können auch andere von dem Grundaufbau profitieren und eine userfreundliche Menüführung gebrauchen.