ENIB 2022 : Crazy light : Différence entre versions
| (6 révisions intermédiaires par 2 utilisateurs non affichées) | |||
| Ligne 1 : | Ligne 1 : | ||
==photo de l'équipe== | ==photo de l'équipe== | ||
[[Fichier:Photoenib2018.jpg|600px]] | [[Fichier:Photoenib2018.jpg|600px]] | ||
| − | + | ||
==Que fait ce projet ? == | ==Que fait ce projet ? == | ||
| Ligne 37 : | Ligne 37 : | ||
==Schéma Câblage== | ==Schéma Câblage== | ||
| − | [[Fichier: | + | [[Fichier:SchémacablâgeCrazyLight.jpg|600px]] |
==Code== | ==Code== | ||
<pre> | <pre> | ||
| − | + | /* | |
| + | Code pour controler les Leds et l'ecran LCD | ||
| + | */ | ||
| + | |||
| + | #include <Wire.h> | ||
| + | #include "rgb_lcd.h" | ||
| + | #include <FastLED.h> | ||
| + | |||
| + | const int PinBP1 = 8; | ||
| + | const int PinBP2 = 9; | ||
| + | const int PinBP3 = 10; | ||
| + | byte Value_BP1 = 0; | ||
| + | byte Value_BP2 = 0; | ||
| + | byte Value_BP3 = 0; | ||
| + | byte Value_BP[3]={Value_BP1, Value_BP2, Value_BP3}; | ||
| + | |||
| + | int PinBP[3] = {PinBP1, PinBP2, PinBP3}; | ||
| + | int colonne[3] = {0, 1, 2}; | ||
| + | const int tut0 = 157; | ||
| + | const int tut1 = 273; | ||
| + | const int tut2 = 398; | ||
| + | const int tut3 = 643; | ||
| + | const int tut4 = 1015; | ||
| + | const int tut5 = 1264; | ||
| + | const int tut6 = 1509; | ||
| + | const int tut7 = 1758; | ||
| + | const int tut8 = 1883; | ||
| + | const int tut9 = 2007; | ||
| + | const int periodeTut = 2162; | ||
| + | int tut[10] = {tut0, tut1, tut2, tut3, tut4, tut5, tut6, tut7, tut8, tut9}; | ||
| + | |||
| + | const int delay1 = 50; | ||
| + | const int delay2 = 5; | ||
| + | long int temps_actuel=0; | ||
| + | long int temps_temp=0; | ||
| + | long int temps_temp2=0; | ||
| + | long int temps_temp3=0; | ||
| + | long int points = 0; | ||
| + | |||
| + | // definition de la couleur de l'arriere plan de l'ecran LCD | ||
| + | rgb_lcd lcd; | ||
| + | |||
| + | const int colorR = 255; | ||
| + | const int colorG = 255; | ||
| + | const int colorB = 255; | ||
| + | |||
| + | |||
| + | #define NUM_LEDS 63 | ||
| + | #define DATA_PIN 3 //D3 | ||
| + | |||
| + | // definition des leds | ||
| + | CRGB leds[NUM_LEDS]; | ||
| + | |||
| + | void setup() | ||
| + | { | ||
| + | //set up BP | ||
| + | pinMode(PinBP1, INPUT); | ||
| + | pinMode(PinBP2, INPUT); | ||
| + | pinMode(PinBP3, INPUT); | ||
| + | |||
| + | // set up the LCD's number of columns and rows: | ||
| + | lcd.begin(16, 2); | ||
| + | lcd.setRGB(colorR, colorG, colorB); | ||
| + | FastLED.addLeds<NEOPIXEL, DATA_PIN>(leds, NUM_LEDS); | ||
| + | |||
| + | |||
| + | } | ||
| + | |||
| + | void loop() | ||
| + | { | ||
| + | |||
| + | // phase d'attente, les Leds s'allument une à une | ||
| + | for (int i = 0; i < 63; i++) | ||
| + | { | ||
| + | leds[i] = CRGB::White; | ||
| + | FastLED.show(); | ||
| + | delay(25); | ||
| + | leds[i] = CRGB::Black; | ||
| + | FastLED.show(); | ||
| + | delay(5); | ||
| + | } | ||
| + | //Accueil | ||
| + | points=0; | ||
| + | lcd.setCursor(0, 0);//place le curseur 1er caractere de la 1er ligne | ||
| + | lcd.print("---Welcome to---"); | ||
| + | lcd.setCursor(0, 1);//place le curseur 1er caractere de la 2eme ligne | ||
| + | lcd.print("--CrazyLight--"); | ||
| + | Value_BP[0] = digitalRead(PinBP[0]); | ||
| + | Value_BP[1] = digitalRead(PinBP[1]); | ||
| + | Value_BP[2] = digitalRead(PinBP[2]); | ||
| + | |||
| + | //condition lancement de la session de jeu | ||
| + | if (Value_BP[0]==HIGH && Value_BP[1]==HIGH && Value_BP[2]==HIGH ) | ||
| + | { | ||
| + | //clignotement des leds | ||
| + | clign(); | ||
| + | //debut de la sequence de jeu | ||
| + | for (int i = 0; i<2;i++) | ||
| + | { | ||
| + | bloc_tutut_random(); | ||
| + | } | ||
| + | clign(); | ||
| + | affi_points(); | ||
| + | delay(5000); | ||
| + | |||
| + | |||
| + | } | ||
| + | |||
| + | |||
| + | |||
| + | } //fin de loop | ||
| + | |||
| + | //declaration des fonctions blocs de la musique | ||
| + | |||
| + | void bloc_tutut_1main(int num_colonne) | ||
| + | { | ||
| + | for (int n = 0; n < 10; n++) | ||
| + | { | ||
| + | while (temps_actuel-temps_temp < tut[n]-(delay1+delay2)) | ||
| + | { | ||
| + | for (int i = 20; i > 0; i--) | ||
| + | { | ||
| + | leds[i*(num_colonne+1)] = CRGB::White; | ||
| + | FastLED.show(); | ||
| + | if(n>0) | ||
| + | { | ||
| + | delay((tut[n]-tut[n-1])/21); | ||
| + | } | ||
| + | else | ||
| + | { | ||
| + | delay(tut[n]/21); | ||
| + | } | ||
| + | leds[i*(num_colonne+1)] = CRGB::Black; | ||
| + | FastLED.show(); | ||
| + | if(n>0) | ||
| + | { | ||
| + | delay((tut[n]-tut[n-1])/210); | ||
| + | } | ||
| + | else | ||
| + | { | ||
| + | delay(tut[n]/210); | ||
| + | } | ||
| + | } | ||
| + | Value_BP[num_colonne] = digitalRead(PinBP[num_colonne]); | ||
| + | //attente de pression sur le BP | ||
| + | while (Value_BP[num_colonne]!=HIGH) | ||
| + | { | ||
| + | leds[num_colonne*21]= CRGB::White; | ||
| + | FastLED.show(); | ||
| + | //compteur de points | ||
| + | temps_temp2=millis(); | ||
| + | |||
| + | Value_BP[num_colonne] = digitalRead(PinBP[num_colonne]); //condition de sortie | ||
| + | } | ||
| + | points=points + 1000/(temps_temp2-temps_temp3); | ||
| + | temps_temp3=temps_temp2; | ||
| + | affi_points(); | ||
| + | leds[num_colonne*21]= CRGB::Black; | ||
| + | FastLED.show(); | ||
| + | temps_actuel=millis(); // condition de sortie | ||
| + | } | ||
| + | temps_temp=temps_actuel; | ||
| + | |||
| + | } | ||
| + | } | ||
| + | |||
| + | void bloc_tutut_random() | ||
| + | { | ||
| + | for (int n = 0; n < 10; n++) | ||
| + | { | ||
| + | int num_colonne; | ||
| + | num_colonne = random(0,3); | ||
| + | while (temps_actuel-temps_temp < tut[n]-(delay1+delay2)) | ||
| + | { | ||
| + | for (int i = 20; i > 0; i--) | ||
| + | { | ||
| + | leds[i*(num_colonne+1)] = CRGB::White; | ||
| + | FastLED.show(); | ||
| + | if(n>0) | ||
| + | { | ||
| + | delay((tut[n]-tut[n-1])/21); | ||
| + | } | ||
| + | else | ||
| + | { | ||
| + | delay(tut[n]/21); | ||
| + | } | ||
| + | leds[i*(num_colonne+1)] = CRGB::Black; | ||
| + | FastLED.show(); | ||
| + | if(n>0) | ||
| + | { | ||
| + | delay((tut[n]-tut[n-1])/210); | ||
| + | } | ||
| + | else | ||
| + | { | ||
| + | delay(tut[n]/210); | ||
| + | } | ||
| + | } | ||
| + | Value_BP[num_colonne] = digitalRead(PinBP[num_colonne]); | ||
| + | //attente de pression sur le BP | ||
| + | while (Value_BP[num_colonne]!=HIGH) | ||
| + | { | ||
| + | leds[num_colonne*21]= CRGB::White; | ||
| + | FastLED.show(); | ||
| + | //compteur de points | ||
| + | temps_temp2=millis(); | ||
| + | |||
| + | Value_BP[num_colonne] = digitalRead(PinBP[num_colonne]); //condition de sortie | ||
| + | } | ||
| + | points=points + 1000/(temps_temp2-temps_temp3); | ||
| + | temps_temp3=temps_temp2; | ||
| + | affi_points(); | ||
| + | leds[num_colonne*21]= CRGB::Black; | ||
| + | FastLED.show(); | ||
| + | temps_actuel=millis(); // condition de sortie | ||
| + | } | ||
| + | temps_temp=temps_actuel; | ||
| + | |||
| + | } | ||
| + | } | ||
| + | |||
| + | //fonction de clignotement des Leds | ||
| + | void clign() | ||
| + | { | ||
| + | for (int j =0 ; j<6;j++) | ||
| + | { | ||
| + | for (int i = 0; i < 63; i++) | ||
| + | { | ||
| + | leds[i] = CRGB::White; | ||
| + | } | ||
| + | FastLED.show(); | ||
| + | delay(50); | ||
| + | for (int i = 0; i < 63; i++) | ||
| + | { | ||
| + | leds[i] = CRGB::Black; | ||
| + | } | ||
| + | FastLED.show(); | ||
| + | delay(500); | ||
| + | } | ||
| + | } | ||
| + | |||
| + | void affi_points() | ||
| + | { | ||
| + | lcd.clear(); | ||
| + | lcd.setCursor(0, 0);//place le curseur 1er caractere de la 1er ligne | ||
| + | lcd.print("Your score : "); | ||
| + | lcd.setCursor(0, 1);//place le curseur 1er caractere de la 2eme ligne | ||
| + | lcd.print(points); | ||
| + | } | ||
| + | </pre> | ||
| + | |||
| + | <pre> | ||
| + | /* | ||
| + | Code pour controler la musique | ||
| + | */ | ||
| + | #include <SoftwareSerial.h> | ||
| + | #include <DFRobotDFPlayerMini.h> | ||
| + | |||
| + | SoftwareSerial mySoftwareSerial(5, 6); // TX, RX | ||
| + | DFRobotDFPlayerMini myDFPlayer ; | ||
| + | |||
| + | void setup() { | ||
| + | |||
| + | mySoftwareSerial.begin(9600) ; | ||
| + | |||
| + | myDFPlayer.begin(mySoftwareSerial) ; | ||
| + | } | ||
| + | |||
| + | |||
| + | void loop() { | ||
| + | // Joue la premiere chanson de la carte SD pendant 10 secondes | ||
| + | myDFPlayer.setTimeOut(500) ; | ||
| + | |||
| + | myDFPlayer.volume(30) ; // fixe le son à 10 (maximum) | ||
| + | |||
| + | myDFPlayer.play(4); // joue le 4eme fichier son. | ||
| + | |||
| + | delay(60000); //1 minutes de musique | ||
| + | } | ||
</pre> | </pre> | ||
| Ligne 47 : | Ligne 324 : | ||
[[Catégorie:Enib2022]] | [[Catégorie:Enib2022]] | ||
| + | [[Catégorie:led]][[Catégorie:ruban de led]][[Catégorie:WS1812B]] | ||
Version actuelle datée du 3 décembre 2023 à 12:18
Sommaire
photo de l'équipe
Que fait ce projet ?
Appuyer sur les boutons quand les leds sont au plus proche (ruban de leds indiquant le timing) pour continuer de jouer la musique en cours.
Liste des composants
- 3 Boutons d'arcades
- Ruban Leds 1 m
- boite (bois/carton...)
- Ecran LCD
- carte arduino
- 2 haut-parleurs
- Carte SD et son lecteur pour arduino
- Résistances x6
Documents pour la découpe laser
Fichier:Première boîteCrazyLight.pdf
Fichier:PremiereboiteCrazyLight.pdf
Fichier:Deuxième boîteCrazyLight.pdf
Fichier:DeuxiemeboiteCrazyLight.pdf
Fichier:Troisieme plancheCrazyLight.pdf
Fichier:4emplancheSANSdessinCrazyLight.pdf
Fichier:4emplancheavecdessinCrazyLight.pdf
Site pour faire les boîtes en svg: https://www.festi.info/boxes.py/
Schéma Câblage
Code
/*
Code pour controler les Leds et l'ecran LCD
*/
#include <Wire.h>
#include "rgb_lcd.h"
#include <FastLED.h>
const int PinBP1 = 8;
const int PinBP2 = 9;
const int PinBP3 = 10;
byte Value_BP1 = 0;
byte Value_BP2 = 0;
byte Value_BP3 = 0;
byte Value_BP[3]={Value_BP1, Value_BP2, Value_BP3};
int PinBP[3] = {PinBP1, PinBP2, PinBP3};
int colonne[3] = {0, 1, 2};
const int tut0 = 157;
const int tut1 = 273;
const int tut2 = 398;
const int tut3 = 643;
const int tut4 = 1015;
const int tut5 = 1264;
const int tut6 = 1509;
const int tut7 = 1758;
const int tut8 = 1883;
const int tut9 = 2007;
const int periodeTut = 2162;
int tut[10] = {tut0, tut1, tut2, tut3, tut4, tut5, tut6, tut7, tut8, tut9};
const int delay1 = 50;
const int delay2 = 5;
long int temps_actuel=0;
long int temps_temp=0;
long int temps_temp2=0;
long int temps_temp3=0;
long int points = 0;
// definition de la couleur de l'arriere plan de l'ecran LCD
rgb_lcd lcd;
const int colorR = 255;
const int colorG = 255;
const int colorB = 255;
#define NUM_LEDS 63
#define DATA_PIN 3 //D3
// definition des leds
CRGB leds[NUM_LEDS];
void setup()
{
//set up BP
pinMode(PinBP1, INPUT);
pinMode(PinBP2, INPUT);
pinMode(PinBP3, INPUT);
// set up the LCD's number of columns and rows:
lcd.begin(16, 2);
lcd.setRGB(colorR, colorG, colorB);
FastLED.addLeds<NEOPIXEL, DATA_PIN>(leds, NUM_LEDS);
}
void loop()
{
// phase d'attente, les Leds s'allument une à une
for (int i = 0; i < 63; i++)
{
leds[i] = CRGB::White;
FastLED.show();
delay(25);
leds[i] = CRGB::Black;
FastLED.show();
delay(5);
}
//Accueil
points=0;
lcd.setCursor(0, 0);//place le curseur 1er caractere de la 1er ligne
lcd.print("---Welcome to---");
lcd.setCursor(0, 1);//place le curseur 1er caractere de la 2eme ligne
lcd.print("--CrazyLight--");
Value_BP[0] = digitalRead(PinBP[0]);
Value_BP[1] = digitalRead(PinBP[1]);
Value_BP[2] = digitalRead(PinBP[2]);
//condition lancement de la session de jeu
if (Value_BP[0]==HIGH && Value_BP[1]==HIGH && Value_BP[2]==HIGH )
{
//clignotement des leds
clign();
//debut de la sequence de jeu
for (int i = 0; i<2;i++)
{
bloc_tutut_random();
}
clign();
affi_points();
delay(5000);
}
} //fin de loop
//declaration des fonctions blocs de la musique
void bloc_tutut_1main(int num_colonne)
{
for (int n = 0; n < 10; n++)
{
while (temps_actuel-temps_temp < tut[n]-(delay1+delay2))
{
for (int i = 20; i > 0; i--)
{
leds[i*(num_colonne+1)] = CRGB::White;
FastLED.show();
if(n>0)
{
delay((tut[n]-tut[n-1])/21);
}
else
{
delay(tut[n]/21);
}
leds[i*(num_colonne+1)] = CRGB::Black;
FastLED.show();
if(n>0)
{
delay((tut[n]-tut[n-1])/210);
}
else
{
delay(tut[n]/210);
}
}
Value_BP[num_colonne] = digitalRead(PinBP[num_colonne]);
//attente de pression sur le BP
while (Value_BP[num_colonne]!=HIGH)
{
leds[num_colonne*21]= CRGB::White;
FastLED.show();
//compteur de points
temps_temp2=millis();
Value_BP[num_colonne] = digitalRead(PinBP[num_colonne]); //condition de sortie
}
points=points + 1000/(temps_temp2-temps_temp3);
temps_temp3=temps_temp2;
affi_points();
leds[num_colonne*21]= CRGB::Black;
FastLED.show();
temps_actuel=millis(); // condition de sortie
}
temps_temp=temps_actuel;
}
}
void bloc_tutut_random()
{
for (int n = 0; n < 10; n++)
{
int num_colonne;
num_colonne = random(0,3);
while (temps_actuel-temps_temp < tut[n]-(delay1+delay2))
{
for (int i = 20; i > 0; i--)
{
leds[i*(num_colonne+1)] = CRGB::White;
FastLED.show();
if(n>0)
{
delay((tut[n]-tut[n-1])/21);
}
else
{
delay(tut[n]/21);
}
leds[i*(num_colonne+1)] = CRGB::Black;
FastLED.show();
if(n>0)
{
delay((tut[n]-tut[n-1])/210);
}
else
{
delay(tut[n]/210);
}
}
Value_BP[num_colonne] = digitalRead(PinBP[num_colonne]);
//attente de pression sur le BP
while (Value_BP[num_colonne]!=HIGH)
{
leds[num_colonne*21]= CRGB::White;
FastLED.show();
//compteur de points
temps_temp2=millis();
Value_BP[num_colonne] = digitalRead(PinBP[num_colonne]); //condition de sortie
}
points=points + 1000/(temps_temp2-temps_temp3);
temps_temp3=temps_temp2;
affi_points();
leds[num_colonne*21]= CRGB::Black;
FastLED.show();
temps_actuel=millis(); // condition de sortie
}
temps_temp=temps_actuel;
}
}
//fonction de clignotement des Leds
void clign()
{
for (int j =0 ; j<6;j++)
{
for (int i = 0; i < 63; i++)
{
leds[i] = CRGB::White;
}
FastLED.show();
delay(50);
for (int i = 0; i < 63; i++)
{
leds[i] = CRGB::Black;
}
FastLED.show();
delay(500);
}
}
void affi_points()
{
lcd.clear();
lcd.setCursor(0, 0);//place le curseur 1er caractere de la 1er ligne
lcd.print("Your score : ");
lcd.setCursor(0, 1);//place le curseur 1er caractere de la 2eme ligne
lcd.print(points);
}
/*
Code pour controler la musique
*/
#include <SoftwareSerial.h>
#include <DFRobotDFPlayerMini.h>
SoftwareSerial mySoftwareSerial(5, 6); // TX, RX
DFRobotDFPlayerMini myDFPlayer ;
void setup() {
mySoftwareSerial.begin(9600) ;
myDFPlayer.begin(mySoftwareSerial) ;
}
void loop() {
// Joue la premiere chanson de la carte SD pendant 10 secondes
myDFPlayer.setTimeOut(500) ;
myDFPlayer.volume(30) ; // fixe le son à 10 (maximum)
myDFPlayer.play(4); // joue le 4eme fichier son.
delay(60000); //1 minutes de musique
}
