ENIB 2022 - groupe C : Jeu de la corde

De Les Fabriques du Ponant
Aller à : navigation, rechercher

photo de l'équipe

Regle-tir-corde.png

Que fait ce projet ?

Il s’articule comme un jeu du tir à la corde, avec deux boutons pour le jeu, un bouton d'initialisation , un ruban de led et une carte D1 mini.
A chaque appuie sur le bouton la led se déplace du coté du joueur. L’adversaire fait de même de son côté.
But du jeu, mettre la led de son côté.
Le bouton d'initialisation permet de redémarrer le jeu a zéro.

271283375 663960811312375 2742679284613237478 n.jpg 271354244 478487547023891 7814625120603058233 n.jpg 271493392 1128680897671462 5164840374888400180 n.jpg

Schema2.jpg

Liste des composants

  • 3 boutons poussoir
  • câbles
  • ruban led (ici 48 led)
  • arduino d1 mini
  • breadboard
  • Câble usb micro usb


Code

  1 /*
  2                                
  3                                      BROCHAGE                            
  4                                 _________________                        
  5                                /     D1 mini     \                       
  6                               |[ ]RST        TX[ ]|                   
  7                               |[ ]A0  -GPIO  RX[ ]|                    
  8                               |[ ]D0-16    5-D1[X]| - Button Init         
  9                               |[ ]D5-14    4-D2[ ]| - Button 1                    
 10                               |[ ]D6-12    0-D3[ ]| - Ruban led           
 11                               |[ ]D7-13    2-D4[ ]| - Button 2         
 12                               |[ ]D8-15     GND[X]| - masse du ruban         
 13                               |[ ]3V3 .      5V[X]| - Alim du ruban         
 14                               |       +---+       |                     
 15                               |_______|USB|_______|     
 16 Matériel :
 17 - des fils dupont.
 18 - un ruban de led
 19 - un D1 mini
 20 - ...*/
 21 //Libraries
 22 #include <FastLED.h>//https://github.com/FastLED/FastLED
 23 
 24 //Constants
 25 #define NUM_STRIPS 1                   //un seul ruban de led
 26 #define NUM_LEDS 48                   // nombre de led dans le ruban
 27 #define BRIGHTNESS 15                // luminosité
 28 #define LED_TYPE WS2812B            // type de LED
 29 #define COLOR_ORDER RGB//BRG         //ordre des couleurs
 30 #define FASTLED_ALLOW_INTERRUPTS 0  
 31 #define FASTLED_INTERRUPT_RETRY_COUNT 1
 32 #define FRAMES_PER_SECOND 60
 33 #define COOLING 55
 34 #define SPARKING 120
 35 
 36 //Parameters
 37 const int stripPin  = 0;   //ruban led D3
 38 const int button_1 = 4;  //broche D2
 39 const int button_2 = 2; //broche D4
 40 const int button_init = 5;  //broche D1
 41 int i = 23;      //initialisation de la possition de la led
 42 bool anti_rebond_1 = true;  //pour prendre le front montant du bouton 1
 43 bool anti_rebond_2 = true;  //pour prendre le front montant du bouton 2
 44 
 45 int presence=0;
 46 
 47 //Variables
 48 bool gReverseDirection  = false;
 49 
 50 //Objects
 51 CRGB leds[NUM_LEDS];  //initialisation de tout les led
 52 
 53 void setup() {
 54   //Init Serial USB
 55   Serial.begin(9600);
 56   pinMode(button_1,INPUT_PULLUP);
 57   pinMode(button_2,INPUT_PULLUP);
 58   pinMode(button_init,INPUT_PULLUP);
 59   Serial.println(F("Initialize System"));
 60   //Init led strips
 61   FastLED.addLeds<LED_TYPE, stripPin, COLOR_ORDER>(leds, NUM_LEDS);
 62   FastLED.setBrightness(  BRIGHTNESS );
 63   animation();
 64 }
 65 
 66 void loop() {
 67   ledScenario();
 68 }
 69 
 70 void ledScenario(void ) { /* function ledScenario */
 71   
 72   ////LEDS Strip scenario
 73   non_presence();
 74   //============
 75   // bouton init 
 76 
 77   if (digitalRead(button_init)==0){   
 78     ini();}
 79 
 80   //============
 81 
 82   //============
 83   // bouton 1  
 84   if (digitalRead(button_1) == 0 ){
 85     if (anti_rebond_1 == true){ // verifi si le bouton etait deja allumer ou pas
 86     i++;                       
 87     anti_rebond_1 = false; 
 88     if (i>=47){i=47;}    // dans le cas ou la led est arriver au bout
 89     leds[i].setRGB(255, 0, 255); //avancer la led
 90     leds[i-1].setRGB(255, 0, 255); //avancer la led
 91     
 92     if (i==0){leds[47] = CRGB::Black;}  //
 93     else {leds[i-2] = CRGB::Black;}    // mets l'aute led eteint
 94     FastLED.show();                    // affiche les modification
 95     
 96     }}
 97   else{
 98     anti_rebond_1 = true;           // le bouton n'est pas appuié
 99   }
100   //============
101 
102   //============
103   // bouton 2  (même principe que le bouton 2 mais dans l'autre sens)
104   if (digitalRead(button_2) == 0 ){
105     
106     if (anti_rebond_2 == true){
107     i--;
108     anti_rebond_2 = false;
109     
110     if (i<=0){i=0;}
111     leds[i].setRGB(255, 0, 255);
112     leds[i+1].setRGB(255, 0, 255);
113     
114   
115     if (i==0){leds[1] = CRGB::Black;}
116     else{leds[i+2] = CRGB::Black;}
117     FastLED.show();
118     Serial.println(i);
119     
120     }
121     }
122   else{
123     anti_rebond_2 = true;
124   }
125 
126   //============
127 
128   //===========
129   // verifie si le joueur 1 a gagné
130   if (i==47){
131     for(int j = 0; j < NUM_LEDS/2; j++){  //allume en vert le coté du joueur 1 et en rouge celui du joueur 2
132       leds[j].setRGB(0, 255, 0);   //vert
133       leds[NUM_LEDS-1-j].setRGB(255, 0, 0); //rouge
134     FastLED.show();
135     delay(50);
136     }
137     Serial.println("gagner joueur 1");
138     loop_infiny();  //va dans une boucle infini
139   }
140 
141   //===========
142 
143   //===========
144     // verifie si le joueur 2 a gagné
145   if (i==0){
146     for(int j = 0; j < NUM_LEDS/2; j++){  //allume en vert le coté du joueur 2 et en rouge celui du joueur 1
147       leds[NUM_LEDS-1-j].setRGB(0, 255, 0);//vert
148       leds[j].setRGB(255, 0, 0);           //rouge
149     FastLED.show();
150     delay(50);
151     }
152     Serial.println("gagner joueur 2");
153     loop_infiny();//va dans une boucle infini
154   }
155   
156   
157   delay(0.1); //delai pour anti rebond
158 
159 
160   
161     /*
162     for (int i = 0; i < NUM_LEDS; i++) {
163     //leds[i] = CRGB::Goldenrod;
164     leds[i].setRGB(255, 0, 0);
165     
166     FastLED.show();
167     delay(10);
168     
169     
170   }
171   for (int i = 0; i < NUM_LEDS; i++) {
172    leds[i] = CRGB::Black;
173    FastLED.show();
174    delay(10);
175   }
176   }*/
177 }
178 void loop_infiny(){
179   while (digitalRead(button_init)){ //tant que le bouton init n'est pas activé
180     delay(0.1);
181     non_presence();
182     }
183     ini();//
184     
185 }
186 
187 void ini(){
188   i = 23;
189    for (int j = 0; j < NUM_LEDS; j++) {  //eteint tout les lumieres et met la led du milieu allumé
190    leds[j] = CRGB::Black;
191     }
192    leds[i].setRGB(255, 0, 255);
193    leds[i+1].setRGB(255, 0, 255);
194   FastLED.show();
195 }
196 
197 void non_presence(){
198   if (digitalRead(button_1)==1 and digitalRead(button_2)==1 and digitalRead(button_init)==1){
199     presence ++;
200     Serial.println(presence);
201     if(presence>=3000)
202     {
203         while (test_bouton()==false)
204         {
205           animation();
206         }
207     }
208   
209   }
210   else{Serial.println("else");
211     presence =0;}
212 }
213 bool test_bouton(){
214    if (digitalRead(button_1)==1 and digitalRead(button_2)==1 and digitalRead(button_init)==1)
215    {
216     return false;
217    }
218    else{return true;}
219 }
220 void eteind(){
221   for (int j = 0; j < NUM_LEDS; j++) //eteint tout les lumieres et met la led du milieu allumé
222   {  
223      leds[j] = CRGB::Black;
224   }
225     
226 }
227 
228 bool animation(){
229   //================================================
230   //annimation debut
231   //================================================
232   i = 23;
233   
234   for(int j = 0; j < NUM_LEDS/2; j++){                        //les leds se rejoigne vers la led du milieu
235     if (test_bouton()==false)
236     {
237       leds[j].setRGB(15+j*8, 15+j*8, 255-j*8);
238       leds[NUM_LEDS-1-j].setRGB(15+j*8, 15+j*8, 255-j*8);
239     
240       FastLED.show();
241       delay(25);
242     }
243     else{eteind();return false;}
244       
245     
246   }
247   
248     for(int j = 0; j < NUM_LEDS/2; j++)
249     { if (test_bouton()==false)
250         {                    //les leds se supprime vers la led du milieu
251            leds[j] = CRGB::Black;
252            leds[NUM_LEDS-1-j] = CRGB::Black;
253            FastLED.show();
254            delay(25);
255         }
256         else{eteind();return false;}
257    }
258 
259    
260 
261    
262   leds[i].setRGB(255, 0, 255);                             //pareil mais dans l'autre sens
263   for(int j = 0; j < NUM_LEDS/2; j++)
264   {
265     if (test_bouton()==false)
266     {
267       leds[i+j].setRGB(15+j*8, 255-j*8,15+j*8);
268       leds[i-j].setRGB(15+j*8, 255-j*8, 15+j*8);
269       Serial.println(j);
270       FastLED.show();
271       delay(25);
272     }
273     else{eteind();return false;}
274   }
275 
276   for(int j = NUM_LEDS/2; j > 0; j--)
277   {
278     if (test_bouton()==false)
279     {
280         leds[i+j] = CRGB::Black;
281         leds[i-j] = CRGB::Black;
282         FastLED.show();
283         delay(25);
284     }
285     else{eteind();return false;}
286   }
287 
288   
289   
290   leds[i].setRGB(255, 0, 255);  //allumage de la led du milieu pour le debut
291   leds[i+1].setRGB(255, 0, 255);  //allumage de la led du milieu pour le debut
292   FastLED.show();              //affichage sur le ruban de led
293   return true;
294 
295 }

Catégories