Bonjour,
j'ai crée un jeu de réaction il y a quelque temps composé de:
6 LEDs
1 bouton
1 ecran LCD ( pour afficher le temps de réaction)
1 carte arduino uno
et aujourd'hui je souhaite remplacer le bouton par un capteur KY-036 aussi appelé metal touch sensor ou human body sensor.
J'ai donc essayé de modifié mon programme de différente manière,
mais sa bloque toujours au même endroit : une led aléatoire s'allume et pas de réaction dans je touche le capteur.
pouvez vous m'aider svp ?
// OBJECTIF ALLUMER 6 LED EN DELAY ALEATOIRE;
// AFFICHER LE TEMPS DE REACTION "TOUCHE/LED ALLUME" (SUR 1MIN OU 20 CYCLES).
//PARAMETRAGE LED/BOUTON & DUREE
const byte led1 = 10;
const byte led3 = 7;
const byte led2 = 6;
const byte led4 = 9;
const byte led5 = 0;
const byte led6 = 1;
const unsigned long dureeDuJeu = 60000UL; // 60 secondes
//metal touch sensor
int pinBouton = 8; // define Metal Touch Sensor Interface
int Analog = A0;
//PARAMETRAGE ECRAN LCD 16X2
#include <LiquidCrystal.h> // inclusion de la bibliothèque
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Initialisation de la bibliothèque par rapport au cablage
void setup() {
//LEDs comme OUTPUT
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
pinMode(led6, OUTPUT);
//Boutontouch comme INPUT
pinMode(pinBouton, INPUT_PULLUP) ; // define metal touch sensor output interface
pinMode (Analog, INPUT);
// EXPLICATION TEXTE DU PROGRAMME ................................................
lcd.begin(16, 2); // réglage du nombre de ligne et de colonne
lcd.print("SPEED TEST"); // Affiche un message
delay(3000);
lcd.clear();
}
void loop()
{
float Analog;
int Digital;
int lamp_aleatoire;
//Enregistrer le temps de depart ( allumage led1)
unsigned long tempsDebut;
unsigned long cumulDesTemps = 0;
unsigned long nombreDeTentatives = 0;
unsigned long startLed;
Digital = digitalRead(pinBouton);
//attendre tant le bouton ( boutontouch pin8) n'est pas fermé
//while (digitalRead(pinBouton) == HIGH);
tempsDebut = millis();
delay(2000);
while (millis() - tempsDebut <= dureeDuJeu) {
unsigned long tempsCourant = 0;
lamp_aleatoire = random(6);
switch (lamp_aleatoire) {
case 0 :
delay(random(120, 1000)); //Attendre un temps aléatoire entre 100ms et 1.5 secondes
startLed = millis(); //Enregistrer le temps de depart ( allumage led1)
digitalWrite(led1, HIGH); //Allumer la led1
while (Digital == 1); // When the metal touch sensor detects a signal
tempsCourant = millis() - startLed;
digitalWrite(led1, LOW);
cumulDesTemps += tempsCourant;
while (Digital == 0);
break;
case 1 :
delay(random(120, 1000)); //Attendre un temps aléatoire entre 100ms et 1.5 secondes
startLed = millis(); //Enregistrer le temps de depart ( allumage led1)
digitalWrite(led2, HIGH); //Allumer la led1
while (Digital == 1); // When the metal touch sensor detects a signal
tempsCourant = millis() - startLed;
digitalWrite(led2, LOW);
cumulDesTemps += tempsCourant;
while (Digital == 0);
break;
case 2 :
delay(random(120, 1000)); //Attendre un temps aléatoire entre 100ms et 1.5 secondes
startLed = millis(); //Enregistrer le temps de depart ( allumage led1)
digitalWrite(led3, HIGH); //Allumer la led1
while (Digital == 1); // When the metal touch sensor detects a signal
tempsCourant = millis() - startLed;
digitalWrite(led3, LOW);
cumulDesTemps += tempsCourant;
while (Digital == 0);
break;
case 3 :
delay(random(120, 1000)); //Attendre un temps aléatoire entre 100ms et 1.5 secondes
startLed = millis(); //Enregistrer le temps de depart ( allumage led1)
digitalWrite(led4, HIGH); //Allumer la led1
while (Digital == 1); // When the metal touch sensor detects a signal
tempsCourant = millis() - startLed;
digitalWrite(led4, LOW);
cumulDesTemps += tempsCourant;
while (Digital == 0);
break;
case 4 :
delay(random(120, 1000)); //Attendre un temps aléatoire entre 100ms et 1.5 secondes
startLed = millis(); //Enregistrer le temps de depart ( allumage led1)
digitalWrite(led5, HIGH); //Allumer la led1
while (Digital == 1); // When the metal touch sensor detects a signal
tempsCourant = millis() - startLed;
digitalWrite(led5, LOW);
cumulDesTemps += tempsCourant;
while (Digital == 0);
break;
case 5 :
delay(random(120, 1000)); //Attendre un temps aléatoire entre 100ms et 1.5 secondes
startLed = millis(); //Enregistrer le temps de depart ( allumage led1)
digitalWrite(led6, HIGH); //Allumer la led1
while (Digital == 1); // When the metal touch sensor detects a signal
tempsCourant = millis() - startLed;
digitalWrite(led6, LOW);
cumulDesTemps += tempsCourant;
while (Digital == 0);
break;
}
//Afficher le temps
nombreDeTentatives++;
lcd.clear();
lcd.print("Temps : ");
lcd.print(tempsCourant / 1000.0);
lcd.print(" s "); // pour effacer s'il y a des caractères en trop
}
//Afficher le temps moyen
lcd.clear();
lcd.print("Temps Moyen :");
lcd.setCursor(0, 1);
if (nombreDeTentatives == 0) {
lcd.print("Echec");
}
if (millis() > 1 * dureeDuJeu) {
digitalWrite(led1, LOW);
lcd.clear();
lcd.print("fin!!");
tone(13, 1000, 1000);
delay(3000);
lcd.clear();
tone(13, 1000, 1000);
lcd.print("Temps Moyen :");
lcd.setCursor(0, 1);
lcd.print((cumulDesTemps / (nombreDeTentatives)) / 1000.0 );
delay(5000);
}
// ici on remonte au début de la loop et donc on va attendre pour recommencer le jeu
lcd.clear();
lcd.print("Recommencer ?");
lcd.setCursor(0, 1);
lcd.print("FRAPPER SI OK!");
delay(3000);
}