ENIB 2022 - groupe C : Jeu de la corde

De Les Fabriques du Ponant
Révision datée du 17 janvier 2022 à 15:13 par Jeu de la corde (discussion | contributions) (Que fait ce projet ?)
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 arduino 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é.</br> But du jeu, mettre la led de son côté. Le bouton d'initialisation permet de redémarrer le jeu a zéro.

devant
271354244 478487547023891 7814625120603058233 n.jpg
271493392 1128680897671462 5164840374888400180 n.jpg

Liste des composants

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


Code

/*
                               
                                     BROCHAGE                            
                                _________________                        
                               /     D1 mini     \                       
                              |[ ]RST        TX[ ]|                   
                              |[ ]A0  -GPIO  RX[ ]|                    
                              |[ ]D0-16    5-D1[X]| - Button Init         
                              |[ ]D5-14    4-D2[ ]| - Button 1                    
                              |[ ]D6-12    0-D3[ ]| - Ruban led           
                              |[ ]D7-13    2-D4[ ]| - Button 2         
                              |[ ]D8-15     GND[X]| - masse du ruban         
                              |[ ]3V3 .      5V[X]| - Alim du ruban         
                              |       +---+       |                     
                              |_______|USB|_______|     
Matériel :
- des fils dupont.
- un ruban de led
- un D1 mini
- ...*/
//Libraries
#include <FastLED.h>//https://github.com/FastLED/FastLED

//Constants
#define NUM_STRIPS 1                   //un seul ruban de led
#define NUM_LEDS 48                   // nombre de led dans le ruban
#define BRIGHTNESS 15                // luminosité
#define LED_TYPE WS2812B            // type de LED
#define COLOR_ORDER RGB//BRG         //ordre des couleurs
#define FASTLED_ALLOW_INTERRUPTS 0  
#define FASTLED_INTERRUPT_RETRY_COUNT 1
#define FRAMES_PER_SECOND 60
#define COOLING 55
#define SPARKING 120

//Parameters
const int stripPin  = 0;   //ruban led D3
const int button_1 = 4;  //broche D2
const int button_2 = 2; //broche D4
const int button_init = 5;  //broche D1
int i = 23;      //initialisation de la possition de la led
bool anti_rebond_1 = true;  //pour prendre le front montant du bouton 1
bool anti_rebond_2 = true;  //pour prendre le front montant du bouton 2

//Variables
bool gReverseDirection  = false;

//Objects
CRGB leds[NUM_LEDS];  //initialisation de tout les led

void setup() {
  //Init Serial USB
  Serial.begin(9600);
  pinMode(button_1,INPUT_PULLUP);
  pinMode(button_2,INPUT_PULLUP);
  pinMode(button_init,INPUT_PULLUP);
  Serial.println(F("Initialize System"));
  //Init led strips
  FastLED.addLeds<LED_TYPE, stripPin, COLOR_ORDER>(leds, NUM_LEDS);
  FastLED.setBrightness(  BRIGHTNESS );
  //================================================
  //annimation debut
  //================================================

  
  for(int j = 0; j < NUM_LEDS/2; j++){                        //les leds se rejoigne vers la led du milieu
    leds[j].setRGB(15+j*8, 15+j*8, 255-j*8);
    leds[NUM_LEDS-1-j].setRGB(15+j*8, 15+j*8, 255-j*8);
    FastLED.show();
    delay(25);
  }
  for(int j = 0; j < NUM_LEDS/2; j++){                     //les leds se supprime vers la led du milieu
    leds[j] = CRGB::Black;
    leds[NUM_LEDS-1-j] = CRGB::Black;
    FastLED.show();
    delay(25);
  }

   
  leds[i].setRGB(255, 0, 255);                             //pareil mais dans l'autre sens
  for(int j = 0; j < NUM_LEDS/2; j++){
    leds[i+j].setRGB(15+j*8, 255-j*8,15+j*8);
    leds[i-j].setRGB(15+j*8, 255-j*8, 15+j*8);
    Serial.println(j);
    FastLED.show();
    delay(25);
  }

  for(int j = NUM_LEDS/2; j > 0; j--){
    leds[i+j] = CRGB::Black;
    leds[i-j] = CRGB::Black;
    FastLED.show();
    delay(25);
  }

  
  
  leds[i].setRGB(255, 0, 255);  //allumage de la led du milieu pour le debut
  leds[i+1].setRGB(255, 0, 255);  //allumage de la led du milieu pour le debut
  FastLED.show();              //affichage sur le ruban de led
}

void loop() {
  ledScenario();
}

void ledScenario(void ) { /* function ledScenario */
  ////LEDS Strip scenario

  //============
  // bouton init 

  if (digitalRead(button_init)==0){   
    ini();}

  //============

  //============
  // bouton 1  
  if (digitalRead(button_1) == 0 ){
    if (anti_rebond_1 == true){ // verifi si le bouton etait deja allumer ou pas
    i++;                       
    anti_rebond_1 = false; 
    if (i>=47){i=47;}    // dans le cas ou la led est arriver au bout
    leds[i].setRGB(255, 0, 255); //avancer la led
    leds[i-1].setRGB(255, 0, 255); //avancer la led
    
    if (i==0){leds[47] = CRGB::Black;}  //
    else {leds[i-2] = CRGB::Black;}    // mets l'aute led eteint
    FastLED.show();                    // affiche les modification
    
    }}
  else{
    anti_rebond_1 = true;           // le bouton n'est pas appuié
  }
  //============

  //============
  // bouton 2  (même principe que le bouton 2 mais dans l'autre sens)
  if (digitalRead(button_2) == 0 ){
    
    if (anti_rebond_2 == true){
    i--;
    anti_rebond_2 = false;
    
    if (i<=0){i=0;}
    leds[i].setRGB(255, 0, 255);
    leds[i+1].setRGB(255, 0, 255);
    
  
    if (i==0){leds[1] = CRGB::Black;}
    else{leds[i+2] = CRGB::Black;}
    FastLED.show();
    Serial.println(i);
    
    }
    }
  else{
    anti_rebond_2 = true;
  }

  //============

  //===========
  // verifie si le joueur 1 a gagné
  if (i==47){
    for(int j = 0; j < NUM_LEDS/2; j++){  //allume en vert le coté du joueur 1 et en rouge celui du joueur 2
      leds[j].setRGB(0, 255, 0);   //vert
      leds[NUM_LEDS-1-j].setRGB(255, 0, 0); //rouge
    FastLED.show();
    delay(50);
    }
    Serial.println("gagner joueur 1");
    loop_infiny();  //va dans une boucle infini
  }

  //===========

  //===========
    // verifie si le joueur 2 a gagné
  if (i==0){
    for(int j = 0; j < NUM_LEDS/2; j++){  //allume en vert le coté du joueur 2 et en rouge celui du joueur 1
      leds[NUM_LEDS-1-j].setRGB(0, 255, 0);//vert
      leds[j].setRGB(255, 0, 0);           //rouge
    FastLED.show();
    delay(50);
    }
    Serial.println("gagner joueur 2");
    loop_infiny();//va dans une boucle infini
  }
  
  
  delay(0.05); //delai pour anti rebond


  
    /*
    for (int i = 0; i < NUM_LEDS; i++) {
    //leds[i] = CRGB::Goldenrod;
    leds[i].setRGB(255, 0, 0);
    
    FastLED.show();
    delay(10);
    
    
  }
  for (int i = 0; i < NUM_LEDS; i++) {
   leds[i] = CRGB::Black;
   FastLED.show();
   delay(10);
  }
  }*/
}
void loop_infiny(){
  while (digitalRead(button_init)){ //tant que le bouton init n'est pas activé
    delay(1);
    }
    ini();//
    
}

void ini(){
  i = 23;
   for (int j = 0; j < NUM_LEDS; j++) {  //eteint tout les lumieres et met la led du milieu allumé
   leds[j] = CRGB::Black;
    }
   leds[i].setRGB(255, 0, 255);
   leds[i+1].setRGB(255, 0, 255);
  FastLED.show();
}

Catégories