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

De Les Fabriques du Ponant
Aller à : navigation, rechercher
(Code)
(Code)
Ligne 205 : Ligne 205 :
 
void loop_infiny(){
 
void loop_infiny(){
 
   while (digitalRead(button_init)){ //tant que le bouton init n'est pas activé
 
   while (digitalRead(button_init)){ //tant que le bouton init n'est pas activé
     delay(1);
+
     delay(0.1);
 +
    non_presence();
 
     }
 
     }
 
     ini();//
 
     ini();//

Version du 17 janvier 2022 à 16:38

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

/*
                               
                                     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

int presence=0;

//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 );
  animation();
}

void loop() {
  ledScenario();
}

void ledScenario(void ) { /* function ledScenario */
  
  ////LEDS Strip scenario
  non_presence();
  //============
  // 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.1); //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(0.1);
    non_presence();
    }
    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();
}

void non_presence(){
  if (digitalRead(button_1)==1 and digitalRead(button_2)==1 and digitalRead(button_init)==1){
    presence ++;
    Serial.println(presence);
    if(presence>=3000)
    {
        while (test_bouton()==false)
        {
          animation();
        }
    }
  
  }
  else{Serial.println("else");
    presence =0;}
}
bool test_bouton(){
   if (digitalRead(button_1)==1 and digitalRead(button_2)==1 and digitalRead(button_init)==1)
   {
    return false;
   }
   else{return true;}
}
void eteind(){
  for (int j = 0; j < NUM_LEDS; j++) //eteint tout les lumieres et met la led du milieu allumé
  {  
     leds[j] = CRGB::Black;
  }
    
}

bool animation(){
  //================================================
  //annimation debut
  //================================================
  i = 23;
  
  for(int j = 0; j < NUM_LEDS/2; j++){                        //les leds se rejoigne vers la led du milieu
    if (test_bouton()==false)
    {
      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);
    }
    else{eteind();return false;}
      
    
  }
  
    for(int j = 0; j < NUM_LEDS/2; j++)
    { if (test_bouton()==false)
        {                    //les leds se supprime vers la led du milieu
           leds[j] = CRGB::Black;
           leds[NUM_LEDS-1-j] = CRGB::Black;
           FastLED.show();
           delay(25);
        }
        else{eteind();return false;}
   }

   

   
  leds[i].setRGB(255, 0, 255);                             //pareil mais dans l'autre sens
  for(int j = 0; j < NUM_LEDS/2; j++)
  {
    if (test_bouton()==false)
    {
      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);
    }
    else{eteind();return false;}
  }

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

  
  
  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
  return true;

}

Catégories