Reactie Timer (6 / 7 stap)

Stap 6: De schets

Hieronder is de huidige versie. Mijn codering is niet zo verfijnd en ik veel commentaar.  Maar het lijkt te werken.

Na het diner reactietijd tester - gemaakt door Bertus52x11
aangepast door Duboisvb
idee is: zal worden getest 3 keer
elke test is een combinatie van verlichting
reactietijd en fouten zal cumuleerbaar een
Er zijn 3 mogelijke weergave situaties
// 1. 3 lighs-
// 2. 2 lights-
// 3. 1 licht-

een zoemgeluid zal willekeurig worden gegenereerd als een vorm van afleiding

gebruiker zal worden gevraagd om op de knop reactie wanneer juiste weergave is gezien

#include < LiquidCrystal.h >
LiquidCrystal lcd (12, 11, 5, 4, 3, 2);
int LED1 = 6; LED pin 6
int LED2 = 7; LED pin 7
int LED3 = 8; LED pin 6
int ReactButton = 9;
int StartTestButton = 10;
lange CaseTarget; variabele geval
lange litepattern; variabele patroon
int Beep;

float TME; Tijd
zweven RTME = 0; Reactietijd
zweven rtmeTot = 0; totale tijd
char * myStrings1 [] = {"Any 1 ON", "2 op", "Alle 3 ON"};

lange x;  teller voor de lus in plaats van vertraging
char toneyn;
char buttonPushed;
char goodOne;
int missedIt;

setup eens doen
VOID Setup
{
Serial.begin(9600);    opent / / seriële poort, gegevenssnelheid ingesteld op 9600 bps

LCD.begin (16, 2);
pinMode (LED1, uitvoer);
pinMode (LED2, uitvoer);
pinMode (LED3, uitvoer);
pinMode (ReactButton, INPUT);
pinMode (StartTestButton, INPUT);

}

herhaaldelijk lus
void loop
{
Reset alle variabelen
TME = 0; Tijd
RTME = 0; Reactietijd
rtmeTot = 0; totale tijd

x = 0;  teller voor de lus in plaats van vertraging
toneyn = 'N';
buttonPushed = 'N';
goodOne = 'N';
missedIt = 0;

LCD.Clear(); Duidelijk scherm.
LCD.Print ("reactie Tester");
delay(3000);
LCD.Clear(); Duidelijk scherm.
LCD.Print ("druk op rode knop');
lcd.setCursor(0,1); verplaatsen naar de tweede lijn.
LCD.Print ("om te beginnen proeven.");


terwijl (digitalRead(StartTestButton) == LOW) / / de test begint niet totdat de knop duwde (en houdt ingedrukt).
{noTone(13);
Tone(13,1200,30);
delay(100);
noTone(13);

digitalWrite(LED1,HIGH); Alle lampjes zijn ingeschakeld "".
digitalWrite (LED2, hoge);
digitalWrite (LED3, hoge);
}


Rode knop is geduwd zo duidelijk scherm en uitschakelen van lichten
LCD.Clear();
digitalWrite (LED1, laag);
digitalWrite (LED2, laag);
digitalWrite (LED3, laag);

Ga naar setcase om test display info
setCase();

delay(100);
LCD.Print ("A Test");
lcd.setCursor(0,1); verplaatsen naar de tweede lijn.
LCD.Print(myStrings1[CaseTarget-1]);
hier stoppen zodat het scherm kan worden gelezen
vertraging (1000);
test start ie veranderende lites, Toon en timer beginnen en reageren op knoppen
Ga todoTest functie
doTest();

test # 2
setCase();
digitalWrite (LED1, laag);
digitalWrite (LED2, laag);
digitalWrite (LED3, laag);
delay(100);
LCD.Clear();
LCD.Print ("Test B");
lcd.setCursor(0,1); verplaatsen naar de tweede lijn.
LCD.Print(myStrings1[CaseTarget-1]);
vertraging (1000);

doTest();

derde test
setCase();
digitalWrite (LED1, laag);
digitalWrite (LED2, laag);
digitalWrite (LED3, laag);
delay(100);
LCD.Clear();
LCD.Print ("Test C");
lcd.setCursor(0,1); verplaatsen naar de tweede lijn.
LCD.Print(myStrings1[CaseTarget-1]);
vertraging (1000);
doTest();

resultaten van 3 tests weergeven
hier blijven tot Start test knop wordt ingedrukt

LCD.Clear();
digitalWrite (LED1, laag);
digitalWrite (LED2, laag);
digitalWrite (LED3, laag);

LCD.Print ("totaal:");
LCD.Print(rtmeTot,3);
LCD.Print ("sec");
lcd.setCursor(0,1); verplaatsen naar de tweede lijn.
LCD.Print ("fouten:");
LCD.Print(missedIt);

delay(5000);

}

Mijn functies
// ---------------------------------------------------------
// ------------------------------------------------------------
setCase
Dit is de instelling van de situatie van de doelgroep dwz
het aantal lichten

VOID setCase()
{
randomSeed(analogRead(0)); Willekeurige ruis van pin 0
CaseTarget = random(1,4); Genereer een willekeurige getal om te gebruiken als case voor test

Als (CaseTarget = 1) dan 1 licht
Als (CaseTarget = 2) dan 2 lampjes
Als (CaseTarget = 3) vervolgens 3 lampen
}



beepYN
zal willekeurig stak een Toon voor afleiding doeleinden.
ongeldig beepYN() {}
randomSeed(analogRead(0)); Willekeurige ruis van pin 0
Pieptoon = random(1,8); Genereer een willekeurige getal om te gebruiken als case voor test

Als (Beep == 1)
{tone(13,500,100);
}
Als (Beep == 2)
{tone(13,800,300);
}
Als (Beep == 3)
{Toon (13,1200,500);
}
Als (Beep == 4)
{tone(13,1600,700);
}
Als (Beep == 5)
{tone(13,2500,900);
}

}

VOID waitTime()
{
buttonPushed = 'N';
voor (x = 0 x < 175000; x ++)
{
Als (digitalRead(ReactButton) == HIGH)
{/ / borgtocht op reactie knop ingedrukt
x = 0;
buttonPushed = 'Y';
breken;
}
delay(50);
}

}

VOID assess()
{
Hier krijgen, omdat de reageren knop werd ingedrukt
of het moet zijn ingedrukt
// -----------------------------------------------
Dus als gedrukt en was van de juiste ding todo
-tijd vastleggen en weergeven van resultaten
-Ga op

ingedrukt, maar moet niet geweest
-record als fout
-verhogen van de tijd met 2 seconden die als straf

niet gedrukt maar moeten middelen
juiste lite patroon onopgemerkt door
-record als fout
-toename door 1 sec

geduwd en goede

Als (goodOne == 'Y' & & buttonPushed == 'Y') {}
RTME = millis ()-TME; Tijd tussen lites op en knop duwde
diivide door 1000 te krijgen secs
RTME = RTME/1000;
accumalte tijd voor laatste weergave
rtmeTot = rtmeTot + RTME;
de reactie tijd weergeven
dspTime();
}

geduwd, maar moet niet
Als (goodOne == 'N' & & buttonPushed == 'Y')
{
dspError();
2 seconden toevoegen voor elke miss
rtmeTot = rtmeTot + 2.000;
missedIt = missedIt + 1;
}


niet geduwd maar moeten
Als (goodOne == 'Y' & & buttonPushed == 'N')
{
dspError();
2 seconden toevoegen voor elke miss
rtmeTot = rtmeTot + 2.000;
missedIt = missedIt + 1;
}

}

hier als bij het rechte eind
VOID dspTime()
{
delay(100);
LCD.Clear();
LCD.Print ("reactietijd:");
lcd.setCursor(0,1);
LCD.Print(RTME,3);
LCD.Print ("sec");

delay(1000);
}


hier als knop duwde op verkeerde moment
VOID dspError()
{
delay(100);
LCD.Clear();
LCD.Print("Error");
lcd.setCursor(0,1);
LCD.Print ("Try Again");
LCD.Print(RTME);

delay(1000);
}

VOID doTest()
{

blijven lites en Toon veranderen totdat de knop is ingedrukt
Dit zijn de mogelijkheden
// 1. alle 3 op
// 2. 2 - 1 & 2
// 3. 2 - 1 & 3
// 4. 2 - 2 & 3
// 5. 1 op - 1
// 6. 1 op - 2
// 7. 1 op - 3
Opmerking Er zijn 3 mogelijkheden voor zowel 2 en 3 lampjes, maar slechts één voor 3
Dus als u 3 komen een gelijk zal bedrag toewijzen extra willekeurige getallen
met alle 3 op

terwijl (digitalRead(ReactButton)==LOW)
{
moet willekeurig veranderen van de verlichting en tijd voor reactie
Er zijn 7 boerenorganisatie dus een willekeurig getal krijgt en vervolgens
set lampjes aan dat patroon
ook zal aanzetten Toon willekeurig
randomSeed(analogRead(0)); Willekeurige ruis van pin 0
litepattern = random(8); willekeurige tussen 0 en 8
litepattern = litepattern + 1; krijgt 1 tot en met 9

voordat ik overga op lites, moeten beoordelen of er een
Target lite patroon
Controleer of het juiste lite patroon was

Als ((CaseTarget == 3 & & (litepattern == 1 || litepattern == 8 || litepattern == 9)) || (CaseTarget == 2 & & (litepattern == 2
|| litepattern == 3 || litepattern == 4)) || (CaseTarget == 1 & & (litepattern == 5 ||
litepattern == 6 || litepattern == 7)))
{
goodOne = 'Y';
}
anders
{
goodOne = 'N';
}

Als er een patroon van de doelgroep, dan moet naar de timer te starten

Als (litepattern == 1 || litepattern == 8 || litepattern == 9) {}
digitalWrite (LED1, hoge);
digitalWrite (LED2, hoge);
digitalWrite (LED3, hoge);

Als (goodOne == 'Y')
{
TME=Millis(); Begin timing
}

beepYN();

waitTime();

Als de knop werd ingedrukt, dan moet beoordelen
of als de knop niet werd geduwd maar moet zijn geweest
Als ((buttonPushed == 'Y') || (buttonPushed == "n" & & goodOne == 'Y'))
{
assess();
terugkeer;
}
Als er geen knop vervolgens gewoon blijven herhalen

}

if(litepattern == 2) {}
digitalWrite (LED1, hoge);
digitalWrite (LED2, hoge);
digitalWrite (LED3, laag);
beepYN();
Als (goodOne == 'Y')
{
TME=Millis(); Begin timing
}
waitTime();

Als de knop werd ingedrukt, dan moet beoordelen
Als ((buttonPushed == 'Y') || (buttonPushed == "n" & & goodOne == 'Y'))
{
assess();
terugkeer;
}
}

if(litepattern == 3) {}
digitalWrite (LED1, hoge);
digitalWrite (LED2, laag);
digitalWrite (LED3, hoge);
beepYN();
Als (goodOne == 'Y')
{
TME=Millis(); Begin timing
}
waitTime();

Als de knop werd ingedrukt, dan moet beoordelen
Als ((buttonPushed == 'Y') || (buttonPushed == "n" & & goodOne == 'Y'))
{
assess();
terugkeer;
}
}

if(litepattern == 4) {}
digitalWrite (LED1, laag);
digitalWrite (LED2, hoge);
digitalWrite (LED3, hoge);
beepYN();
Als (goodOne == 'Y')
{
TME=Millis(); Begin timing
}
waitTime();

Als de knop werd ingedrukt, dan moet beoordelen
Als ((buttonPushed == 'Y') || (buttonPushed == "n" & & goodOne == 'Y'))
{
assess();
terugkeer;
}
}

if(litepattern == 5) {}
digitalWrite (LED1, hoge);
digitalWrite (LED2, laag);
digitalWrite (LED3, laag);
beepYN();
Als (goodOne == 'Y')
{
TME=Millis(); Begin timing
}
waitTime();

Als de knop werd ingedrukt, dan moet beoordelen
Als ((buttonPushed == 'Y') || (buttonPushed == "n" & & goodOne == 'Y'))
{
assess();
terugkeer;
}
}

if(litepattern == 6) {}
digitalWrite (LED1, laag);
digitalWrite (LED2, hoge);
digitalWrite (LED3, laag);
beepYN();
Als (goodOne == 'Y')
{
TME=Millis(); Begin timing
}
waitTime();

Als de knop werd ingedrukt, dan moet beoordelen
Als ((buttonPushed == 'Y') || (buttonPushed == "n" & & goodOne == 'Y'))
{
assess();
terugkeer;
}
}

if(litepattern == 7) {}
digitalWrite (LED1, laag);
digitalWrite (LED2, laag);
digitalWrite (LED3, hoge);
beepYN();
Als (goodOne == 'Y')
{
TME=Millis(); Begin timing
}
waitTime();

Als de knop werd ingedrukt, dan moet beoordelen
Als ((buttonPushed == 'Y') || (buttonPushed == "n" & & goodOne == 'Y'))
{
assess();
terugkeer;
}
}

}

}

Gerelateerde Artikelen

LED reactie Timer

LED reactie Timer

dit project is een bijgewerkte versie van de originele reactie timer project beschreven in Len Buckwalter van "Elektronische spellen & speelgoed je kan bouwen" boek. De gloeilampen en passieve componenten worden vervangen door een microcontr
REACTIE TIMER / aantal spel STOP

REACTIE TIMER / aantal spel STOP

het spel bestaat uit 3 zeven segment displays die continu houden tellen en het doel is om te stoppen op 100. Het spel is gebaseerd op de Ic4026 de decennium-teller en 7 segment display driver en een 555 voor het genereren van pulsenStap 1: Inleiding
Arduino twee spelerspel reactie Timer

Arduino twee spelerspel reactie Timer

Hoe snel uw reflexen zijn het gebruik van dit leuke spel genaamd 'Reactie Timer', die gemakkelijk met behulp van arduino kunnen worden gemaakt. Het belangrijkste doel van dit spel is om de druk op een knop zo spoedig mogelijk wanneer u wordt gevraagd
HackerBoxes 0004: Drie Vijven Replica en 555 Timer experimenten

HackerBoxes 0004: Drie Vijven Replica en 555 Timer experimenten

Uw timing is perfect! Deze maand, abonnees op HackerBoxes zijn het bouwen van een Jumbo, functionerende replica van de 555 chip van discrete transistoren. We werken ook aan verschillende experimenten op basis van de eerbiedwaardige 555 timer chip, di
Chemische reactie tussen kaliumpermanganaat en citroenzuur

Chemische reactie tussen kaliumpermanganaat en citroenzuur

Image courtesy: 23b-cthruchemistry.blogspot.comHallo vrienden, ik ben terug met mijn 9e instructable. Ditmaal ben ik het spelen met chemicaliën. We gaan doen een reactie met kaliumpermanganaat en citroenzuur. De reactie zal zijn hydrolyse-reactie omd
555 timer Basics

555 timer Basics

De 555 timer IC is zonder twijfel een van de belangrijkste en meest gebruikte één Internet-verbinding delen in de geschiedenis. Het ontwerp is ongewijzigd gebleven voor meer dan 40 jaar, waardoor het een van de langst lopende IC-ontwerpen. Het gebrui
Geavanceerde Multimedia Center

Geavanceerde Multimedia Center

Hoe het bouwen van een veelzijdige begroting multimediacentrumStap 1: 1. IntroductieEntertainmentis een vorm van activiteit die houdt van de aandacht en belangstelling van een publiek, of geeft plezier en genot. Het kan een idee of een taak, maar is
Hoe meet je reactietijd??

Hoe meet je reactietijd??

Ik was het lezen van sommige artikel waar schrijver probeerde te doordringen van de invloed van reactietijd op het leven van atleten, sluipschutters, cricketers en baseball-spelers. Ten slotte concludeerde hij met zijn effect op het leven van de gewo
Arduino gebaseerde Meter - een veel LED-Driver

Arduino gebaseerde Meter - een veel LED-Driver

als het directe resultaat van een vraag in het forum Instructables, voor een bargraph gegevens wilt weergeven op het dashboard van een auto, een aangepaste elektronica instructable.Hier, voor uw genot is de auto-barDuino, een eenvoudige weergavesyste
PICAXE "snap connector" kids microcontroller kit!

PICAXE "snap connector" kids microcontroller kit!

Hier is een handige aanpak die past bij een UK afkomstig PICAXE - 08M micro-controller in de gestripte klankmodule uit een kleurrijke "snap connector" elektronische kit. Het ontworpen rondom de eenvoudigste (& goedkoopste!) 80 experimenteren
Hoe Hack een Apple Time Capsule met een Raspberry Pi

Hoe Hack een Apple Time Capsule met een Raspberry Pi

Invoering van de "Pi-Capsule." Het is momenteel de enige Apple Time Capsule die u op uw TV aansluiten kunt..., betekent dit dat het een Apple TV? ;-)OK, ok, laten we zeggen dat je hebt een oude Apple Time Capsule rond leggend dat niet meer werkt
Bouw uw eigen logica sonde op de goedkope met behulp van een 555 Timer!

Bouw uw eigen logica sonde op de goedkope met behulp van een 555 Timer!

Hallo! Door te klikken op dit instructable je een stap dichter bij het gebouw een goedkoop, gemakkelijk om te bouwen, en wat nog belangrijker is nuttig kleine gadget... een logica sonde! Een logica sonde is handig wanneer u werkt met verschillende ch
Hoe maak je een lange termijn time-lapse

Hoe maak je een lange termijn time-lapse

een enkele, standaard batterij in een DSLR camera volstaat voor het maken van de meeste tijd vervalt- maar wat als u wilt vastleggen van een time-lapse voor een week, een maand, of een hele seizoen, terwijl wordt ver van elke bron van macht?Nou, voor
Tijdwaarneming op ESP8266 & arduino uno zonder een RTC (Real Time CLock)?

Tijdwaarneming op ESP8266 & arduino uno zonder een RTC (Real Time CLock)?

Zoals de titel al zegt, ik heb getest het bijhouden van tijd op mijn arduino uno en de ESP8266 / Wemos D1 planken (geprogrammeerd met arduino) zonder het gebruik van Bibliotheken, het internet of een RTC-eenheid. Een heleboel grote instructables hier