Afficher/Masquer les commentaires
La constante ECART
permet de régler la sensibilité du dispositif :
il faut une différence de valeur de luminosité supérieure à ECART
pour déclencher le dé.
La constante TEMPO
définit le temps d'allumage du dé.
const int ECART=100;
const int TEMPO=2000;
La fonction setup
est exécutée une fois au démarrage du module.
void setup(){
L'instruction randomSeed
permet d'initialiser le générateur aléatoire avec une valeur au hasard.
La valeur au hasard est obtenue en lisant la valeur sur la broche analogique 1 :
cette broche n'étant pas connectée, elle capte « un peu tout ce qui passe dans l'air »
et la valeur retournée fluctue aléatoirement.
Si on ne fait pas cela l'instruction random
utilisée ci-après retourne toujours la même
séquence de nombres à chaque redémarrage du module Arduino.
randomSeed(analogRead(1));
Les broches sur lesquelles sont branchées les LED sont mises en mode OUTPUT
.
for(int i=2;i<=8;i++){
pinMode(i,OUTPUT);
}
}
La fonction loop
est exécutée en boucle.
void loop(){
On capte 2 valeurs de luminosité à 100 ms d'intervalle.
int luminosite1=analogRead(0);
delay(100);
int luminosite2=analogRead(0);
Ce test permet de déclencher le dé si la différence de luminosité entre les deux valeurs
captées est supérieure à ECART
. Cela se produit lorsque luminosite2
est supérieur à luminosite1
de plus de ECART
, donc lorsque le capteur passe de l'ombre à la lumière de façon significative.
if(luminosite2-luminosite1>ECART){
On affiche sur les LED un nombre au hasard entre 1 et 6.
Note : l'instruction random(a,b)
renvoie un nombre entier aléatoire compris
entre a
inclus et b
exclu, c'est pourquoi on écrit random(1,7)
pour avoir un nombre au hasard entre 1 et 6.
afficheDe(random(1,7));
Les LED restent allumées durant TEMPO
ms puis le dé s'éteint
delay(TEMPO);
eteintDe();
}
}
Le rôle de cette fonction est d'allumer les LED correspondant au nombre
passé en paramètre. La mise en HIGH
des bornes est effectuée selon le schéma
de montage des LED sur les bornes 2 à 8 du module Arduino.
void afficheDe(int nombre){
if(nombre==1){
digitalWrite(5,HIGH);
}
if(nombre==2){
digitalWrite(2,HIGH);
digitalWrite(8,HIGH);
}
if(nombre==3){
digitalWrite(2,HIGH);
digitalWrite(5,HIGH);
digitalWrite(8,HIGH);
}
if(nombre==4){
digitalWrite(2,HIGH);
digitalWrite(4,HIGH);
digitalWrite(6,HIGH);
digitalWrite(8,HIGH);
}
if(nombre==5){
digitalWrite(2,HIGH);
digitalWrite(4,HIGH);
digitalWrite(6,HIGH);
digitalWrite(8,HIGH);
digitalWrite(5,HIGH);
}
if(nombre==6){
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,HIGH);
digitalWrite(8,HIGH);
}
}
Dans cette fonction toutes les LED utilisées pour le dé sont éteintes.
void eteintDe(){
for(int i=2;i<=8;i++){
digitalWrite(i,LOW);
}
}