L'arbre des Rêves : Différence entre versions
(→Création du prototype) |
(→Code utilisé pour le prototype) |
||
| Ligne 32 : | Ligne 32 : | ||
==Code utilisé pour le prototype== | ==Code utilisé pour le prototype== | ||
| + | |||
| + | |||
| + | //============= Arbre Veilleuse ============== | ||
| + | |||
| + | //Coordonner 4 groupes de 5 leds pour réaliser différentes fonctions (clignoter ensemble/séparément, | ||
| + | //rester allumées/éteintes, clignotement alterné,etc) à partir d'un appui sur le bouton poussoir. | ||
| + | |||
| + | |||
| + | //Définition des variables de broche | ||
| + | const int bp = 1; | ||
| + | const int grpLed_1 = 2; | ||
| + | const int grpLed_2 = 3; | ||
| + | const int grpLed_3 = 4; | ||
| + | const int grpLed_4 = 5; | ||
| + | |||
| + | //Définition des variables d'état | ||
| + | int StateBp = digitalRead(bp); | ||
| + | bool StateLed[4]={LOW, LOW, LOW, LOW}; | ||
| + | int mode = 0; //Mode par défaut | ||
| + | int etape =0; //Etape clignotement | ||
| + | unsigned long previousMillis = 0; // Dernier instant où l'état de la led a été modifié | ||
| + | const long interval = 500; // intervalle de clignotement (millisecondes) | ||
| + | |||
| + | |||
| + | void setup() { | ||
| + | //Initialisation de la communication série à 9600 bits par seconde | ||
| + | Serial.begin(9600); | ||
| + | //Indication des entrées | ||
| + | pinMode(bp, INPUT); | ||
| + | pinMode(grpLed_1, OUTPUT); | ||
| + | pinMode(grpLed_2, OUTPUT); | ||
| + | pinMode(grpLed_3, OUTPUT); | ||
| + | pinMode(grpLed_4, OUTPUT); | ||
| + | } | ||
| + | |||
| + | void loop() { | ||
| + | unsigned long currentMillis = millis(); | ||
| + | |||
| + | //Rafraichissement des lectures du bouton poussoir | ||
| + | StateBp = digitalRead(bp); | ||
| + | |||
| + | //Un changement de mode ? | ||
| + | if (StateBp == HIGH) | ||
| + | { Serial.print("Hey !! mode = ");Serial.println(mode); | ||
| + | mode+=1; | ||
| + | ExtinctionAll(StateLed);//reset | ||
| + | } | ||
| + | |||
| + | //Modifie les états des Leds selon le mode | ||
| + | switch (mode) { | ||
| + | case 1 : //Allumage de l'ensemble des led | ||
| + | AllumerAll(StateLed); | ||
| + | break; | ||
| + | case 2 : //Clignotement de toutes les leds simultanément | ||
| + | if (currentMillis - previousMillis >= interval) | ||
| + | { | ||
| + | StateLed[0]=ClignoterGrp(StateLed[0]); | ||
| + | StateLed[1]=ClignoterGrp(StateLed[1]); | ||
| + | StateLed[2]=ClignoterGrp(StateLed[2]); | ||
| + | StateLed[3]=ClignoterGrp(StateLed[3]); | ||
| + | } | ||
| + | break; | ||
| + | case 3 : //Alumage des leds les unes après les autres | ||
| + | if (currentMillis - previousMillis >= interval) | ||
| + | { | ||
| + | etape+=1; //Passage à l'étape suivante | ||
| + | switch (etape) { // Allumer un groupe ou plusieurs en fonction de la séquence définie | ||
| + | case 1 : | ||
| + | StateLed[3] = LOW; | ||
| + | StateLed[0] = HIGH; | ||
| + | break; | ||
| + | case 2 : | ||
| + | StateLed[0] = LOW; | ||
| + | StateLed[1] = HIGH; | ||
| + | break; | ||
| + | case 3 : | ||
| + | StateLed[1] = LOW; | ||
| + | StateLed[2] = HIGH; | ||
| + | break; | ||
| + | case 4 : | ||
| + | StateLed[2] = LOW; | ||
| + | StateLed[3] = HIGH; | ||
| + | etape=0; | ||
| + | break; | ||
| + | default : | ||
| + | etape=0; | ||
| + | break; | ||
| + | } | ||
| + | } | ||
| + | break; | ||
| + | default : | ||
| + | //Si le mode n'est pas l'un de ceux au dessus, on éteint les leds et on fait passer le mode à 0 | ||
| + | mode = 0; | ||
| + | ExtinctionAll(StateLed); | ||
| + | break; | ||
| + | } | ||
| + | |||
| + | //Retour vers les sorties | ||
| + | digitalWrite(grpLed_1, StateLed[0]); | ||
| + | digitalWrite(grpLed_2, StateLed[1]); | ||
| + | digitalWrite(grpLed_3, StateLed[2]); | ||
| + | digitalWrite(grpLed_4, StateLed[3]); | ||
| + | |||
| + | //Affichage console pour vérification | ||
| + | Serial.print("Rouge = "); Serial.print(StateLed[0]); Serial.print('\n'); | ||
| + | Serial.print("Bleu = "); Serial.print(StateLed[1]); Serial.print('\n'); | ||
| + | Serial.print("Vert = "); Serial.print(StateLed[2]); Serial.print('\n'); | ||
| + | Serial.print("Jaune = "); Serial.print(StateLed[3]); Serial.print('\n'); | ||
| + | Serial.print('\n'); | ||
| + | }//loop | ||
| + | |||
| + | //Fonction pour éteindre toutes les leds | ||
| + | void ExtinctionAll(bool StateLed[4]) | ||
| + | { | ||
| + | StateLed[0] = LOW; | ||
| + | StateLed[1] = LOW; | ||
| + | StateLed[2] = LOW; | ||
| + | StateLed[3] = LOW; | ||
| + | } | ||
| + | |||
| + | //Fonction pour éteindre toutes les leds | ||
| + | void AllumerAll(bool StateLed[4]) | ||
| + | { | ||
| + | StateLed[0] = HIGH; | ||
| + | StateLed[1] = HIGH; | ||
| + | StateLed[2] = HIGH; | ||
| + | StateLed[3] = HIGH; | ||
| + | } | ||
| + | |||
| + | //Fonction pour faire clignoter un des groupes de leds | ||
| + | bool ClignoterGrp(bool StateLedi) | ||
| + | { | ||
| + | if (StateLedi == HIGH) | ||
| + | {StateLedi=LOW;} | ||
| + | else | ||
| + | {StateLedi=HIGH;} | ||
| + | return StateLedi; | ||
| + | } | ||
Version du 20 janvier 2019 à 12:29
Sommaire
INTRODUCTION
Notre attrape rêve sert aussi de veilleuse pour les enfants ou les personnes qui ne veulent pas dormir dans le noir. Il a une forme d'arbre et est lumineux grâce aux leds qui sont commandées par une carte arduino Uno.
Création du prototype
Première ébauche de notre arbre
Le matériel nécessaire
- une carte arduino
- du fil électrique
- des leds
- une pince à dénuder
- de quoi faire une boîte
Les différentes étapes de la création
- création de la boîte
- création de l'arbre
- création du circuit électrique
- assemblage de l'ensemble
Code utilisé pour le prototype
//============= Arbre Veilleuse ==============
//Coordonner 4 groupes de 5 leds pour réaliser différentes fonctions (clignoter ensemble/séparément, //rester allumées/éteintes, clignotement alterné,etc) à partir d'un appui sur le bouton poussoir.
//Définition des variables de broche
const int bp = 1;
const int grpLed_1 = 2;
const int grpLed_2 = 3;
const int grpLed_3 = 4;
const int grpLed_4 = 5;
//Définition des variables d'état int StateBp = digitalRead(bp); bool StateLed[4]={LOW, LOW, LOW, LOW}; int mode = 0; //Mode par défaut int etape =0; //Etape clignotement unsigned long previousMillis = 0; // Dernier instant où l'état de la led a été modifié const long interval = 500; // intervalle de clignotement (millisecondes)
void setup() {
//Initialisation de la communication série à 9600 bits par seconde Serial.begin(9600); //Indication des entrées pinMode(bp, INPUT); pinMode(grpLed_1, OUTPUT); pinMode(grpLed_2, OUTPUT); pinMode(grpLed_3, OUTPUT); pinMode(grpLed_4, OUTPUT);
}
void loop() {
unsigned long currentMillis = millis();
//Rafraichissement des lectures du bouton poussoir
StateBp = digitalRead(bp);
//Un changement de mode ?
if (StateBp == HIGH)
{ Serial.print("Hey !! mode = ");Serial.println(mode);
mode+=1;
ExtinctionAll(StateLed);//reset
}
//Modifie les états des Leds selon le mode
switch (mode) {
case 1 : //Allumage de l'ensemble des led
AllumerAll(StateLed);
break;
case 2 : //Clignotement de toutes les leds simultanément
if (currentMillis - previousMillis >= interval)
{
StateLed[0]=ClignoterGrp(StateLed[0]);
StateLed[1]=ClignoterGrp(StateLed[1]);
StateLed[2]=ClignoterGrp(StateLed[2]);
StateLed[3]=ClignoterGrp(StateLed[3]);
}
break;
case 3 : //Alumage des leds les unes après les autres
if (currentMillis - previousMillis >= interval)
{
etape+=1; //Passage à l'étape suivante
switch (etape) { // Allumer un groupe ou plusieurs en fonction de la séquence définie
case 1 :
StateLed[3] = LOW;
StateLed[0] = HIGH;
break;
case 2 :
StateLed[0] = LOW;
StateLed[1] = HIGH;
break;
case 3 :
StateLed[1] = LOW;
StateLed[2] = HIGH;
break;
case 4 :
StateLed[2] = LOW;
StateLed[3] = HIGH;
etape=0;
break;
default :
etape=0;
break;
}
}
break;
default :
//Si le mode n'est pas l'un de ceux au dessus, on éteint les leds et on fait passer le mode à 0
mode = 0;
ExtinctionAll(StateLed);
break;
}
//Retour vers les sorties
digitalWrite(grpLed_1, StateLed[0]);
digitalWrite(grpLed_2, StateLed[1]);
digitalWrite(grpLed_3, StateLed[2]);
digitalWrite(grpLed_4, StateLed[3]);
//Affichage console pour vérification
Serial.print("Rouge = "); Serial.print(StateLed[0]); Serial.print('\n');
Serial.print("Bleu = "); Serial.print(StateLed[1]); Serial.print('\n');
Serial.print("Vert = "); Serial.print(StateLed[2]); Serial.print('\n');
Serial.print("Jaune = "); Serial.print(StateLed[3]); Serial.print('\n');
Serial.print('\n');
}//loop
//Fonction pour éteindre toutes les leds void ExtinctionAll(bool StateLed[4]) {
StateLed[0] = LOW; StateLed[1] = LOW; StateLed[2] = LOW; StateLed[3] = LOW;
}
//Fonction pour éteindre toutes les leds void AllumerAll(bool StateLed[4]) {
StateLed[0] = HIGH; StateLed[1] = HIGH; StateLed[2] = HIGH; StateLed[3] = HIGH;
}
//Fonction pour faire clignoter un des groupes de leds bool ClignoterGrp(bool StateLedi) {
if (StateLedi == HIGH)
{StateLedi=LOW;}
else
{StateLedi=HIGH;}
return StateLedi;
}
