ENIB 2022 : Crazy light
Révision datée du 3 décembre 2023 à 11:18 par Antonydbzh (discussion | contributions)
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 }