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