ENIB 2022 - groupe C : Jeu de la corde : Différence entre versions

De Les Fabriques du Ponant
Aller à : navigation, rechercher
(Code)
(Que fait ce projet ?)
Ligne 4 : Ligne 4 :
  
 
==Que fait ce projet ? ==
 
==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.<br>
+
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.<br>
 
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>
 
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é.<br>
 
But du jeu, mettre la led de son côté.<br>

Version du 17 janvier 2022 à 15:30

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

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[X]| - Button 1                    
                              |[ ]D6-12    0-D3[X]| - Ruban led           
                              |[ ]D7-13    2-D4[X]| - Button 2         
                              |[ ]D8-15     GND[X]| - masse du ruban  et boutons       
                              |[ ]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