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;
}
}
}
}