from machine import Pin, I2C
from time import sleep, ticks_ms # ticks_ms für Zeitmessung mittels Programmlaufzeit
from lcd_i2c import LCD_I2C
from random import randint
I2C_Adresse = 0x27# ICD-Adresse für LCD: 0x27, 0x3f, 0x20
LCD_Zeilenanzahl = 2#LCD mit zwei Zeilen...
LCD_Spaltenanzahl = 16#..
#LCD einrichten:
# I2C-Schnittstelle am ESP32: sda=Pin(21), scl=Pin(22) || am Arduino Nano ESP32: sda=Pin(11), scl=Pin(12))
i2c = I2C(0, sda=Pin(21), scl=Pin(22), freq=400000)
lcd = LCD_I2C(i2c, I2C_Adresse, LCD_Zeilenanzahl, LCD_Spaltenanzahl)
lcd.backlight_on() #lcd.backlight_off() #Hintergrundbeleuchtung an/aus
# Zeit(hier:1 Sekunde) im Milisekunden-Takt hoch zählen:
led = Pin(2,Pin.OUT)
taster = Pin(4,Pin.IN,Pin.PULL_DOWN)
def t(): # Funktion zum Warten auf Tasterdruck:
z=taster.value() # Taster-Pin einlesen
while z==1: # Solange z 0 ist, also der Taster nicht gedrückt wird ...
z=taster.value() # ... wird der Pin eingelesen und in z gespeichert.
sleep(0.2)
while z==0: # Solange Taster nicht gedrückt ...
sleep(0.001) # eine Millisekunde warten
z=taster.value() # und Pin erneut eingelesen
n=1 # Variable zum Zählen der Messungen
x=5 # Anzahl an Messungen
# Liste für die Reaktionzeiten anlegen:#
#messwerte=[0,1,2,3,4] # Liste mit bekannter Länge
messwerte=[] # Liste mit unbekannter Länge
lcd.clear()
lcd.print("Reaktionstest")
lcd.print("Start mit Taster")
t()
lcd.clear()
lcd.print("Sobald LED an:")
lcd.print("Taster druecken!")
sleep(0.5) # Damit der Tasterdruck nicht doppelt erfasst wird.
while n<=x:
gueltig=True
reaktionsZeit=0
led.off()
t()
sleep(0.5) # Damit der Tasterdruck nicht doppelt erfasst wird.
lcd.clear()
lcd.backlight_off()
warteZeit=randint(2,5) # Erzeugt eine zufällige Zahl zwischen 2 und 5
# Zufällig lange warten, dann LED an:
while warteZeit>0:
led.off()
sleep(0.1)
# Falls Taster jetzt schon gedrückt (gehalten oder hektisch geklickt) wird:
z=taster.value()
if z==1:
lcd.backlight_on()
lcd.clear()
lcd.print("Nicht mogeln!")
gueltig=False # Wurde der Taster gedrückt gehalten, soll diese Messung wiederholt werden.
warteZeit=warteZeit-0.1
#print(warteZeit)
led.on()
# Warten auf Tasterdruck:
startzeit = ticks_ms() # Speichert die Programmlaufzeit in Millisekunden in der Variablen.
t()
endzeit = ticks_ms()
reaktionsZeit = endzeit - startzeit # zeitspanne = ticks_diff(endzeit,startzeit)
if gueltig==True:
if gueltig==True:
# Reaktionszeit anzeigen:
led.off()
lcd.backlight_on()
lcd.clear()
lcd.print('t=',reaktionsZeit,'ms')
lcd.print('Messung Nr.',n)
# Reaktionzeit in einer Liste speichern und anzeigen:
#messwerte[n-1]=reaktionsZeit # Messwert in Liste mit bekannter Länge speichern
messwerte.append(reaktionsZeit) # Messwert in Liste mit unbekannter Länge speichern
print("Messung", n, ":", messwerte[n-1], "ms") # Messwert in Liste anzeigen
n=n+1
else:
reaktionsZeit=0
#t()
#sleep(0.5) # kurze Zeit warten
lcd.clear()
lcd.print("Test beendet!")
# Messwerte in Liste anzeigen:
print("Messwerte-Liste:")
l=0
n=n-1 # n hat ja am Ende aller Messungen den Wert "anzahlAnMessungen+1"
while l<=n-1: # das letzte Listen-Element hat die Adresse n-1, weil Listen mit Null anfangen zu zählen, unsere Messungen aber mit Eins
print("Messung", l+1, ":", messwerte[l], "ms") # Messwert in Liste anzeigen
l=l+1
'''
from machine import Pin, I2C
from time import sleep
from lcd_i2c import LCD_I2C
from random import randint
I2C_Adresse = 0x27# ICD-Adresse für LCD: 0x27, 0x3f, 0x20
LCD_Zeilenanzahl = 2#LCD mit zwei Zeilen...
LCD_Spaltenanzahl = 16#..
#LCD einrichten:
# I2C-Schnittstelle am ESP32: sda=Pin(21), scl=Pin(22) || am Arduino Nano ESP32: sda=Pin(11), scl=Pin(12))
i2c = I2C(0, sda=Pin(21), scl=Pin(22), freq=400000)
lcd = LCD_I2C(i2c, I2C_Adresse, LCD_Zeilenanzahl, LCD_Spaltenanzahl)
lcd.backlight_on() #lcd.backlight_off() #Hintergrundbeleuchtung an/aus
# Zeit(hier:1 Sekunde) im Milisekunden-Takt hoch zählen:
led = Pin(2,Pin.OUT)
taster = Pin(4,Pin.IN,Pin.PULL_DOWN)
n=1
x=5 # Anzahl an Messungen
# Liste für die Reaktionzeiten anlegen:#
#messwerte=[0,1,2,3,4] # Liste mit bekannter Länge
messwerte=[] # Liste mit unbekannter Länge
lcd.clear()
lcd.print("Reaktionstest")
lcd.print("Start mit Taster")
z=taster.value()
while z==0:
sleep(0.2)
z=taster.value()
#print('Taster drücken sobald LED leuchtet')
#sleep(0.5) # kurze Zeit warten zum Ausführen des print-Befehls
lcd.clear()
lcd.print("Sobald LED an:")
lcd.print("Taster druecken!")
sleep(0.5) # Damit der Tasterdruck nicht doppelt erfasst wird.
while n<=x:
gueltig=True
reaktionsZeit=0
wartezeit=randint(1,5)
led.off()
z=taster.value()
while z==0:
sleep(0.2)
z=taster.value()
z=taster.value()
while z==1:
sleep(0.2)
z=taster.value()
lcd.clear()
lcd.backlight_off()
# Zufällig lange warten, dann LED an:
#sleep(wartezeit) # Wartezeit wird nicht per sleep, sondern in einer Herunter-Zählschleife abgewartet:
# Solange Taster jetzt schon gedrückt gehalten oder hektisch geklickt wird, warten:
while wartezeit>0:
led.off()
sleep(0.1)
z=taster.value()
if z==1:
lcd.backlight_on()
lcd.clear()
lcd.print("Nicht mogeln!")
#n=x+1 # Wurde gemogelt, wird die Test-Zählschleife verlassen OVER-ENGINEERING
gueltig=False # Wurde der Taster gedrückt gehalten, soll diese Messung wiederholt werden.
wartezeit=wartezeit-0.1
#print(wartezeit)
#if n<=x:
led.on()
# Auf Tasterdruck warten, dabei Reaktionszeit messen:
z=taster.value()
while z==0:
z=taster.value()
sleep(0.001)
reaktionsZeit=reaktionsZeit+1
if gueltig==True:
# Reaktionszeit anzeigen:
led.off()
lcd.backlight_on()
lcd.clear()
lcd.print('t=',reaktionsZeit,'ms')
lcd.print('Messung Nr.',n)
# Reaktionzeit in einer Liste speichern und anzeigen:
#messwerte[n-1]=reaktionsZeit # Messwert in Liste mit bekannter Länge speichern
messwerte.append(reaktionsZeit) # Messwert in Liste mit unbekannter Länge speichern
print("Messung", n, ":", messwerte[n-1], "ms") # Messwert in Liste anzeigen
n=n+1
else:
reaktionsZeit=0
z=taster.value()
while z==0:
z=taster.value()
sleep(0.1)
while z==1:
z=taster.value()
sleep(0.1)
#else:
# lcd.print("Test beendet!")
z=taster.value()
while z==0:
z=taster.value()
sleep(0.1)
lcd.clear()
lcd.print("Test beendet!")
# Messwerte in Liste anzeigen:
print("Messwerte-Liste:")
l=0
n=n-1 # n hat ja am Ende aller Messungen den Wert "anzahlAnMessungen+1"
while l<=n-1: # das letzte Listen-Element hat die Adresse n-1, weil Listen mit Null anfangen zu zählen, unsere Messungen aber mit Eins
print("Messung", l+1, ":", messwerte[l], "ms") # Messwert in Liste anzeigen
l=l+1
'''