Python : Reaktion

ftComputing : Programme für die fischertechnik-Interfaces und -konstruktionskästen
  
ftComputing.de
Home
Back
Sitemap
Index
Links
Impressum
Mail
 

Reaktionstest mit ROBO TX und Python 3.1.1

Vier Lampen an O1, O3, O5 und O7
Vier Taster an I1 - I4

Programm ReaktionEins :
Nach Text auf der Console wird eine 10er-Runde mit vom Programm zufällig gewählte Tasten gestartet : DRÜCKEN. Die Reaktionszeit wird angezeigt.

Programm ReaktionZwei :
In einer Runde über zehn Tasten die zur aufleuchtenden Lampe gehörende Taste drücken. Die einzelnen Reaktionszeiten und die Summe der Reaktionszeiten wird angezeigt. Lampenauswahl und Pausenzeit sind zufällig.

Programm ReaktionDrei : 
Mit Tricksersperre : Gleichzeitiges Drücken aller Taster hilft nicht mehr.

Programm ReaktionEins, der einfachste Fall :

from random import *
from time import *
from FishFaTX import *
tx = FishFace()
tx.OpenController(4)

print("Spiel gestartet")
ReaktionGesamt = 0
for i in range(1, 11):
  Taste = randrange(1, 5)
  print("Taste : ", Taste)
  StartZeit = time()
  tx.WaitForLow(0, Taste)
  ReaktionsZeit = time() - StartZeit
  print("Aktuelle Reaktionszeit : ", ReaktionsZeit)
  ReaktionGesamt += ReaktionsZeit
print("Gesamtzeit : ", ReaktionGesamt)
tx.CloseController()

Anmerkungen :
- Imports für Zugriff auf Zufallszahlen und Timer sowie FishFaTX.py
- tx As New FishFace() : Instanzierung der Klasse
- tx.OpenController(4) : Verbindung zu TX Controller an Port 4 (mit RoboTxTest.EXE ermitteln)
- for-Schleife mit zehn zufälligen Tasten. Die jeweilige Tastennummer wird über print angezeigt
- Startzeit : Reaktionszeit auf Ausgang
- WaitForLow(0, Taste) : Warten Drücken / Loslassen Taste
- Feststellen der Reaktionszeit und Ausgeben (print)
- Summieren der Gesamtzeit
- nach Schleifen-Ende : Anzeige der Gesamtzeit, Beenden der Verbindung zum TX Controller

Program ReaktionZwei :

from random import *
from time import *
from FishFaTX import *
tx = FishFace()
tx.OpenController(4)

print("Spiel gestartet")
ReaktionGesamt = 0
tx.Pause(1234)
for i in range(1, 11):
  Taste = randrange(1, 5)
  Lampe = Taste * 2 - 1
  tx.SetLamp(0, Lampe, 512)
  StartZeit = time()
  tx.WaitForLow(0, Taste)
  tx.SetLamp(0, Lampe, 0)
  ReaktionsZeit = time() - StartZeit
  print("Aktuelle Reaktionszeit : ", ReaktionsZeit)
  ReaktionGesamt += ReaktionsZeit
  tx.Pause(randrange(333, 1234))
for i in range(1, 8, 2):
  tx.SetLamp(0, i, 512)
print("Gesamtzeit : ", ReaktionGesamt)
tx.CloseController()

Anmerkungen : 
- Aufbau wie Eins.
- Hinzugekommen sind die Lampen, die vor dem tx.WaitForLow ein- und danach wieder ausgeschaltet werden. 
  Die Textaufforderung fehlt hier.
- Hinzukommen ist noch mehr Zufall : Eine Zufällige Wartezeit vor dem Schalten der jeweiligen Lampe.
- Das Ende der For-Schleife wird durch Einschalten aller Lampen angezeigt.

Programm ReaktionDrei :

from random import *
from time import *
from FishFaTX import *
tx = FishFace()
tx.OpenController(4)

print("Spiel gestartet")
ReaktionGesamt = 0
seed()
tx.Pause(1234)
for i in range(1, 11):
  Taste = randrange(1, 5)
  Lampe = Taste * 2 - 1
  tx.SetLamp(0, Lampe, 512)
  StartZeit = time()

  ok = False
  while not ok:
    tx.WaitForInput(0, Taste)
    ok = True
    for i in range(1, 5):
      if i != Taste and tx.GetInput(0, i) == 1: ok = False
    tx.WaitForInput(0, Taste, 0)
    if not ok: tx.Pause(1234)

  tx.SetLamp(0, Lampe, 0)
  ReaktionsZeit = time() - StartZeit
  print("Aktuelle Reaktionszeit : ", ReaktionsZeit)
  ReaktionGesamt += ReaktionsZeit
  tx.Pause(randrange(333, 1234))
for i in range(1, 8, 2): tx.SetLamp(0, i, 512)
print("Gesamtzeit : ", ReaktionGesamt)
tx.CloseController()

Anmerkungen :
Anstelle des schlichten WaitForLow wird hier eine while-Schleife eingesetzt in der zunächst auf auf das Drücken der zufälligen Taste gewartet wird. Ist das geschehen, werden in einer for-Schleife alle anderen Tasten auf gedrückt abgefragt, wenn ja dann ok = False. Nach Schleifenende wird auf Taste nicht gedrückt gewartet und bei ok = False eine Strafpause eingelegt.

Download 

Sources enthalten in PythonFish311.ZIP

Stand : 27.01.2010