Minuterie de réaction (6 / 7 étapes)

Étape 6: Le croquis

Voici la version actuelle. Mon code n’est pas que sophistiqué et j’ai beaucoup de commentaires.  Mais il semble fonctionner.

Après le temps de réaction de dîner testeur - créé par Bertus52x11
modifié par Duboisvb
Il s’agit : sera testé 3 fois
chaque test est une combinaison de lumières
temps de réaction et les erreurs s’accumuleront une
Il y a 3 situations d’affichage possibles
// 1. 3 lighs-
// 2. 2 feux-
// 3. 1 lumière-

un bruit de gargouillement sera généré au hasard comme une forme de distraction

utilisateur sera demandé, appuyez sur bouton de réaction lorsque correct apparaît à l’écran

#include < LiquidCrystal.h >
Innovente lcd (12, 11, 5, 4, 3, 2) ;
int LED1 = 6 ; LED tige 6
int LED2 = 7 ; Broche LED 7
int DEL3 = 8 ; LED tige 6
int ReactButton = 9 ;
int StartTestButton = 10 ;
long CaseTarget ; variable de cas
long litepattern ; modèle variable
int bip ;

flotteur TME ; Temps
flotteur RTME = 0 ; Temps de réaction
float rtmeTot = 0 ; temps total
char * myStrings1 [] = {"Any 1 ON", "Tout 2 sur", "All ON 3"} ;

long x ;  compteur pour une boucle au lieu de retard
char toneyn ;
char buttonPushed ;
goodOne char ;
int missedIt ;

faire la configuration une fois
void setup()
{
Serial.Begin(9600) ;    ouvre / / port série, établit le taux de données à 9600 bits/s

LCD.Begin (16, 2) ;
pinMode (LED1, sortie) ;
pinMode (LED2, sortie) ;
pinMode (DEL3, sortie) ;
pinMode (entrée, ReactButton) ;
pinMode (entrée, StartTestButton) ;

}

boucle à plusieurs reprises
void loop()
{
réinitialiser toutes les variables
TME = 0 ; Temps
RTME = 0 ; Temps de réaction
rtmeTot = 0 ; temps total

x = 0 ;  compteur pour une boucle au lieu de retard
toneyn = ' n ' ;
buttonPushed = ' n ' ;
goodOne = ' n ' ;
missedIt = 0 ;

LCD.Clear() ; Efface l’écran.
LCD.Print ("réaction testeur") ;
Delay(3000) ;
LCD.Clear() ; Efface l’écran.
LCD.Print ("Appuyez sur le bouton rouge") ;
lcd.setCursor(0,1) ; passer à la deuxième ligne.
LCD.Print ("pour commencer les tests.") ;


même si (digitalRead(StartTestButton) == faible) / / le test ne démarre pas jusqu'à ce que le bouton est poussé (et maintenu enfoncée).
{noTone(13) ;
Tone(13,1200,30) ;
Delay(100) ;
noTone(13) ;

digitalWrite(LED1,HIGH) ; Toutes les lampes sont allumées « ».
digitalWrite (LED2, élevé) ;
digitalWrite (DEL3, élevé) ;
}


Bouton rouge a été poussé jusqu'à efface l’écran et éteignez les lumières
LCD.Clear() ;
digitalWrite (LED1, faible) ;
digitalWrite (LED2, faible) ;
digitalWrite (DEL3, faible) ;

aller à setcase pour obtenir des infos test affichage
setCase() ;

Delay(100) ;
LCD.Print ("Test A") ;
lcd.setCursor(0,1) ; passer à la deuxième ligne.
LCD.Print(myStrings1[CaseTarget-1]) ;
Arrêtez-vous donc l’écran peut être lu
retarder (1000) ;
commencer le test c’est à dire début de lites changeants, de ton et de minuterie et de réagir aux boutons
aller todoTest fonction
doTest() ;

test # 2
setCase() ;
digitalWrite (LED1, faible) ;
digitalWrite (LED2, faible) ;
digitalWrite (DEL3, faible) ;
Delay(100) ;
LCD.Clear() ;
LCD.Print ("Test B") ;
lcd.setCursor(0,1) ; passer à la deuxième ligne.
LCD.Print(myStrings1[CaseTarget-1]) ;
retarder (1000) ;

doTest() ;

troisième essai
setCase() ;
digitalWrite (LED1, faible) ;
digitalWrite (LED2, faible) ;
digitalWrite (DEL3, faible) ;
Delay(100) ;
LCD.Clear() ;
LCD.Print ("Test C") ;
lcd.setCursor(0,1) ; passer à la deuxième ligne.
LCD.Print(myStrings1[CaseTarget-1]) ;
retarder (1000) ;
doTest() ;

affichage des résultats de 3 essais
rester ici jusqu'à ce que le bouton de test de démarrage est poussé

LCD.Clear() ;
digitalWrite (LED1, faible) ;
digitalWrite (LED2, faible) ;
digitalWrite (DEL3, faible) ;

LCD.Print ("Total:") ;
LCD.Print(rtmeTot,3) ;
LCD.Print (« secs ») ;
lcd.setCursor(0,1) ; passer à la deuxième ligne.
LCD.Print ("erreurs:") ;
LCD.Print(missedIt) ;

Delay(5000) ;

}

Mes fonctions
// ---------------------------------------------------------
// ------------------------------------------------------------
setCase
Cela met la situation cible c’est à dire
le nombre de lumières

Sub setCase()
{
randomSeed(analogRead(0)) ; Bruit aléatoire de broche 0
CaseTarget = random(1,4) ; Générer un nombre aléatoire à utiliser comme cas pour test

Si (CaseTarget = 1) puis 1 lumière
Si (CaseTarget = 2) puis 2 feux
Si (CaseTarget = 3) puis 3 lumières
}



beepYN
mettra au hasard une tonalité à des fins de distraction.
void beepYN() {}
randomSeed(analogRead(0)) ; Bruit aléatoire de broche 0
Bip = random(1,8) ; Générer un nombre aléatoire à utiliser comme cas pour test

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

}

Sub waitTime()
{
buttonPushed = ' n ' ;
pour (x = 0; x < 175000; x ++)
{
Si (digitalRead(ReactButton) == HIGH)
{/ / caution sur bouton de réaction enfoncée
x = 0 ;
buttonPushed = « Y » ;
rupture ;
}
Delay(50) ;
}

}

Sub assess()
{
obtenez ici parce qu’il s’appuie sur le bouton de réagir
ou il devrait avoir été pressé
// -----------------------------------------------
donc, si pressé et a été la chose correcte todo
-un temps record et afficher les résultats
-Continuez sur la rue

pressé, mais n’aurait pas dû être
-record comme erreur
-incrémenter le temps de 2 secondes sous peine de

pas pressé, mais devrait avoir les moyens
modèle lite correct est passé inaperçu
-record comme erreur
-incrément de 1 sec

poussés et bonne

Si (goodOne == « Y » & & buttonPushed == « Y ») {}
RTME = millis ()-TME ; Temps entre lites sur et bouton poussé
diivide par 1000 pour obtenir secs
RTME = RTME/1000 ;
accumalte temps pour dernier affichage
rtmeTot = rtmeTot + RTME ;
afficher le temps de réaction
dspTime() ;
}

poussé mais ne doivent pas
Si (goodOne == ' n & & buttonPushed == « Y »)
{
dspError() ;
Ajouter 2 sec pour chaque miss
rtmeTot = rtmeTot + 2.000 ;
missedIt = missedIt + 1 ;
}


pas poussé, mais devrait avoir
Si (goodOne == « Y » & & buttonPushed == ' n ')
{
dspError() ;
Ajouter 2 sec pour chaque miss
rtmeTot = rtmeTot + 2.000 ;
missedIt = missedIt + 1 ;
}

}

ici si s’est pas trompé
Sub dspTime()
{
Delay(100) ;
LCD.Clear() ;
LCD.Print ("temps de réaction:") ;
lcd.setCursor(0,1) ;
LCD.Print(RTME,3) ;
LCD.Print (« Secs ») ;

Delay(1000) ;
}


ici, si on le pousse bouton au mauvais moment
Sub dspError()
{
Delay(100) ;
LCD.Clear() ;
LCD.Print("Error") ;
lcd.setCursor(0,1) ;
LCD.Print ("réessayez") ;
LCD.Print(RTME) ;

Delay(1000) ;
}

Sub doTest()
{

continuer à changer les lites et ton jusqu'à ce que le bouton est enfoncé
Voici les possibilités
// 1. tous les 3 sur
// 2. 2 - 1 & 2
// 3. 2 - 1 & 3
// 4. 2 - 2 & 3
// 5. 1 sur - 1
// 6. 1 sur - 2
// 7. 1 sur - 3
Remarque Il existe 3 possibilités pour 2 et 3 feux, mais juste un pour 3
donc pour faire 3 un égal montant assignera des nombres aléatoires supplémentaires
tous les 3 sur

tandis que (digitalRead(ReactButton)==LOW)
{
besoin de changer feux au hasard et de donner le temps de réaction
Il y a 7 possibilties sorte vous obtiendrez un nombre aléatoire, puis
Set de lumières pour ce modèle
aussi s’allume ton au hasard
randomSeed(analogRead(0)) ; Bruit aléatoire de broche 0
litepattern = random(8) ; aléatoire entre 0 et 8
litepattern = litepattern + 1 ; Obtient 1 à 9

avant d’allumer les lites, besoin d’évaluer s’il y a un
modèle lite cible
vérifier pour voir si c’était le modèle correct de 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 » ;
}
d’autre
{
goodOne = ' n ' ;
}

Si c’est un modèle de cible, puis ont besoin démarrer la minuterie

Si (litepattern == 1 || litepattern == 8 || litepattern == 9) {}
digitalWrite (LED1, élevé) ;
digitalWrite (LED2, élevé) ;
digitalWrite (DEL3, élevé) ;

Si (goodOne == « Y »)
{
TME=Millis() ; Commencez à chronométrer
}

beepYN() ;

waitTime() ;

Si le bouton est enfoncé, puis il faut évaluer
ou si le bouton n’a pas poussé mais doit avoir été
Si ((buttonPushed == « Y ») || (buttonPushed == ' n & & goodOne == 'Y'))
{
assess() ;
retour ;
}
Si aucun bouton ne continuez juste une boucle

}

if(litepattern == 2) {}
digitalWrite (LED1, élevé) ;
digitalWrite (LED2, élevé) ;
digitalWrite (DEL3, faible) ;
beepYN() ;
Si (goodOne == « Y »)
{
TME=Millis() ; Commencez à chronométrer
}
waitTime() ;

Si le bouton est enfoncé, puis il faut évaluer
Si ((buttonPushed == « Y ») || (buttonPushed == ' n & & goodOne == 'Y'))
{
assess() ;
retour ;
}
}

if(litepattern == 3) {}
digitalWrite (LED1, élevé) ;
digitalWrite (LED2, faible) ;
digitalWrite (DEL3, élevé) ;
beepYN() ;
Si (goodOne == « Y »)
{
TME=Millis() ; Commencez à chronométrer
}
waitTime() ;

Si le bouton est enfoncé, puis il faut évaluer
Si ((buttonPushed == « Y ») || (buttonPushed == ' n & & goodOne == 'Y'))
{
assess() ;
retour ;
}
}

if(litepattern == 4) {}
digitalWrite (LED1, faible) ;
digitalWrite (LED2, élevé) ;
digitalWrite (DEL3, élevé) ;
beepYN() ;
Si (goodOne == « Y »)
{
TME=Millis() ; Commencez à chronométrer
}
waitTime() ;

Si le bouton est enfoncé, puis il faut évaluer
Si ((buttonPushed == « Y ») || (buttonPushed == ' n & & goodOne == 'Y'))
{
assess() ;
retour ;
}
}

if(litepattern == 5) {}
digitalWrite (LED1, élevé) ;
digitalWrite (LED2, faible) ;
digitalWrite (DEL3, faible) ;
beepYN() ;
Si (goodOne == « Y »)
{
TME=Millis() ; Commencez à chronométrer
}
waitTime() ;

Si le bouton est enfoncé, puis il faut évaluer
Si ((buttonPushed == « Y ») || (buttonPushed == ' n & & goodOne == 'Y'))
{
assess() ;
retour ;
}
}

if(litepattern == 6) {}
digitalWrite (LED1, faible) ;
digitalWrite (LED2, élevé) ;
digitalWrite (DEL3, faible) ;
beepYN() ;
Si (goodOne == « Y »)
{
TME=Millis() ; Commencez à chronométrer
}
waitTime() ;

Si le bouton est enfoncé, puis il faut évaluer
Si ((buttonPushed == « Y ») || (buttonPushed == ' n & & goodOne == 'Y'))
{
assess() ;
retour ;
}
}

if(litepattern == 7) {}
digitalWrite (LED1, faible) ;
digitalWrite (LED2, faible) ;
digitalWrite (DEL3, élevé) ;
beepYN() ;
Si (goodOne == « Y »)
{
TME=Millis() ; Commencez à chronométrer
}
waitTime() ;

Si le bouton est enfoncé, puis il faut évaluer
Si ((buttonPushed == « Y ») || (buttonPushed == ' n & & goodOne == 'Y'))
{
assess() ;
retour ;
}
}

}

}

Articles Liés

Minuterie de réaction LED

Minuterie de réaction LED

ce projet est une version actualisée du projet minuterie réaction original décrit dans livre de "Electronic Games & Toys vous pouvez construire" de Len Buckwalter. Les ampoules à incandescence et les composants passifs sont remplacés par un
MINUTERIE de réaction / nombre d’arrêt de jeu

MINUTERIE de réaction / nombre d’arrêt de jeu

le jeu se compose de 3 sept segments des afficheurs continuellement tenir compte et il s'agit d'arrêter sur 100. Le jeu est basé sur le Ic4026 le compteur de la décennie et 7 segments d'affichage pilote et un 555 pour générer des impulsionsÉtape 1: I
Arduino DIY 3D IR geste capteur

Arduino DIY 3D IR geste capteur

Si vous aimez ce projet Merci de voter pour elle dans le « concours de capteurs 2016 » comme il m'a fallu beaucoup de temps pour le rendre (en appuyant sur le bouton supérieur droit qui dit « Vote »).* Avez-vous jamais eu envie d'utiliser les gestes
HackerBoxes 0004 : Trois Fives répliques et 555 Timer expériences

HackerBoxes 0004 : Trois Fives répliques et 555 Timer expériences

Votre timing est parfait ! Ce mois-ci, les abonnés à HackerBoxes construisent une réplique suite, fonctionnement de la puce 555 de transistors discrets. Nous travaillons également sur plusieurs expériences basées sur la puce de 555 minuterie vénérabl
Arduino selon compteur - un nombreux LED Driver

Arduino selon compteur - un nombreux LED Driver

comme le résultat direct d'une question dans le forum Instructables, pour un diagramme à barre afficher des données sur le tableau de bord d'une voiture, une électronique personnalisée instructable.Ici, pour votre délectation est l'auto-barDuino, un
Smart feu stop Proof of Concept

Smart feu stop Proof of Concept

Avertissement : afficheurs à LED face arrière ne sont pas légaux aux États-Unis et donc ce projet est destiné comme une preuve de concept seulement.ATTENTION : Vidéo contient un langage expliciteJ'ai eu l'honneur d'une invitation à un événement de ha
Ensemble de microcontrôleur pour enfants PICAXE « emboîter le connecteur » !

Ensemble de microcontrôleur pour enfants PICAXE « emboîter le connecteur » !

Voici une approche astucieuse qui correspond à une UK source microcontrôleur PICAXE 08M dans le module de sons vidé d'un kit électronique colorée « emboîter le connecteur ». Il est conçu autour de la plus simple (et moins cher!) 80 expérimenter kit,
Minuterie de jeu 3

Minuterie de jeu 3

Ci-dessus, mon unité créée finale apparaît dans deux récipients différents, mais aussi actionné par une banque d'alimentation USB (au lieu d'une pile bouton).J'ai voulu faire une petite minuterie intéressante à utiliser avec des jeux comme le Boggle.
Raspberry Pi et Arduino : construire des systèmes fiables avec les minuteries de chien de garde

Raspberry Pi et Arduino : construire des systèmes fiables avec les minuteries de chien de garde

Résumé : Dans ce Instructable, nous examinons comment construire des systèmes informatiques plus fiables à l'aide de minuteurs de chien de garde. Nous montrons comment configurer et utiliser le Raspberry Pi et minuteries de chien de garde interne Ard
Minuterie de relais d’arrêt automatique réglable pour les applications haute puissance

Minuterie de relais d’arrêt automatique réglable pour les applications haute puissance

présenté par Ace Monster jouets Hackerspace à Oakland, CA pour le programme de commandites de InstructablesAvez-vous jamais voulu s'assurer qu'un appareil électrique que vous utilisez automatiquement s'éteint après un certain temps ?  Cela peut améli
CO2 Minuterie de Dragster avec Arduino

CO2 Minuterie de Dragster avec Arduino

Ce projet est pour une piste de dragster de co2.Étape 1: Rassembler des matériauxArduino Uno2 écrans LCDFils2 capteurs IR2 LEDs IR1 interrupteur momentanéCourse de Dragster Pitsco CO2Résistances de 2 10 k ohmsEtape 2: Conception du cadre LCD Nous avo
BRICOLAGE électrique eau chauffage minuterie

BRICOLAGE électrique eau chauffage minuterie

Un jour, il y a quelques années j'ai regardais quelques pièces au hasard qui étaient assis autour, essayant de penser à quelque chose que je pouvais faire avec eux. J'ai eu un boîtier en plastique qui contenait autrefois un haut-parleur PC, un commut
Arduino contrôlée minuterie de cuisine

Arduino contrôlée minuterie de cuisine

Chacun d'entre vous doit ont vécu ce que vous avez quelque chose à cuire sur votre gazinière tandis que de l'autre côté vous get occupé à regarder la télévision ou obtenir une conversation profonde que vous réalisez sur la détection d'une odeur qu'il
Minuterie de douche automatique bricolage

Minuterie de douche automatique bricolage

Nous avons tous fait dire de prendre des douches de 5 minutes. Cependant, savons-nous vraiment combien de temps nos douches sont réellement ?Voici un projet de week-end simple qui est ludique et pratique. Ce circuit utilise une puce ATtiny85 qui déma