Raspberry Pi mittels Python auf 1602-LCD und Rotary Encoder Menü durchblättern
Hallo Admins,
ich habe mich einen neuen Projekt gewidmet. Ich möchte mittels Raspberry Pi 3, einem Rotary Encoder und einem LCD1602, ein kleines Menü bauen, was man auf dem LCD sieht und welches über den Rotary Encoder durchgeblättert werden kann. Wenn man den richtigen Menüeintrag hat und den Knopf des Rotary Encoders betätigt, dann sollen die entsprechenden Informationen angezeigt werden. Das ganze schreibe ich in Python 3.
Einzeln klappt es bereits und derzeit befinde ich mich in der Implementierung, von beiden Teilen.
Jedoch kommt bei mir der Fehler:
Dazu noch das Programm:
Ich bin leider nicht erfahren genug, um die Fehlermeldung richtig zu deuten und den Fehlergrund zu erkennen.
Könnt Ihr mir bitte weiterhelfen und sagen, was genau der Fehler ist und wie man ihn beseitigen kann?
Ein schönes Wochenende euch und Gruß
tzabbi
ich habe mich einen neuen Projekt gewidmet. Ich möchte mittels Raspberry Pi 3, einem Rotary Encoder und einem LCD1602, ein kleines Menü bauen, was man auf dem LCD sieht und welches über den Rotary Encoder durchgeblättert werden kann. Wenn man den richtigen Menüeintrag hat und den Knopf des Rotary Encoders betätigt, dann sollen die entsprechenden Informationen angezeigt werden. Das ganze schreibe ich in Python 3.
Einzeln klappt es bereits und derzeit befinde ich mich in der Implementierung, von beiden Teilen.
Jedoch kommt bei mir der Fehler:
/bin/python3 /home/pi/allInOne.py
Traceback (most recent call last):
File "/home/pi/allInOne.py", line 153, in <module>
lcd.message = 'Start Program'
File "/usr/local/lib/python3.7/dist-packages/adafruit_character_lcd/character_lcd.py", line 360, in message
self.cursor_position(col, line)
File "/usr/local/lib/python3.7/dist-packages/adafruit_character_lcd/character_lcd.py", line 246, in cursor_position
self._write8(_LCD_SETDDRAMADDR | (column + _LCD_ROW_OFFSETS[row]))
File "/usr/local/lib/python3.7/dist-packages/adafruit_character_lcd/character_lcd.py", line 507, in _write8
self._pulse_enable()
File "/usr/local/lib/python3.7/dist-packages/adafruit_character_lcd/character_lcd.py", line 517, in _pulse_enable
self.enable.value = False
File "/usr/local/lib/python3.7/dist-packages/digitalio.py", line 164, in value
self._pin.value(1 if val else 0)
File "/usr/local/lib/python3.7/dist-packages/adafruit_blinka/microcontroller/bcm283x/pin.py", line 58, in value
GPIO.output(self.id, val)
RuntimeError: The GPIO channel has not been set up as an OUTPUT
Dazu noch das Programm:
#!/usr/bin/env python3
# this program is a simple test that all components work togehter
# import all libs
import RPi.GPIO as GPIO
import time
import board
import csv
from datetime import datetime
import digitalio
import csv
import adafruit_character_lcd.character_lcd as characterlcd
import os
# program startpoint
# change working directory
# determine directory of the program
abspath = os.path.abspath(__file__)
dname = os.path.dirname(abspath)
# set working directory to the directory of the program
os.chdir(dname)
# display data -------------------------------------------------
lcd_columns = 16
lcd_rows = 2
# define digital outputs ---------------------------------------------
lcd_rs = digitalio.DigitalInOut(board.D22)
lcd_en = digitalio.DigitalInOut(board.D17)
lcd_d4 = digitalio.DigitalInOut(board.D25)
lcd_d5 = digitalio.DigitalInOut(board.D24)
lcd_d6 = digitalio.DigitalInOut(board.D23)
lcd_d7 = digitalio.DigitalInOut(board.D18)
# initilize lcd -----------------------------------------------
lcd = characterlcd.Character_LCD_Mono(lcd_rs, lcd_en, lcd_d4,
lcd_d5, lcd_d6,lcd_d7,
lcd_columns,lcd_rows)
# initilize rotary encoder
GPIO.setmode(GPIO.BCM)
# define pins
PIN_CLK = 16
PIN_DT = 17
BUTTON_PIN = 27
GPIO.setup(PIN_CLK, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(PIN_DT, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(BUTTON_PIN, GPIO.IN, pull_up_down=GPIO.PUD_UP)
Counter = 0
ShowDetails = False
PIN_CLK_LETZTER = 0
PIN_CLK_AKTUELL = 0
delayTime = 0.01
Headers =
Values =
# Initiales Auslesen des Pin_CLK
PIN_CLK_LETZTER = GPIO.input(PIN_CLK)
# define functions of rotary encoder
def ausgabeFunktion(null):
global Counter
PIN_CLK_AKTUELL = GPIO.input(PIN_CLK)
if PIN_CLK_AKTUELL != PIN_CLK_LETZTER:
if GPIO.input(PIN_DT) != PIN_CLK_AKTUELL:
Counter += 1
else:
Counter -= 1
if Counter < 0:
Counter = 2
if Counter > 2:
Counter = 0
if Counter == 0:
lcd.clear()
lcd.message = 'current Date'
elif Counter == 1:
lcd.clear()
lcd.message = 'current Time'
elif Counter == 2:
lcd.clear()
lcd.message = 'humidity and temp'
else:
print('Error just wait 2s')
time.sleep(2)
Counter = 0
lcd.clear()
lcd.message = 'current Date'
def CounterReset(null):
global Counter
global ShowDetails
global Headers
global Values
if ShowDetails == True and Counter == 0:
ShowDetails = False
lcd.clear()
lcd.message = 'current Date'
elif ShowDetails == True and Counter == 1:
ShowDetails = False
lcd.clear()
lcd.message = 'current Time'
elif ShowDetails == True and Counter == 2:
ShowDetails = False
lcd.clear()
lcd.message = 'humidity and temp'
if ShowDetails == False and Counter == 0:
ShowDetails = True
lcd.clear()
lcd.message = 'current Date:'
lcd.message = datetime.now().strftime('\n %d %b %y')
elif ShowDetails == False and Counter == 1:
ShowDetails = True
lcd.clear()
lcd.message = 'current Time:'
while Counter == 1:
lcd.clear()
lcd.message = datetime.now().strftime('\n %H:%M:%S')
time.sleep(1)
elif ShowDetails == False and Counter == 2:
with open("DHT22.csv", "r") as csv_file:
csv_reader = csv.reader(csv_file, delimiter=',')
# count lines
lines = 0
# write data in array
for row in csv_reader:
if lines == 0:
Headers = row
else:
Values = row
lines += 1
# display data on screen
#for i in range(lines):
lcd.clear()
lcd.message = Headers + ": " + Values
lcd.message = '\n' + Headers + ": " + Values
GPIO.add_event_detect(PIN_CLK, GPIO.BOTH, callback=ausgabeFunktion, bouncetime=1000)
GPIO.add_event_detect(BUTTON_PIN, GPIO.FALLING, callback=CounterReset, bouncetime=1000)
lcd.message = 'Start Program'
try:
while True:
time.sleep(delayTime)
except KeyboardInterrupt:
GPIO.cleanup()
Ich bin leider nicht erfahren genug, um die Fehlermeldung richtig zu deuten und den Fehlergrund zu erkennen.
Könnt Ihr mir bitte weiterhelfen und sagen, was genau der Fehler ist und wie man ihn beseitigen kann?
Ein schönes Wochenende euch und Gruß
tzabbi
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 657022
Url: https://administrator.de/contentid/657022
Ausgedruckt am: 19.12.2024 um 12:12 Uhr
2 Kommentare
Neuester Kommentar