Um die Fadenlänge von Fäden und Garnen zu ermitteln habe ich einen Counter mit Nullsetzung mit Python3 programmiert. Leider zeigt der Zähler manchmal wirre Zustände. Manchmal zählt er richtig und lässt sich auch wieder auf 0-setzen manchmal bleibt der Zähler einfach auf 0 und startet nicht.
Da ich noch ein Pythonanfänger bin wollte ich mal fragen, ob sich jemand meinen Code ansehen kann. Vielleicht ist da ein prinzipieller Fehler der mir das Leben schwer macht.
Zur Hardware selbst: Ich verwende einen induktiven Näherungsschalter der mir pro Umdrehung einen Impuls gibt. Diese Umdrehung multipliziere ich dann mit dem Umfang und ermittle so die Länge pro Umdrehung. Diese gebe ich dann auf eine LCD 2x16 aus. Die Rückstellung erfolgt mit einen Taster.
Sorry falls ich hier in einer falschen Rubrik gelandet bin. Bei der Suche habe ich mir sehr schwer getan das zuzuordnen.
Vielen Dank für jede Hilfe.
Leafboy
Code: Alles auswählen
#<Python 3 Programm
import RPi.GPIO as GPIO
import time
import Adafruit_CharLCD as LCD
# Warnungen ausschalten
GPIO.setwarnings(False)
#Raspberry-Pi Pins
lcd_rs = 24
lcd_en = 23
lcd_d4 = 17
lcd_d5 = 18
lcd_d6 = 27
lcd_d7 = 22
## Zeilen und Spalten fuer ein 16 x 2 LCD Display
lcd_columns = 16
lcd_rows = 2
lcd = LCD.Adafruit_CharLCD(lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7, lcd_columns, lcd_rows)
GPIO.setmode(GPIO.BCM)
impuls = 21
reset = 20 # Pin 20 als Eingang verwenden
GPIO.setup (impuls, GPIO.IN, pull_up_down = GPIO.PUD_DOWN)
GPIO.setup (reset, GPIO.IN)
counter=0
#Function that "add_event_detect" runs at input change
def counterPlus(channel):
global counter
if GPIO.input(channel) >0.5: #Pin 40 = 3,3V
counter += 1
else:
counter += 0
#On input change, run input_Chng function
GPIO.add_event_detect(impuls, GPIO.RISING, callback=counterPlus, bouncetime=100)
#Ausgabe Zaehlerstand an LCD pro sekunde
try:
while True:
while GPIO.input (reset) == False: # Reset nicht gesetzt
lcd.message ("Gesamtlaenge:")
lcd.message ("\n %.2f m" %(float(counter*1)))
lcd.home()
else:
counter = 0 # Reset Eingang setzt Anzeige (Zähler) auf 0
except KeyboardInterrupt:
pass
finally:
GPIO.cleanup()