Reaktion Timer (6 / 7 steg)
Steg 6: Skiss
Nedan är den aktuella versionen. Mina kodning är inte det sofistikerade och jag kommentera mycket. Men det verkar fungera.Efter middag reaktionstid tester - skapad av Bertus52x11
modifierad av Duboisvb
tanken är: kommer att testas 3 gånger
varje test är en kombination av lampor
reaktionstid och fel kommer att ackumuleras en
Det finns 3 möjliga bildskärmsinställning situationer
// 1. 3 lighs-
// 2. 2 lampor-
// 3. 1 ljus-
ett surrande ljud genereras slumpmässigt som en form av distraktion
användaren kommer att uppmanas att slå reaktion knappen när korrekt visning ses
#include < LiquidCrystal.h >
LiquidCrystal lcd (12, 11, 5, 4, 3, 2);
int LED1 = 6; LED stift 6
int LED2 = 7. LED stift 7
int LED3 = 8; LED stift 6
int ReactButton = 9;
int StartTestButton = 10;
lång CaseTarget; variabel fall
lång litepattern; variabel mönster
int pip;
float TME; Tid
flyta RTME = 0; Reaktionstid
flyta rtmeTot = 0; Total tid
char * myStrings1 [] = {"Any 1 på", "Alla 2 på", "Alla 3 på"};
lång x; räknare för looping istället för fördröjning
char toneyn;
char buttonPushed;
char god;
int missedIt;
gör installationen en gång
void setup()
{
Serial.BEGIN(9600); öppnar / / seriell port, anger datahastigheten till 9600 bps
LCD.BEGIN (16, 2);
pinMode (LED1, OUTPUT);
pinMode (LED2, OUTPUT);
pinMode (LED3, OUTPUT);
pinMode (ReactButton, indata);
pinMode (StartTestButton, indata);
}
loop upprepade gånger
void loop()
{
Återställ alla variabler
TME = 0; Tid
RTME = 0; Reaktionstid
rtmeTot = 0; Total tid
x = 0; räknare för looping istället för fördröjning
toneyn = 'N';
buttonPushed = 'N';
God = 'N';
missedIt = 0;
LCD.Clear(); Tydlig skärm.
LCD.Print ("reaktion testare");
Delay(3000);
LCD.Clear(); Tydlig skärm.
LCD.Print ("Tryck på röd knapp");
lcd.setCursor(0,1); flytta till andra raden.
LCD.Print ("för att starta tester.");
medan (digitalRead(StartTestButton) == låg) / / testet startar inte förrän knappen skjuts (och höll ner).
{noTone(13);
Tone(13,1200,30);
Delay(100);
noTone(13);
digitalWrite(LED1,HIGH); Alla lampor tänds "".
digitalWrite (LED2, hög);
digitalWrite (LED3, hög);
}
Röda knappen har tryckts så tydlig skärm och stänga av lampor
LCD.Clear();
digitalWrite (LED1, låg);
digitalWrite (LED2, låg);
digitalWrite (LED3, låg);
gå till setcase test visas information om
setCase();
Delay(100);
LCD.Print ("prov A").
lcd.setCursor(0,1); flytta till andra raden.
LCD.Print(myStrings1[CaseTarget-1]);
stanna här så skärmen kan läsas
fördröjning (1000);
börja testet dvs start föränderliga lites, ton och timer och reagera på knappar
gå todoTest funktion
doTest();
prov # 2
setCase();
digitalWrite (LED1, låg);
digitalWrite (LED2, låg);
digitalWrite (LED3, låg);
Delay(100);
LCD.Clear();
LCD.Print ("prov B").
lcd.setCursor(0,1); flytta till andra raden.
LCD.Print(myStrings1[CaseTarget-1]);
fördröjning (1000);
doTest();
tredje försöket
setCase();
digitalWrite (LED1, låg);
digitalWrite (LED2, låg);
digitalWrite (LED3, låg);
Delay(100);
LCD.Clear();
LCD.Print ("prov C").
lcd.setCursor(0,1); flytta till andra raden.
LCD.Print(myStrings1[CaseTarget-1]);
fördröjning (1000);
doTest();
Visa resultaten av 3 tester
bo här tills Start test-knappen trycks
LCD.Clear();
digitalWrite (LED1, låg);
digitalWrite (LED2, låg);
digitalWrite (LED3, låg);
LCD.Print ("totalt:");
LCD.Print(rtmeTot,3);
LCD.Print ("SEK");
lcd.setCursor(0,1); flytta till andra raden.
LCD.Print ("fel:");
LCD.Print(missedIt);
Delay(5000);
}
Mina uppgifter
// ---------------------------------------------------------
// ------------------------------------------------------------
setCase
Detta sätter målet situationen dvs
antalet lampor
void setCase()
{
randomSeed(analogRead(0)); Slumpmässigt brus från stift 0
CaseTarget = random(1,4); Generera ett slumptal att använda som fall för test
om (CaseTarget = 1) sedan 1 lampa
om (CaseTarget = 2) sedan 2 lampor
om (CaseTarget = 3) sedan 3 lampor
}
beepYN
slumpmässigt kommer att lägga ut en ton för distraktion.
void beepYN() {
randomSeed(analogRead(0)); Slumpmässigt brus från stift 0
Ett pip = random(1,8); Generera ett slumptal att använda som fall för test
om (Beep == 1)
{tone(13,500,100);
}
om (Beep == 2)
{tone(13,800,300);
}
om (Beep == 3)
{tonen (13,1200,500);
}
om (Beep == 4)
{tone(13,1600,700);
}
om (Beep == 5)
{tone(13,2500,900);
}
}
void waitTime()
{
buttonPushed = 'N';
för (x = 0; x < 175000; x ++)
{
om (digitalRead(ReactButton) == hög)
{/ / borgen ut på reaktion knappen intryckt
x = 0;
buttonPushed = "Y";
bryta;
}
Delay(50);
}
}
void assess()
{
få här eftersom knappen react trycktes
eller det borde har pressats
// -----------------------------------------------
så om pressade och var rätt sak todo
-registrera tid och Visa resultat
-gå på
tryckte men borde inte ha varit
-spela in som fel
-öka tiden med 2 sek som straff
inte tryckte men bör
rätt lite mönstret gick obemärkt förbi
-spela in som fel
-ökning av 1 SEK
sköt och bra
om (god == 'Y' & & buttonPushed == "Y") {
RTME = millis ()-TME; Tiden mellan lites på och knapp tryckte
diivide av 1000 att få SEK
RTME = RTME/1000;
accumalte tid för senaste displayen
rtmeTot = rtmeTot + RTME;
Visa reaktionstiden
dspTime();
}
drev men bör inte ha
om (god == 'N' & & buttonPushed == "Y")
{
dspError();
Lägg till 2 sek för varje miss
rtmeTot = rtmeTot + 2 000 euro;
missedIt = missedIt + 1.
}
inte skjuts men bör ha
om (god == 'Y' & & buttonPushed == 'N')
{
dspError();
Lägg till 2 sek för varje miss
rtmeTot = rtmeTot + 2 000 euro;
missedIt = missedIt + 1.
}
}
här om fik den rätt
void dspTime()
{
Delay(100);
LCD.Clear();
LCD.Print ("reaktionstid:");
lcd.setCursor(0,1);
LCD.Print(RTME,3);
LCD.Print ("SEK");
Delay(1000);
}
här om skjuts knappen vid fel tidpunkt
void dspError()
{
Delay(100);
LCD.Clear();
LCD.Print("Error");
lcd.setCursor(0,1);
LCD.Print ("försök igen");
LCD.Print(RTME);
Delay(1000);
}
void doTest()
{
fortsätta att ändra lites och tonen tills knappen trycks
Detta är möjligheter
// 1. alla 3 på
// 2. 2 på - 1 & 2
// 3. 2 på - 1 & 3
// 4. 2 på - 2 & 3
// 5. 1 på - 1
// 6. 1 på - 2
// 7. 1 på - 3
Det finns 3 möjligheter för både 2 och 3 lampor men bara en för 3
så för att göra 3 komma upp ett motsvarande kommer att belopp tilldela extra slumptal
till alla 3 på
samtidigt (digitalRead(ReactButton)==LOW)
{
måste slumpmässigt ändra ljus och ge tid för reaktion
Det finns 7 possibilties så kommer att få ett slumptal och sedan
Ställ in ljus till att mönstret
också kommer att aktivera tonen slumpmässigt
randomSeed(analogRead(0)); Slumpmässigt brus från stift 0
litepattern = random(8); slumpmässigt mellan 0 och 8
litepattern = litepattern + 1. blir 1 till 9
innan du slår på lites, måste göra en bedömning om huruvida det är en
mål lite mönster
Kontrollera för att se om det var rätt lite mönstret
om ((CaseTarget == 3 & & (litepattern == 1 || litepattern == 8 || litepattern == 9)) || (CaseTarget == 2 & & (litepattern == 2
|| litepattern == 3 || litepattern == 4)) || (CaseTarget == 1 & & (litepattern == 5 ||
litepattern == 6 || litepattern == 7)))
{
God = "Y";
}
annat
{
God = 'N';
}
om det är ett mål mönster, då behöva starta timer
om (litepattern == 1 || litepattern == 8 || litepattern == 9) {
digitalWrite (LED1, hög);
digitalWrite (LED2, hög);
digitalWrite (LED3, hög);
om (god == "Y")
{
TME=Millis(); Starta tidtagningen
}
beepYN();
waitTime();
Om knappen var sköt, då behöva bedöma
eller om knappen pressades inte men borde ha varit
om ((buttonPushed == "Y") || (buttonPushed == "n" & & god == "Y"))
{
ASSESS();
hemkomst.
}
om ingen knapp då bara fortsätta looping
}
IF(litepattern == 2) {
digitalWrite (LED1, hög);
digitalWrite (LED2, hög);
digitalWrite (LED3, låg);
beepYN();
om (god == "Y")
{
TME=Millis(); Starta tidtagningen
}
waitTime();
Om knappen var sköt, då behöva bedöma
om ((buttonPushed == "Y") || (buttonPushed == "n" & & god == "Y"))
{
ASSESS();
hemkomst.
}
}
IF(litepattern == 3) {
digitalWrite (LED1, hög);
digitalWrite (LED2, låg);
digitalWrite (LED3, hög);
beepYN();
om (god == "Y")
{
TME=Millis(); Starta tidtagningen
}
waitTime();
Om knappen var sköt, då behöva bedöma
om ((buttonPushed == "Y") || (buttonPushed == "n" & & god == "Y"))
{
ASSESS();
hemkomst.
}
}
IF(litepattern == 4) {
digitalWrite (LED1, låg);
digitalWrite (LED2, hög);
digitalWrite (LED3, hög);
beepYN();
om (god == "Y")
{
TME=Millis(); Starta tidtagningen
}
waitTime();
Om knappen var sköt, då behöva bedöma
om ((buttonPushed == "Y") || (buttonPushed == "n" & & god == "Y"))
{
ASSESS();
hemkomst.
}
}
IF(litepattern == 5) {
digitalWrite (LED1, hög);
digitalWrite (LED2, låg);
digitalWrite (LED3, låg);
beepYN();
om (god == "Y")
{
TME=Millis(); Starta tidtagningen
}
waitTime();
Om knappen var sköt, då behöva bedöma
om ((buttonPushed == "Y") || (buttonPushed == "n" & & god == "Y"))
{
ASSESS();
hemkomst.
}
}
IF(litepattern == 6) {
digitalWrite (LED1, låg);
digitalWrite (LED2, hög);
digitalWrite (LED3, låg);
beepYN();
om (god == "Y")
{
TME=Millis(); Starta tidtagningen
}
waitTime();
Om knappen var sköt, då behöva bedöma
om ((buttonPushed == "Y") || (buttonPushed == "n" & & god == "Y"))
{
ASSESS();
hemkomst.
}
}
IF(litepattern == 7) {
digitalWrite (LED1, låg);
digitalWrite (LED2, låg);
digitalWrite (LED3, hög);
beepYN();
om (god == "Y")
{
TME=Millis(); Starta tidtagningen
}
waitTime();
Om knappen var sköt, då behöva bedöma
om ((buttonPushed == "Y") || (buttonPushed == "n" & & god == "Y"))
{
ASSESS();
hemkomst.
}
}
}
}