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 # I2C-Addressen fuer LCD: 0x27, 0x3f, 0x20.
LCD_Zeilenanzahl = 2 # LCD mit zwei Zeilen ...
LCD_Spaltenanzahl = 16 # ... und 16 Spalten.
# LCD einrichten: I2C-Controller auswählen, lcd-Objekt erzeugen.
# I2C-Controller am ESP32: I2C(0, sda=Pin(21), scl=Pin(22)) | I2C(1, sda=Pin(18), scl=Pin(19))
# I2C-Controller am Arduino Nano ESP32: I2C(0, sda=Pin(11), scl=Pin(12)) | I2C(1, sda=Pin(13), scl=Pin(14))
i2c = I2C(0, sda=Pin(21), scl=Pin(22)) # I2C-Controller 0 hat diese Pins.
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()
#sleep(0.5) # kurze Zeit warten
lcd.clear()
lcd.print("Sobald LED an:")
lcd.print("Taster druecken!")
sleep(0.5) # Damit der Tasterdruck nicht doppelt erfasst wird.
while n<=x:
reaktionsZeit=0
led.off()
warteZeit=randint(2,5) # Erzeugt eine zufällige Zahl zwischen 2 und 5
t()
sleep(0.5) # Damit der Tasterdruck nicht doppelt erfasst wird.
lcd.clear()
lcd.backlight_off()
# Zufällig lange warten
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!")
n=x+1 # Wurde gemogelt, wird die Test-Zählschleife verlassen
warteZeit=warteZeit-0.1
#print(warteZeit)
if n<=x:
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)
# 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
led.off()
lcd.backlight_on()
lcd.clear()
lcd.print('t=',reaktionsZeit,'ms')
lcd.print('Messung Nr.',n)
n=n+1
sleep(0.5) # kurze Zeit warten
else:
lcd.clear()
lcd.print("Test beendet!")
#t()
#sleep(0.5) # kurze Zeit warten
sleep(2)
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
'''
# Ohne Funktion zur Tasterabfrage:
from machine import Pin, I2C
from time import sleep
from lcd_i2c import LCD_I2C
from random import randint
I2C_Adresse = 0x27 # I2C-Addressen fuer LCD: 0x27, 0x3f, 0x20.
LCD_Zeilenanzahl = 2 # LCD mit zwei Zeilen ...
LCD_Spaltenanzahl = 16 # ... und 16 Spalten.
# LCD einrichten: I2C-Controller auswählen, lcd-Objekt erzeugen.
# I2C-Controller am ESP32: I2C(0, sda=Pin(21), scl=Pin(22)) | I2C(1, sda=Pin(18), scl=Pin(19))
# I2C-Controller am Arduino Nano ESP32: I2C(0, sda=Pin(11), scl=Pin(12)) | I2C(1, sda=Pin(13), scl=Pin(14))
i2c = I2C(0, sda=Pin(21), scl=Pin(22)) # I2C-Controller 0 hat diese Pins.
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:
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
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
# Reaktionszeit anzeigen:
# 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
led.off()
lcd.backlight_on()
lcd.clear()
lcd.print('t=',reaktionszeit,'ms')
lcd.print('Messung Nr.',n)
n=n+1
z=taster.value()
while z==0:
z=taster.value()
sleep(0.1)
while z==1:
z=taster.value()
sleep(0.1)
else:
lcd.clear()
lcd.print("Test beendet!")
z=taster.value()
while z==0:
z=taster.value()
sleep(0.1)
sleep(2)
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
'''