Contador de tiempo de reacción (6 / 7 paso)

Paso 6: El bosquejo

A continuación es la versión actual. Mi codificación no es sofisticada que y comenten mucho.  Pero parece que funciona.

Después de tiempo de reacción de cena tester - creada por Bertus52x11
modificado por Duboisvb
idea es: se probarán 3 veces
cada prueba es una combinación de luces
tiempo de reacción y errores se acumularán una
Hay 3 situaciones posibles de la pantalla
// 1. 3 luces-
// 2. 2 luces-
// 3. 1 luz-

un zumbido se generarán al azar como una forma de distracción

usuario se pedirá para pulsar la reacción cuando correcto se ve la pantalla

#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;
largo CaseTarget; variable caso
largo litepattern; patrón variable
int señal sonora;

flotador TME; Tiempo
flotador de RTME = 0; Tiempo de reacción
Float rtmeTot = 0; tiempo total
char * myStrings1 [] = {"cualquier 1 ON", "Cualquier 2", "All ON 3"};

largo x;  contador de bucle en lugar de retraso
char toneyn;
char buttonPushed;
goodOne Char;
int missedIt;

hacer la configuración una vez
void setup()
{
Serial.Begin(9600);    abre / puerto Serial, establece la tarifa de datos a 9600 bps

LCD.Begin (16, 2);
pinMode (LED1, salida);
pinMode (LED2, salida);
pinMode (LED3, salida);
pinMode (ReactButton, entrada);
pinMode (StartTestButton, entrada);

}

bucle repetidamente
void loop()
{
restablecer todas las variables
TME = 0; Tiempo
RTME = 0; Tiempo de reacción
rtmeTot = 0; tiempo total

x = 0;  contador de bucle en lugar de retraso
toneyn = ' n ';
buttonPushed = ' n ';
goodOne = ' n ';
missedIt = 0;

LCD.Clear(); Limpiar la pantalla.
LCD.Print "(comprobador de la reacción del);
Delay(3000);
LCD.Clear(); Limpiar la pantalla.
LCD.Print ("botón rojo");
lcd.setCursor(0,1); hacia la segunda línea.
LCD.Print ("para iniciar las pruebas.");


mientras que (digitalRead(StartTestButton) == LOW) / / la prueba no se inicia hasta que el botón es empujado (y apretado).
{noTone(13);
Tone(13,1200,30);
Delay(100);
noTone(13);

digitalWrite(LED1,HIGH); Todas las luces se encienden "".
digitalWrite (LED2, alto);
digitalWrite (LED 3, alto);
}


Botón rojo ha sido empujado hasta limpiar la pantalla y luces
LCD.Clear();
digitalWrite (LED 1, bajo);
digitalWrite (LED2, LOW);
digitalWrite (LED 3, bajo);

ir a setcase para obtener info del exhibición de prueba
setCase();

Delay(100);
LCD.Print ("A prueba");
lcd.setCursor(0,1); hacia la segunda línea.
LCD.Print(myStrings1[CaseTarget-1]);
parar aquí por lo que se puede leer la pantalla
retrasar (1000);
comenzar prueba es decir Inicio lámparas estilo cambiante, tono y temporizador y reaccionar a los botones
ir función de todoTest
doTest();

prueba # 2
setCase();
digitalWrite (LED 1, bajo);
digitalWrite (LED2, LOW);
digitalWrite (LED 3, bajo);
Delay(100);
LCD.Clear();
LCD.Print "(prueba B");
lcd.setCursor(0,1); hacia la segunda línea.
LCD.Print(myStrings1[CaseTarget-1]);
retrasar (1000);

doTest();

tercera prueba
setCase();
digitalWrite (LED 1, bajo);
digitalWrite (LED2, LOW);
digitalWrite (LED 3, bajo);
Delay(100);
LCD.Clear();
LCD.Print "(prueba C");
lcd.setCursor(0,1); hacia la segunda línea.
LCD.Print(myStrings1[CaseTarget-1]);
retrasar (1000);
doTest();

ver resultados de 3 pruebas
quedarme aquí hasta que se pulse el botón de prueba de inicio

LCD.Clear();
digitalWrite (LED 1, bajo);
digitalWrite (LED2, LOW);
digitalWrite (LED 3, bajo);

LCD.Print ("Total:");
LCD.Print(rtmeTot,3);
LCD.Print ("segundos");
lcd.setCursor(0,1); hacia la segunda línea.
LCD.Print ("errores:");
LCD.Print(missedIt);

Delay(5000);

}

Mis funciones
// ---------------------------------------------------------
// ------------------------------------------------------------
setCase
Esto es la creación de la situación objetivo es decir
el número de luces

void setCase()
{
randomSeed(analogRead(0)); Ruido aleatorio del pin 0
CaseTarget = random(1,4); Generar un número aleatorio para utilizar como caso de prueba

Si (CaseTarget = 1) entonces 1 luz
Si (CaseTarget = 2) entonces 2 luces
Si (CaseTarget = 3) entonces 3 luces
}



beepYN
al azar a poner un tono para los propósitos de distracción.
void beepYN() {}
randomSeed(analogRead(0)); Ruido aleatorio del pin 0
Un pitido = random(1,8); Generar un número aleatorio para utilizar como caso de prueba

Si (un pitido == 1)
{tone(13,500,100);
}
Si (un pitido == 2)
{tone(13,800,300);
}
Si (un pitido == 3)
{tono (13,1200,500);
}
Si (un pitido == 4)
{tone(13,1600,700);
}
Si (un pitido == 5)
{tone(13,2500,900);
}

}

void waitTime()
{
buttonPushed = ' n ';
para (x = 0; x < 175000; x ++)
{
Si (digitalRead(ReactButton) == HIGH)
{/ fianza en botón reacción presionado
x = 0;
buttonPushed = 'Y';
rotura;
}
Delay(50);
}

}

void assess()
{
llegar hasta aquí porque presionó el botón de reaccionar
o se debe haber presionado
// -----------------------------------------------
así que si presiona y fue todo lo correcto
-tiempo de registro y mostrar resultados
-ir a

presionado pero no debería haber sido
-registro como error
-incrementar el tiempo por 2 segundos como pena

no presionar pero debe tener los medios
patrón correcto lite pasó desapercibida
-registro como error
-incremento por 1 seg

empujado y buena

Si (goodOne == 'Y' & & buttonPushed == 'Y') {}
RTME = millis ()-TME; Tiempo entre lites en y el botón empujado
diivide por 1000 para obtener segundos
RTME = RTME/1000;
tiempo de accumalte para la exhibición de la última
rtmeTot = rtmeTot + RTME;
Mostrar el tiempo de reacción
dspTime();
}

empujado, pero no debe tener
Si (goodOne == ' n ' & & buttonPushed == 'Y')
{
dspError();
Añadir 2 segs para cada miss
rtmeTot = rtmeTot + 2.000;
missedIt = missedIt + 1;
}


no empuja sino que debe tener
Si (goodOne == 'Y' & & buttonPushed == ' n ')
{
dspError();
Añadir 2 segs para cada miss
rtmeTot = rtmeTot + 2.000;
missedIt = missedIt + 1;
}

}

aquí si tiene derecho
void dspTime()
{
Delay(100);
LCD.Clear();
LCD.Print ("tiempo de reacción:");
lcd.setCursor(0,1);
LCD.Print(RTME,3);
LCD.Print ("segundos");

Delay(1000);
}


aquí si presiona el botón en el momento equivocado
void dspError()
{
Delay(100);
LCD.Clear();
LCD.Print("error");
lcd.setCursor(0,1);
LCD.Print ("inténtelo de nuevo");
LCD.Print(RTME);

Delay(1000);
}

void doTest()
{

continúan cambiando tono y cristales hasta que se presiona el botón
Estas son posibilidades
// 1. los 3 en
// 2. 2 - 1 y 2
// 3. 2 - 1 y 3
// 4. 2 - 2 y 3
// 5. 1 on - 1
// 6. 1 a - 2
// 7. 1 a - 3
Nota Existen 3 posibilidades para 2 y 3 luces pero solo para 3
así que para hacer el 3 por un igual cantidad asignará a números extra al azar
a los 3 en

mientras (digitalRead(ReactButton)==LOW)
{
deba al azar cambiar luces y dar tiempo para la reacción
Hay 7 posibilidades por lo que obtendrá un número al azar y luego
sets luces a ese patrón
también se encenderá el tono al azar
randomSeed(analogRead(0)); Ruido aleatorio del pin 0
litepattern = random(8); al azar entre 0 y 8
litepattern = litepattern + 1; obtiene de 1 a 9

antes de encender lámparas estilo, necesita evaluar si es o no un
patrón lite blanco
Compruebe para ver si era correcto patrón lite

Si ((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';
}
otra cosa
{
goodOne = ' n ';
}

Si es un patrón de destino, deberá iniciar el contador

Si (litepattern == 1 || litepattern == 8 || litepattern == 9) {}
digitalWrite (LED 1, elevado);
digitalWrite (LED2, alto);
digitalWrite (LED 3, alto);

Si (goodOne == 'Y')
{
TME=Millis(); Iniciar el cronometraje
}

beepYN();

waitTime();

Si se empuja el botón, deberá evaluar
o si el botón no fue empujado pero debe haber sido
Si ((buttonPushed == 'Y') || (buttonPushed == ' n ' & & goodOne == 'Y'))
{
ASSESS();
retorno;
}
Si ningún botón a continuación bucle

}

if(litepattern == 2) {}
digitalWrite (LED 1, elevado);
digitalWrite (LED2, alto);
digitalWrite (LED 3, bajo);
beepYN();
Si (goodOne == 'Y')
{
TME=Millis(); Iniciar el cronometraje
}
waitTime();

Si se empuja el botón, deberá evaluar
Si ((buttonPushed == 'Y') || (buttonPushed == ' n ' & & goodOne == 'Y'))
{
ASSESS();
retorno;
}
}

if(litepattern == 3) {}
digitalWrite (LED 1, elevado);
digitalWrite (LED2, LOW);
digitalWrite (LED 3, alto);
beepYN();
Si (goodOne == 'Y')
{
TME=Millis(); Iniciar el cronometraje
}
waitTime();

Si se empuja el botón, deberá evaluar
Si ((buttonPushed == 'Y') || (buttonPushed == ' n ' & & goodOne == 'Y'))
{
ASSESS();
retorno;
}
}

if(litepattern == 4) {}
digitalWrite (LED 1, bajo);
digitalWrite (LED2, alto);
digitalWrite (LED 3, alto);
beepYN();
Si (goodOne == 'Y')
{
TME=Millis(); Iniciar el cronometraje
}
waitTime();

Si se empuja el botón, deberá evaluar
Si ((buttonPushed == 'Y') || (buttonPushed == ' n ' & & goodOne == 'Y'))
{
ASSESS();
retorno;
}
}

if(litepattern == 5) {}
digitalWrite (LED 1, elevado);
digitalWrite (LED2, LOW);
digitalWrite (LED 3, bajo);
beepYN();
Si (goodOne == 'Y')
{
TME=Millis(); Iniciar el cronometraje
}
waitTime();

Si se empuja el botón, deberá evaluar
Si ((buttonPushed == 'Y') || (buttonPushed == ' n ' & & goodOne == 'Y'))
{
ASSESS();
retorno;
}
}

if(litepattern == 6) {}
digitalWrite (LED 1, bajo);
digitalWrite (LED2, alto);
digitalWrite (LED 3, bajo);
beepYN();
Si (goodOne == 'Y')
{
TME=Millis(); Iniciar el cronometraje
}
waitTime();

Si se empuja el botón, deberá evaluar
Si ((buttonPushed == 'Y') || (buttonPushed == ' n ' & & goodOne == 'Y'))
{
ASSESS();
retorno;
}
}

if(litepattern == 7) {}
digitalWrite (LED 1, bajo);
digitalWrite (LED2, LOW);
digitalWrite (LED 3, alto);
beepYN();
Si (goodOne == 'Y')
{
TME=Millis(); Iniciar el cronometraje
}
waitTime();

Si se empuja el botón, deberá evaluar
Si ((buttonPushed == 'Y') || (buttonPushed == ' n ' & & goodOne == 'Y'))
{
ASSESS();
retorno;
}
}

}

}

Artículos Relacionados

Contador de tiempo de reacción LED

Contador de tiempo de reacción LED

este proyecto es una versión actualizada del proyecto original de contador de tiempo de reacción se describe en el libro "Electrónicos juegos y juguetes se pueden construir" de Len Buckwalter. Las bombillas incandescentes y los componentes pasiv
Contador de tiempo de reacción / número juego de parada

Contador de tiempo de reacción / número juego de parada

el juego consiste en 3 siete segmento muestra que continuamente seguir contando y el objetivo es dejar en 100. El juego está basado en el Ic4026 el contador de década y 7 segmentos display driver y un 555 para generar pulsosPaso 1: Introducción y mat
¿Cómo medir su tiempo de reacción?

¿Cómo medir su tiempo de reacción?

Estaba leyendo un artículo donde, escritor estaba tratando de impresionar a los efectos de tiempo de reacción en la vida de los atletas, francotiradores, jugadores de Cricket y jugadores de béisbol. Finalmente concluyó con su efecto sobre la vida de
Cómo hacer un contador de tiempo en Minecraft PE

Cómo hacer un contador de tiempo en Minecraft PE

Hola a todosHoy voy a mostrarte cómo hacer un contador de tiempo en Minecraft PE. Hice este temporizador para el uso en un mapa de la aventura, pero no dude en utilizar en cualquier lugar. Este temporizador es ideal para mapas de aventura que tienen
Fischertechnik LED tiempo de reacción juego

Fischertechnik LED tiempo de reacción juego

cómo crear fischertechnik LED tiempo de reacción juegoJuego con diferentes educativos manipulativos para ganarse la vida. (Visita www.weirdrichard.com).Una aplicación fácil de construir es el juego del tiempo de reacción de LED. El controlador robóti
Probador del tiempo de reacción

Probador del tiempo de reacción

hace un mes no sabía nada sobre Arduino y ahora... mi primer proyecto!Mirando hacia atrás, este proyecto combina casi todos los tutoriales que he leído en este corto período: parpadeo de LED, pulsador, piezo y pantalla LCD. Un proyecto útil para cada
Arduino y frambuesa Pi: construcción de sistemas confiables con contadores de tiempo del perro guardián

Arduino y frambuesa Pi: construcción de sistemas confiables con contadores de tiempo del perro guardián

Resumen: En este Instructable veremos cómo construir más confiables sistemas informáticos utilizando contadores de tiempo del perro guardián. Mostramos cómo configurar y utilizar el Raspberry Pi y temporizadores de control interno de Arduino. También
Un contador de tiempo de fallo de alimentación de $20

Un contador de tiempo de fallo de alimentación de $20

Tengo un segundo hogar que es ~ 90 minutos de mi residencia principal. Está en una zona que es propensa a frecuentes cortes de energía, por lo que nunca estás bastante seguro al llegar qué tan seguro podría ser la comida en la nevera comer. Quería un
Temporizador de cocina de Arduino con una introducción interrupciones de contador de tiempo

Temporizador de cocina de Arduino con una introducción interrupciones de contador de tiempo

Bienvenidos a mi primer instructivo,Decidí hacer un proyecto bastante simple para entrar al mundo instructable. Este proyecto trata de hacer un temporizador de cocina simple con un Arduino Uno. Así le dará una pequeña introducción a la pantalla tft d
Probador de tiempo de reacción de Arduino

Probador de tiempo de reacción de Arduino

esto es un probador de tiempo de reacción simple. Al azar se encender un diodo emisor de luz y medir el tiempo que te lleva a un botón y luego enviar la medida a su computadora.Paso 1: materiales MaterialesArduinoProtoboardUSB Cable A BL.E.DPresione
Temporizador analógico - usando un viejo contador de tiempo del huevo

Temporizador analógico - usando un viejo contador de tiempo del huevo

- esto no es un instructivo, esto es solo para chicos mostrando un proyecto finalizado -Temporizador de huevos no usando nada pero su circuito interno mecánico para funcionar como un contador de tiempo para un circuito eléctrico a.k.a. ninguna viruta
Salida con un contador de tiempo

Salida con un contador de tiempo

tengo un taladro inalámbrico con baterías recargables. La carga de las baterías completamente en unos 20 minutos. No se supone que para permanecer en el cargador para más que eso. Sin embargo, a menos que estoy parado justo después del tiempo de carg
Contador de tiempo para hablar en público

Contador de tiempo para hablar en público

como un pastor hablar en público cada semana.  Necesito algo para mantenerme consciente del tiempo transcurrido mientras mi sermón.  Lo que estoy ofreciendo aquí ayudaría a cualquier persona que debe hablar ante una audiencia y, sin embargo, permanec
Contador de tiempo

Contador de tiempo

En este instructable les mostraré como hacer un contador de tiempo sin fin. Se me ocurrió esta idea al llegar a casa de vacaciones y ahora les comparto a todos ustedes en instructables. Este programa es una idea simple pero la codificación para él to