Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import RPi.GPIO as GPIO
- import time
- import os
- import sys
- import threading
- GPIO_start_pin = "1" #GPIO pin an dem die erste(1.) lichtscranke sitzt
- GPIO_end_pin = "1" #GPIO pin an dem die letzte(2.) lichtschranke sitzt
- GPIO_button_pin = "1" #GPIO pin des button
- t_out = "5.0" #nach wie viel sekunden soll mesung abgebrochen werden falls nicht durch 2. lichtschranke
- waycm = "35.0" #abstand lichtscranken in cm(bei nur einer der durchmesser vom ball)
- waykm = waycm / 100 / 1000 #umrechnung in km
- class button_detect(threading.Thread)
- while true: #endlosschelife
- sleep(0.5) #warte 0.5s ab(kostet dadurch weniger ressourcen die bei den lichtschranken mehr benötigt werden)
- while GPIO.input(GPIO_button_pin) == False: #wenn button gedrückt
- me = sys.executable #schreib in variable "me" den pfad zu diesem script
- print("restart in 5s") #meldung zum neustarten des scripts
- time.sleep(5) #warte 5 sekunden
- os.execl(me, me, * sys.argv) #starte das script aus der variable "me"
- def calcSpeed():
- timeH = timeS / 3600 #/3600 = /60 / 60 (von sekunden in minuten in stunden, 60 * 60 = 3600)
- kmH = waykm / timeH #geschwindigkeit = weg / zeit (v = s/t)
- s_time = 0
- e_time = 0
- setOutput()
- def setOutput(): #wird benötigt um diese funktion später wieder aufzurufen
- i = os.system("clear") #alte geschwindigkeit entfernen
- print (kmH, "km/h") #neue geschwindigkeit anzeigen
- class getTimeS(threading.Thread):
- s_time = 0 #startzeit zurücksetzen
- while True: #endlosschelife
- while GPIO.input(GPIO_start_pin) == GPIO.LOW: #solange 1. lichtscranke nicht unterbrochen
- s_time = time.time() #setze startzeit auf aktuelle uhrzeit
- time.sleep(t_out) #warte timeout ab
- class getTimeE(threading.Thread)
- while True:
- e_time = 0 #endzeit reset
- while GPIO.input(GPIO_end_pin) != GPIO.LOW and time.time() - s_time < t_out: #solange 2. lichtscranke nicht unterbrochen UND verstrichene zeit nciht > las tout
- e_time = time.time() #setzt endzeit auf aktuelle uhrzeit
- timeS = e_time - s_time #verstrichene_zeit = endzeit - startzeit
- time.sleep(t_out / 2) #warte timeout/2
- calcSpeed() #geschwindigkeit berechnen und ausgeben
- gts = getTimeS()
- gte = getTimeE()
- gts.start(), gte.start() #starte die prüfung ob eine lichtschranke unterbrochen wurde
- while True: #unendliche schleife
- GPIO.setmode(GPIO.BCM) #modus für GPIO setzen
- GPIO.setwarnings(False) #fehlermeldung deaktivieren
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement