Double post car je dépasse les 9000 caractères ....
J'ai cherché un peu de nom coté, et j'ai trouvé un programme que j'ai un peu modifié .
J'aimerai savoir si il est possible de remplacer la fermeture des boutons poussoir par des capteur de vibration/choc (piezo) ? quand le capteur détecte un choc il simule la fermeture du BP .
voici le code :
// Ce programme sert à faire le chasse-led
int led[10]={35,37,39,41,43,45,47,49,51,53}; //Déclaration des pattes des leds
int bp[10]={A0,A1,A2,A3,A4,A5,A6,A7,A8,A9}; //Déclaration des pattes des boutons poussoirs
//Déclaration et initialisation des variables globales servant pour la suite du code
int initLed = 0;
int i;
int randnumber ;
int tirage = 0;
int compteur;
int score;
void setup(){ //Fonction permettant d'initialiser le matériel (leds et boutons poussoir)
Serial.begin(9600); //Indique que Arduino se situe sur le port usb 9600
for(i=0;i<10;i++){ //Boucle parcourant toutes les variables de 0 à 9
pinMode(bp[i], INPUT); //Indique que le bouton poussoir est une entrée
pinMode(led[i],OUTPUT); //Indique que les leds sont des sorties
digitalWrite(led[i],LOW); //On met les leds au niveau bas (elles sont eteintes au depart)
digitalWrite(bp[i],HIGH); //On met les boutons poussoirs au niveau haut
}
compteur=0; //Initialisation du compteur à 0
}
void loop(){
if (initLed == 0) { //Premier passage dans la fonction loop
randnumber=random(0,10); //Déclaration d'un premier nombre aléatoire de 0 à 9
digitalWrite(led[randnumber],HIGH); //Met la led correspondant au numéro aléatoire au niveau haut
Serial.println("valeur aleatoire:"); //Affiche "valeur aléatoire :" dans le terminal
Serial.println(randnumber,DEC); //Affiche dans le terminal le numéro aleatoire
compteur = compteur + 1; //incrémentation du compteur
initLed =1; //Indique que le programme est déjà lancé pour ne plus aller dans ce test
tirage = 1; //Permet d'aller au test suivant
delay(500); //Attente d'une demi seconde (500 = 500ms)
}
if (tirage == 1 ){ //Deuxième test valide si on a passé le premier test
if(digitalRead(bp[randnumber])==LOW){ //Regarde si le bouton poussoir associé a la led est active
Serial.println("valeur du compteur:"); //Affiche "valeur du compteur :" dans le terminal
Serial.println(compteur,DEC); //Affiche la valeur du compteur dans le terminal
digitalWrite(led[randnumber],LOW); //Éteint la led quand on a appuyé sur le bp (bp=bouton poussoir)
randnumber=random(10); //Cherche un autre nombre aléatoire
digitalWrite(led[randnumber],HIGH); //Allume la led correspondant a ce nouveau nombre
compteur = compteur + 1; //Incrémente le compteur
Serial.println("valeur aleatoire:"); //Affiche "valeur aléatoire :" dans le terminal
Serial.println(randnumber,DEC); //Affiche dans le terminal le numero aleatoire
delay(500); //Attente d'une demi seconde
}
else { if ( digitalRead(bp[(randnumber+1)%10])==LOW || //Si le bouton poussoir correspondant à la led n'est pas activé, on regarde si l'utilisateur ne s'est pas trompé et a activé un autre bp
digitalRead(bp[(randnumber+2)%10])==LOW || //Test des bp
digitalRead(bp[(randnumber+3)%10])==LOW || //Test des bp
digitalRead(bp[(randnumber+4)%10])==LOW || //Test des bp
digitalRead(bp[(randnumber+5)%10])==LOW || //Test des bp
digitalRead(bp[(randnumber+6)%10])==LOW || //Test des bp
digitalRead(bp[(randnumber+7)%10])==LOW || //Test des bp
digitalRead(bp[(randnumber+8)%10])==LOW || //Test des bp
digitalRead(bp[(randnumber+9)%10])==LOW){ //Test des bp
digitalWrite(led[randnumber],LOW); //Si l'un des autres bp est activé on éteint la led
Serial.println(" "); //On écrit un espace dahs le terminal
Serial.println("Valeur finale du compteur : "); //On écrit "Valeur finale du compteur : " dans le terminal
Serial.println(compteur,DEC); //Affiche dans le terminal la valeur du compteur
tirage = 0; //Fait en sorte que l'on allume le score à la fin
}
}
}
score=compteur-1; //Calcul du score
if (tirage ==0) { //On teste si la variable tirage est à 0
allumer(score); //Va dans la fonction allumer
}
}
void allumer(int score){ //Fonction alliumer qui prend en variable le score et qui ne retourne rien
digitalWrite(led[0],LOW); //Éteint toutes les leds
digitalWrite(led[1],LOW); //Éteint toutes les leds
digitalWrite(led[2],LOW); //Éteint toutes les leds
digitalWrite(led[3],LOW); //Éteint toutes les leds
digitalWrite(led[4],LOW); //Éteint toutes les leds
digitalWrite(led[5],LOW); //Éteint toutes les leds
digitalWrite(led[6],LOW); //Éteint toutes les leds
digitalWrite(led[7],LOW); //Éteint toutes les leds
digitalWrite(led[8],LOW); //Éteint toutes les leds
digitalWrite(led[9],LOW); //Éteint toutes les leds
delay(1000); //Attend une seconde
for(int j=score; j>0;j--){ //Boucle décrementant le score jusqu'à ce qu'il soit égal à 1
digitalWrite(led[j%10],HIGH); //Allume la led modulo 10 (Un nombre entre 0 et 9)
delay(150); //Attend 150ms
digitalWrite(led[j%10],LOW); //Éteint la led modulo 10 (Un nombre entre 0 et 9)
delay(150); //Attend 150ms
}
digitalWrite(led[0],HIGH); //Allume la led 0
digitalWrite(led[1],HIGH); //Allume la led 1
digitalWrite(led[2],HIGH); //Allume la led 2
digitalWrite(led[3],HIGH); //Allume la led 3
digitalWrite(led[4],HIGH); //Allume la led 3
digitalWrite(led[5],HIGH); //Allume la led 3
digitalWrite(led[6],HIGH); //Allume la led 3
digitalWrite(led[7],HIGH); //Allume la led 3
digitalWrite(led[8],HIGH); //Allume la led 3
digitalWrite(led[9],HIGH); //Allume la led 3
delay(1000); //Attend une seconde
}