<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
		<id>http://wiki.lesfabriquesduponant.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Arnaud...</id>
		<title>Les Fabriques du Ponant - Contributions de l’utilisateur [fr]</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.lesfabriquesduponant.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Arnaud..."/>
		<link rel="alternate" type="text/html" href="http://wiki.lesfabriquesduponant.net/index.php?title=Sp%C3%A9cial:Contributions/Arnaud..."/>
		<updated>2026-05-14T16:19:55Z</updated>
		<subtitle>Contributions de l’utilisateur</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2024_:_CatchTheJackpot&amp;diff=26227</id>
		<title>ENIB 2024 : CatchTheJackpot</title>
		<link rel="alternate" type="text/html" href="http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2024_:_CatchTheJackpot&amp;diff=26227"/>
				<updated>2024-01-31T10:55:34Z</updated>
		
		<summary type="html">&lt;p&gt;Arnaud... : /* fichiers à joindre */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==description==&lt;br /&gt;
&lt;br /&gt;
Ce projet fonction grâce à une carte Arduino, des LEDs et un bouton. &lt;br /&gt;
&lt;br /&gt;
Une lumière traverse le ruban de gauche à droite et lorsqu'elle est au milieu, il faut appuyer sur le bouton au bon moment pour gagner.&lt;br /&gt;
&lt;br /&gt;
==réalisé par :==&lt;br /&gt;
 -Arnaud Genty&lt;br /&gt;
 -Maxime Bintein&lt;br /&gt;
 -Tristan Le Coz&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
éventuelle vidéo&lt;br /&gt;
&lt;br /&gt;
==Liste des composants==&lt;br /&gt;
&lt;br /&gt;
* Bouton poussoir style Arcade&lt;br /&gt;
* Arduino nano&lt;br /&gt;
* 2 rubans de LED adressable (85 LEDs pour être exacte) &lt;br /&gt;
* Carton&lt;br /&gt;
* Bois&lt;br /&gt;
* Câbles mini-USB&lt;br /&gt;
* Câbles&lt;br /&gt;
* écran LCD&lt;br /&gt;
* Breadboard&lt;br /&gt;
* 2 résistances de 500kΩ&lt;br /&gt;
* Buzzer&lt;br /&gt;
&lt;br /&gt;
==Outils==&lt;br /&gt;
&lt;br /&gt;
* Cutter&lt;br /&gt;
* Marqueur noir&lt;br /&gt;
* Pistolet à colle&lt;br /&gt;
* Scotch&lt;br /&gt;
* Fer à souder&lt;br /&gt;
* Scie à bois&lt;br /&gt;
* Perceuse&lt;br /&gt;
* Bibliothèque Arduino FastLed &lt;br /&gt;
  https://fastled.io/&lt;br /&gt;
&lt;br /&gt;
==Code :==&lt;br /&gt;
&lt;br /&gt;
//Programme fait sur carte STM8266 / WEMOS D1 mini&lt;br /&gt;
#include &amp;quot;pitches.h&amp;quot;&lt;br /&gt;
#include &amp;quot;FastLED.h&amp;quot;                    //bibliothèque pour controler le ruban led&lt;br /&gt;
#include &amp;lt;Wire.h&amp;gt;                  //bibliothèque écran&lt;br /&gt;
#include &amp;lt;LiquidCrystal_I2C.h&amp;gt;     //bibliothèque écran&lt;br /&gt;
#define REST 0&lt;br /&gt;
#define NUM_LEDS 86&lt;br /&gt;
#define NUM_OF_LEDS_BY_LEVEL 17         // nombre de leds par niveau&lt;br /&gt;
#define NUM_OF_LEVELS 5                  // nombre de niveaux&lt;br /&gt;
#define PIN_BTN D3                       // Entree du bouton&lt;br /&gt;
#define PIN_LEDS D4                      // Sortie du ruban led&lt;br /&gt;
#define PIN_BUZZER D8                    // Signal de sortie buzzer&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// -------- INIT VARIABLES --------&lt;br /&gt;
LiquidCrystal_I2C lcd(0x27, 16, 2);&lt;br /&gt;
CRGB leds[NUM_LEDS]; //Création d'une liste avec chaque led&lt;br /&gt;
CRGB randomcolor  = CHSV(random(192), 255, 255);&lt;br /&gt;
int level = 0;        // niveau auquel le joueur est&lt;br /&gt;
int delay_level = 30; // délai qui permet de controler la vitesse de déplacement de la led&lt;br /&gt;
auto color = CRGB::Blue; // couleur de la led qui se déplace&lt;br /&gt;
int score = 0;           // score du joueur&lt;br /&gt;
const double coef[] = {1,1.5,2,2.5,3}; // coefficient multiplicateur de point par niveau&lt;br /&gt;
int last_point[NUM_OF_LEVELS];     // sauvegarde de la derniere led allumée pour la rallumer après flash()&lt;br /&gt;
bool game_in_progress = false;&lt;br /&gt;
int last_point_visu = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// -------- INIT FONCTIONS --------&lt;br /&gt;
&lt;br /&gt;
int move();            // déplacement de la led&lt;br /&gt;
void level_up();    // passage de niveau&lt;br /&gt;
void waiting_start_game(); //affichage d'attente de début du jeu&lt;br /&gt;
void flash();       // animation de victoire d'un niveau&lt;br /&gt;
&lt;br /&gt;
// -------- PROGRAMME --------&lt;br /&gt;
void setup() {&lt;br /&gt;
  FastLED.addLeds&amp;lt;NEOPIXEL, D4&amp;gt;(leds, NUM_LEDS);     // setup du ruban de led sur la sortie PIN_LEDS =&amp;gt; 2&lt;br /&gt;
  pinMode(PIN_BTN, INPUT);                          // setup du bouton dur l'entrée PIN_BTN =&amp;gt; 3&lt;br /&gt;
  FastLED.setBrightness(50);                    // setup de la luminosité&lt;br /&gt;
  Serial.begin(9600);                               // setup moniteur série pour debug &lt;br /&gt;
  int last_point[NUM_OF_LEVELS];&lt;br /&gt;
  pinMode(PIN_BUZZER, OUTPUT);&lt;br /&gt;
&lt;br /&gt;
  // -------- ECRAN --------&lt;br /&gt;
  lcd.init();                        // Initialize I2C LCD module&lt;br /&gt;
  lcd.backlight();                   // Turn backlight ON&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  waiting_start_game();&lt;br /&gt;
    lcd.setCursor(0,0);&lt;br /&gt;
    lcd.print(&amp;quot;    Cliquer &amp;quot;);&lt;br /&gt;
    lcd.setCursor(0,1);&lt;br /&gt;
    lcd.print(&amp;quot; pour commencer&amp;quot;);&lt;br /&gt;
    FastLED.clear();&lt;br /&gt;
  if (digitalRead(PIN_BTN)==LOW){&lt;br /&gt;
    musique();&lt;br /&gt;
    game_in_progress = true;&lt;br /&gt;
    lcd.clear();&lt;br /&gt;
    lcd.setCursor(0,0);&lt;br /&gt;
    lcd.print(&amp;quot;Partie en cours !&amp;quot;);&lt;br /&gt;
    lcd.setCursor(0,1);&lt;br /&gt;
    lcd.print(&amp;quot;XoXoXoXoXoXoXoXo&amp;quot;);&lt;br /&gt;
    FastLED.clear();&lt;br /&gt;
    delay(400);&lt;br /&gt;
    while(game_in_progress){&lt;br /&gt;
      move();&lt;br /&gt;
      if (digitalRead(PIN_BTN)==LOW &amp;amp;&amp;amp; game_in_progress==true){&lt;br /&gt;
        level_up();&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
int move(){&lt;br /&gt;
  // Permet de faire bouger la LED de gauche à droite&lt;br /&gt;
  for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++){&lt;br /&gt;
    // -------- DEBUGGING -------- // &lt;br /&gt;
    /*&lt;br /&gt;
    Serial.print(&amp;quot;val de la led: &amp;quot;);&lt;br /&gt;
    Serial.print(i);&lt;br /&gt;
    Serial.print(&amp;quot;\n&amp;quot;);&lt;br /&gt;
    */&lt;br /&gt;
    if (digitalRead(PIN_BTN)==LOW){     //Stock des scores LEDs 1 -&amp;gt; 9 -&amp;gt; 1&lt;br /&gt;
      int center = abs(i - (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL / 2));&lt;br /&gt;
      if (center &amp;lt;= NUM_OF_LEDS_BY_LEVEL/2) {&lt;br /&gt;
        last_point[level] = NUM_OF_LEDS_BY_LEVEL/2 - center + 1;  // Les points augmentent jusqu'à 9&lt;br /&gt;
      } else {&lt;br /&gt;
        last_point[level] = 0;  // À partir de la position 9, les points diminuent&lt;br /&gt;
      }&lt;br /&gt;
    //   if(i&amp;lt;(1/2*NUM_OF_LEDS_BY_LEVEL)){&lt;br /&gt;
    //     last_point[level] = i;&lt;br /&gt;
    //   }&lt;br /&gt;
    //   else{&lt;br /&gt;
    //     for(int degr = 1; degr&amp;lt;NUM_OF_LEDS_BY_LEVEL; degr++)&lt;br /&gt;
    //     last_point[level] = (i - degr);&lt;br /&gt;
      &lt;br /&gt;
    // }&lt;br /&gt;
      int last_point_visu = i-1;&lt;br /&gt;
      return i-1;&lt;br /&gt;
      // -------- DEBUGGING -------- //&lt;br /&gt;
      /*&lt;br /&gt;
      Serial.print(&amp;quot;last_point_visu&amp;quot;);&lt;br /&gt;
      Serial.print(last_point_visu);&lt;br /&gt;
       &lt;br /&gt;
      for(int z=0; z&amp;lt;NUM_OF_LEVELS; z++){&lt;br /&gt;
        Serial.print(last_point[z]);&lt;br /&gt;
        Serial.print(&amp;quot;\n&amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
      */&lt;br /&gt;
      &lt;br /&gt;
      &lt;br /&gt;
    }&lt;br /&gt;
    //Eteins les LEDs derrière la LED mouvante&lt;br /&gt;
    leds[i - 1] = CRGB::Black;&lt;br /&gt;
    delay(3);&lt;br /&gt;
    leds[level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2] = CRGB::Yellow;&lt;br /&gt;
    leds[i] = color;&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(delay_level);&lt;br /&gt;
  }&lt;br /&gt;
  leds[NUM_OF_LEDS_BY_LEVEL * level + 20] = CRGB::Black;&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
  delay(delay_level);&lt;br /&gt;
  for (int i = NUM_OF_LEDS_BY_LEVEL * level +  NUM_OF_LEDS_BY_LEVEL - 1; i &amp;gt;= NUM_OF_LEDS_BY_LEVEL * level ; i--)&lt;br /&gt;
  {&lt;br /&gt;
    // -------- DEBUGGING -------- //&lt;br /&gt;
    /*&lt;br /&gt;
    Serial.print(&amp;quot;val de la led: &amp;quot;);&lt;br /&gt;
    Serial.print(i);&lt;br /&gt;
    Serial.print(&amp;quot;\n&amp;quot;);&lt;br /&gt;
    */&lt;br /&gt;
    if (digitalRead(PIN_BTN)==LOW){           //Stock des scores LEDs 1 -&amp;gt; 9 -&amp;gt; 1&lt;br /&gt;
      int center = abs(i - (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL / 2));&lt;br /&gt;
      if (center &amp;lt;= NUM_OF_LEDS_BY_LEVEL/2) {&lt;br /&gt;
        last_point[level] = NUM_OF_LEDS_BY_LEVEL/2 - center + 1;  // Les points augmentent jusqu'à 9&lt;br /&gt;
      } else {&lt;br /&gt;
        last_point[level] = 0;  // À partir de la position 9, les points diminuent&lt;br /&gt;
      }&lt;br /&gt;
      // if(i&amp;lt;(1/2*NUM_OF_LEDS_BY_LEVEL)){&lt;br /&gt;
      //   last_point[level] = i;&lt;br /&gt;
      // }&lt;br /&gt;
      // else{&lt;br /&gt;
      //   for(int degr = 1; degr&amp;lt;NUM_OF_LEDS_BY_LEVEL; degr++)&lt;br /&gt;
      //   last_point[level] = (i - degr);&lt;br /&gt;
      //   }&lt;br /&gt;
    &lt;br /&gt;
      int last_point_visu = i+1;&lt;br /&gt;
      return i+1;&lt;br /&gt;
      &lt;br /&gt;
      // -------- DEBUGGING -------- //&lt;br /&gt;
      /*&lt;br /&gt;
      Serial.print(&amp;quot;last_point_visu&amp;quot;);&lt;br /&gt;
      Serial.print(last_point_visu);&lt;br /&gt;
      &lt;br /&gt;
      for(int z=0; z&amp;lt;NUM_OF_LEVELS; z++){&lt;br /&gt;
        Serial.print(last_point[z]);&lt;br /&gt;
        Serial.print(&amp;quot;\n&amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
      */&lt;br /&gt;
      &lt;br /&gt;
    }&lt;br /&gt;
    //Eteins les LEDs derrière la LED mouvante&lt;br /&gt;
    leds[i + 1] = CRGB::Black;&lt;br /&gt;
    delay(3);&lt;br /&gt;
    leds[level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2] = CRGB::Yellow;&lt;br /&gt;
    leds[i] = color;&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(delay_level);&lt;br /&gt;
  }&lt;br /&gt;
    leds[NUM_OF_LEDS_BY_LEVEL] = CRGB::Black;&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(delay_level);&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void flash()   // fonction de décoration qui fait clignoter les leds en blanc avant le passage de niveau&lt;br /&gt;
{&lt;br /&gt;
  for (int cpt = 0; cpt &amp;lt; 4; cpt++) &lt;br /&gt;
  {&lt;br /&gt;
    for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++)  // On met toute les leds du niveau en blanc&lt;br /&gt;
    {&lt;br /&gt;
      leds[i] = CRGB::Green;&lt;br /&gt;
    }&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(100);&lt;br /&gt;
    for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++) // On éteint toutes les leds du niveau&lt;br /&gt;
    {&lt;br /&gt;
      leds[i] = CRGB::Black;&lt;br /&gt;
    }&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(100);&lt;br /&gt;
  }&lt;br /&gt;
  leds[last_point_visu] = CRGB::Purple;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void level_up()   // changement de niveau&lt;br /&gt;
{&lt;br /&gt;
  flash();  // animation&lt;br /&gt;
  level++;  // incrémentation de la variable niveau&lt;br /&gt;
  delay_level -= 4; // le jeu devient de plus en plus rapide&lt;br /&gt;
&lt;br /&gt;
  if (level &amp;gt;= NUM_OF_LEVELS)   // fin du jeu&lt;br /&gt;
  {&lt;br /&gt;
    compute_score(); //Calcul le score&lt;br /&gt;
    show_score(); //Affiche le score sur un écran à crystaux liquides&lt;br /&gt;
&lt;br /&gt;
    //Remise des valeurs pas défaut&lt;br /&gt;
    level = 0;      &lt;br /&gt;
    score = 0;&lt;br /&gt;
    delay_level = 30;&lt;br /&gt;
    game_in_progress = false;&lt;br /&gt;
    for(int w=0; w&amp;lt;NUM_OF_LEVELS;w++){&lt;br /&gt;
      last_point[w] = 0;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void waiting_start_game(){&lt;br /&gt;
  // Allume toutes les LEDs en bleu avant de faire commencer la partie&lt;br /&gt;
  for (int w = 0; w &amp;lt; NUM_LEDS; w++){&lt;br /&gt;
    leds[w] = CRGB::Blue;&lt;br /&gt;
  }&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int compute_score(){&lt;br /&gt;
  // Récupere les élements du tableau last_point et les additionnes&lt;br /&gt;
  for (int i = 0; i&amp;lt;NUM_OF_LEVELS; i++){&lt;br /&gt;
    if (i &amp;gt; 2) {&lt;br /&gt;
      // Pour les niveaux 4 et 5, le score est diviser par deux&lt;br /&gt;
      score += last_point[i] / 2;&lt;br /&gt;
    } else {&lt;br /&gt;
      score += last_point[i];&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  // -------- DEBUGGING -------- //&lt;br /&gt;
  /*&lt;br /&gt;
  Serial.print(&amp;quot;Score : &amp;quot;);&lt;br /&gt;
  Serial.println(score);&lt;br /&gt;
  */&lt;br /&gt;
  return score;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int show_score(){&lt;br /&gt;
  lcd.clear();&lt;br /&gt;
  lcd.setCursor(0,0);&lt;br /&gt;
  lcd.print(&amp;quot;   Score : &amp;quot;);&lt;br /&gt;
  lcd.print(score);&lt;br /&gt;
  lcd.setCursor(0,1);&lt;br /&gt;
  lcd.print(&amp;quot;  Bien joue !!&amp;quot;); // Je ne sais pas comment mettre des caractères speciaux (hors ASCII 128)&lt;br /&gt;
  delay(5000);&lt;br /&gt;
  lcd.clear();&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ----- MUSIQUE ----- // &lt;br /&gt;
&lt;br /&gt;
int melody[] = {&lt;br /&gt;
&lt;br /&gt;
  //Based on the arrangement at https://www.flutetunes.com/tunes.php?id=169&lt;br /&gt;
  &lt;br /&gt;
  NOTE_AS4,-2,  NOTE_F4,8,  NOTE_F4,8,  NOTE_AS4,8,//1&lt;br /&gt;
  NOTE_GS4,16,  NOTE_FS4,16,  NOTE_GS4,-2,&lt;br /&gt;
  NOTE_AS4,-2,  NOTE_FS4,8,  NOTE_FS4,8,  NOTE_AS4,8,&lt;br /&gt;
  NOTE_A4,16,  NOTE_G4,16,  NOTE_A4,-2,&lt;br /&gt;
  REST,1, &lt;br /&gt;
&lt;br /&gt;
  NOTE_AS4,4,  NOTE_F4,-4,  NOTE_AS4,8,  NOTE_AS4,16,  NOTE_C5,16, NOTE_D5,16, NOTE_DS5,16,//7&lt;br /&gt;
  NOTE_F5,2,  NOTE_F5,8,  NOTE_F5,8,  NOTE_F5,8,  NOTE_FS5,16, NOTE_GS5,16,&lt;br /&gt;
  NOTE_AS5,-2,  NOTE_AS5,8,  NOTE_AS5,8,  NOTE_GS5,8,  NOTE_FS5,16,&lt;br /&gt;
  NOTE_GS5,-8,  NOTE_FS5,16,  NOTE_F5,2,  NOTE_F5,4, &lt;br /&gt;
&lt;br /&gt;
  NOTE_DS5,-8, NOTE_F5,16, NOTE_FS5,2, NOTE_F5,8, NOTE_DS5,8, //11&lt;br /&gt;
  NOTE_CS5,-8, NOTE_DS5,16, NOTE_F5,2, NOTE_DS5,8, NOTE_CS5,8,&lt;br /&gt;
  NOTE_C5,-8, NOTE_D5,16, NOTE_E5,2, NOTE_G5,8, &lt;br /&gt;
  NOTE_F5,16, NOTE_F4,16, NOTE_F4,16, NOTE_F4,16,NOTE_F4,16,NOTE_F4,16,NOTE_F4,16,NOTE_F4,16,NOTE_F4,8, NOTE_F4,16,NOTE_F4,8,&lt;br /&gt;
&lt;br /&gt;
  NOTE_AS4,4,  NOTE_F4,-4,  NOTE_AS4,8,  NOTE_AS4,16,  NOTE_C5,16, NOTE_D5,16, NOTE_DS5,16,//15&lt;br /&gt;
  NOTE_F5,2,  NOTE_F5,8,  NOTE_F5,8,  NOTE_F5,8,  NOTE_FS5,16, NOTE_GS5,16,&lt;br /&gt;
  NOTE_AS5,-2, NOTE_CS6,4,&lt;br /&gt;
  NOTE_C6,4, NOTE_A5,2, NOTE_F5,4,&lt;br /&gt;
  NOTE_FS5,-2, NOTE_AS5,4,&lt;br /&gt;
  NOTE_A5,4, NOTE_F5,2, NOTE_F5,4,&lt;br /&gt;
&lt;br /&gt;
  NOTE_FS5,-2, NOTE_AS5,4,&lt;br /&gt;
  NOTE_A5,4, NOTE_F5,2, NOTE_D5,4,&lt;br /&gt;
  NOTE_DS5,-2, NOTE_FS5,4,&lt;br /&gt;
  NOTE_F5,4, NOTE_CS5,2, NOTE_AS4,4,&lt;br /&gt;
  NOTE_C5,-8, NOTE_D5,16, NOTE_E5,2, NOTE_G5,8, &lt;br /&gt;
  NOTE_F5,16, NOTE_F4,16, NOTE_F4,16, NOTE_F4,16,NOTE_F4,16,NOTE_F4,16,NOTE_F4,16,NOTE_F4,16,NOTE_F4,8, NOTE_F4,16,NOTE_F4,8&lt;br /&gt;
  &lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void musique(){&lt;br /&gt;
  int tempo = 60;&lt;br /&gt;
  // sizeof gives the number of bytes, each int value is composed of two bytes (16 bits)&lt;br /&gt;
  // there are two values per note (pitch and duration), so for each note there are four bytes&lt;br /&gt;
  int notes = sizeof(melody) / sizeof(melody[0]) / 2;&lt;br /&gt;
  &lt;br /&gt;
  // this calculates the duration of a whole note in ms&lt;br /&gt;
  int wholenote = (60000 * 2) / tempo;&lt;br /&gt;
  &lt;br /&gt;
  int divider = 0, noteDuration = 0;&lt;br /&gt;
  // iterate over the notes of the melody. &lt;br /&gt;
  // Remember, the array is twice the number of notes (notes + durations)&lt;br /&gt;
  for (int thisNote = 0; thisNote &amp;lt; notes * 2; thisNote = thisNote + 2) {&lt;br /&gt;
&lt;br /&gt;
    // calculates the duration of each note&lt;br /&gt;
    divider = melody[thisNote + 1];&lt;br /&gt;
    if (divider &amp;gt; 0) {&lt;br /&gt;
      // regular note, just proceed&lt;br /&gt;
      noteDuration = (wholenote) / divider;&lt;br /&gt;
    } else if (divider &amp;lt; 0) {&lt;br /&gt;
      // dotted notes are represented with negative durations!!&lt;br /&gt;
      noteDuration = (wholenote) / abs(divider);&lt;br /&gt;
      noteDuration *= 1.5; // increases the duration in half for dotted notes&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // we only play the note for 90% of the duration, leaving 10% as a pause&lt;br /&gt;
    tone(PIN_BUZZER, melody[thisNote], noteDuration*0.9);&lt;br /&gt;
&lt;br /&gt;
    // Wait for the specief duration before playing the next note.&lt;br /&gt;
    delay(noteDuration);&lt;br /&gt;
    &lt;br /&gt;
    // stop the waveform generation before the next note.&lt;br /&gt;
    noTone(PIN_BUZZER);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==étapes de fabrication==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===étape 1: câbler et souder===&lt;br /&gt;
câbler les fils entre différents composants (selon le schéma) puis souder les fils si nécessaire et enfin téléverser le programme dans la carte si nécessaire.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Cablage.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
===étape 2: le support===&lt;br /&gt;
réaliser le prototype en carton &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Tonk1.jpg|200px]]&lt;br /&gt;
[[Fichier:Tonk2.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
===étape 3 : support en bois===&lt;br /&gt;
&lt;br /&gt;
On réalise en suite le support en bois.&lt;br /&gt;
&lt;br /&gt;
Grâce au prototype en carton on dessine le support en bois puis on reporte les mesures sur des plaques en bois pour ensuite les découper.&lt;br /&gt;
&lt;br /&gt;
Une fois les différentes parties du support faites on les assemble.&lt;br /&gt;
&lt;br /&gt;
===troubleshouting===&lt;br /&gt;
quelles sont difficultés, les problèmes, quelles sont les solutions, les trucs et astuces pour que ça marche ?&lt;br /&gt;
&lt;br /&gt;
1er problème : le programme ne marchait pas car la LED était montée à l'envers&lt;br /&gt;
&lt;br /&gt;
On a mit la led ans le bon sens puis on a adapté le programme.&lt;br /&gt;
&lt;br /&gt;
2ème problème : adapter la taille du support qui était d'abord trop grand&lt;br /&gt;
&lt;br /&gt;
On a utilisé le support en carton pour créer un support en bois plus petit.&lt;br /&gt;
&lt;br /&gt;
==Sources et documentation complémentaire==&lt;br /&gt;
&lt;br /&gt;
==ne pas modifier sous cette ligne==&lt;br /&gt;
[[Catégorie:Enib2024]]&lt;/div&gt;</summary>
		<author><name>Arnaud...</name></author>	</entry>

	<entry>
		<id>http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2024_:_CatchTheJackpot&amp;diff=26218</id>
		<title>ENIB 2024 : CatchTheJackpot</title>
		<link rel="alternate" type="text/html" href="http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2024_:_CatchTheJackpot&amp;diff=26218"/>
				<updated>2024-01-31T10:46:07Z</updated>
		
		<summary type="html">&lt;p&gt;Arnaud... : /* étape 1: câbler et souder */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==description==&lt;br /&gt;
&lt;br /&gt;
Ce projet fonction grâce à une carte Arduino, des LEDs et un bouton. &lt;br /&gt;
&lt;br /&gt;
Une lumière traverse le ruban de gauche à droite et lorsqu'elle est au milieu, il faut appuyer sur le bouton au bon moment pour gagner.&lt;br /&gt;
&lt;br /&gt;
==réalisé par :==&lt;br /&gt;
 -Arnaud Genty&lt;br /&gt;
 -Maxime Bintein&lt;br /&gt;
 -Tristan Le Coz&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
éventuelle vidéo&lt;br /&gt;
&lt;br /&gt;
==Liste des composants==&lt;br /&gt;
&lt;br /&gt;
* Bouton poussoir style Arcade&lt;br /&gt;
* Arduino nano&lt;br /&gt;
* 2 rubans de LED adressable (85 LEDs pour être exacte) &lt;br /&gt;
* Carton&lt;br /&gt;
* Bois&lt;br /&gt;
* Câbles mini-USB&lt;br /&gt;
* Câbles&lt;br /&gt;
* écran LCD&lt;br /&gt;
* Breadboard&lt;br /&gt;
* 2 résistances de 500kΩ&lt;br /&gt;
* Buzzer&lt;br /&gt;
&lt;br /&gt;
==Outils==&lt;br /&gt;
&lt;br /&gt;
* Cutter&lt;br /&gt;
* Marqueur noir&lt;br /&gt;
* Pistolet à colle&lt;br /&gt;
* Scotch&lt;br /&gt;
* Fer à souder&lt;br /&gt;
* Scie à bois&lt;br /&gt;
* Perceuse&lt;br /&gt;
* Bibliothèque Arduino FastLed &lt;br /&gt;
  https://fastled.io/&lt;br /&gt;
&lt;br /&gt;
==fichiers à joindre==&lt;br /&gt;
code, ficher d'impression 3D, de découpe laser ou vinyle, ...&lt;br /&gt;
&lt;br /&gt;
==Code :==&lt;br /&gt;
&lt;br /&gt;
//Programme fait sur carte STM8266 / WEMOS D1 mini&lt;br /&gt;
#include &amp;quot;pitches.h&amp;quot;&lt;br /&gt;
#include &amp;quot;FastLED.h&amp;quot;                    //bibliothèque pour controler le ruban led&lt;br /&gt;
#include &amp;lt;Wire.h&amp;gt;                  //bibliothèque écran&lt;br /&gt;
#include &amp;lt;LiquidCrystal_I2C.h&amp;gt;     //bibliothèque écran&lt;br /&gt;
#define REST 0&lt;br /&gt;
#define NUM_LEDS 86&lt;br /&gt;
#define NUM_OF_LEDS_BY_LEVEL 17         // nombre de leds par niveau&lt;br /&gt;
#define NUM_OF_LEVELS 5                  // nombre de niveaux&lt;br /&gt;
#define PIN_BTN D3                       // Entree du bouton&lt;br /&gt;
#define PIN_LEDS D4                      // Sortie du ruban led&lt;br /&gt;
#define PIN_BUZZER D8                    // Signal de sortie buzzer&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// -------- INIT VARIABLES --------&lt;br /&gt;
LiquidCrystal_I2C lcd(0x27, 16, 2);&lt;br /&gt;
CRGB leds[NUM_LEDS]; //Création d'une liste avec chaque led&lt;br /&gt;
CRGB randomcolor  = CHSV(random(192), 255, 255);&lt;br /&gt;
int level = 0;        // niveau auquel le joueur est&lt;br /&gt;
int delay_level = 30; // délai qui permet de controler la vitesse de déplacement de la led&lt;br /&gt;
auto color = CRGB::Blue; // couleur de la led qui se déplace&lt;br /&gt;
int score = 0;           // score du joueur&lt;br /&gt;
const double coef[] = {1,1.5,2,2.5,3}; // coefficient multiplicateur de point par niveau&lt;br /&gt;
int last_point[NUM_OF_LEVELS];     // sauvegarde de la derniere led allumée pour la rallumer après flash()&lt;br /&gt;
bool game_in_progress = false;&lt;br /&gt;
int last_point_visu = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// -------- INIT FONCTIONS --------&lt;br /&gt;
&lt;br /&gt;
int move();            // déplacement de la led&lt;br /&gt;
void level_up();    // passage de niveau&lt;br /&gt;
void waiting_start_game(); //affichage d'attente de début du jeu&lt;br /&gt;
void flash();       // animation de victoire d'un niveau&lt;br /&gt;
&lt;br /&gt;
// -------- PROGRAMME --------&lt;br /&gt;
void setup() {&lt;br /&gt;
  FastLED.addLeds&amp;lt;NEOPIXEL, D4&amp;gt;(leds, NUM_LEDS);     // setup du ruban de led sur la sortie PIN_LEDS =&amp;gt; 2&lt;br /&gt;
  pinMode(PIN_BTN, INPUT);                          // setup du bouton dur l'entrée PIN_BTN =&amp;gt; 3&lt;br /&gt;
  FastLED.setBrightness(50);                    // setup de la luminosité&lt;br /&gt;
  Serial.begin(9600);                               // setup moniteur série pour debug &lt;br /&gt;
  int last_point[NUM_OF_LEVELS];&lt;br /&gt;
  pinMode(PIN_BUZZER, OUTPUT);&lt;br /&gt;
&lt;br /&gt;
  // -------- ECRAN --------&lt;br /&gt;
  lcd.init();                        // Initialize I2C LCD module&lt;br /&gt;
  lcd.backlight();                   // Turn backlight ON&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  waiting_start_game();&lt;br /&gt;
    lcd.setCursor(0,0);&lt;br /&gt;
    lcd.print(&amp;quot;    Cliquer &amp;quot;);&lt;br /&gt;
    lcd.setCursor(0,1);&lt;br /&gt;
    lcd.print(&amp;quot; pour commencer&amp;quot;);&lt;br /&gt;
    FastLED.clear();&lt;br /&gt;
  if (digitalRead(PIN_BTN)==LOW){&lt;br /&gt;
    musique();&lt;br /&gt;
    game_in_progress = true;&lt;br /&gt;
    lcd.clear();&lt;br /&gt;
    lcd.setCursor(0,0);&lt;br /&gt;
    lcd.print(&amp;quot;Partie en cours !&amp;quot;);&lt;br /&gt;
    lcd.setCursor(0,1);&lt;br /&gt;
    lcd.print(&amp;quot;XoXoXoXoXoXoXoXo&amp;quot;);&lt;br /&gt;
    FastLED.clear();&lt;br /&gt;
    delay(400);&lt;br /&gt;
    while(game_in_progress){&lt;br /&gt;
      move();&lt;br /&gt;
      if (digitalRead(PIN_BTN)==LOW &amp;amp;&amp;amp; game_in_progress==true){&lt;br /&gt;
        level_up();&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
int move(){&lt;br /&gt;
  // Permet de faire bouger la LED de gauche à droite&lt;br /&gt;
  for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++){&lt;br /&gt;
    // -------- DEBUGGING -------- // &lt;br /&gt;
    /*&lt;br /&gt;
    Serial.print(&amp;quot;val de la led: &amp;quot;);&lt;br /&gt;
    Serial.print(i);&lt;br /&gt;
    Serial.print(&amp;quot;\n&amp;quot;);&lt;br /&gt;
    */&lt;br /&gt;
    if (digitalRead(PIN_BTN)==LOW){     //Stock des scores LEDs 1 -&amp;gt; 9 -&amp;gt; 1&lt;br /&gt;
      int center = abs(i - (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL / 2));&lt;br /&gt;
      if (center &amp;lt;= NUM_OF_LEDS_BY_LEVEL/2) {&lt;br /&gt;
        last_point[level] = NUM_OF_LEDS_BY_LEVEL/2 - center + 1;  // Les points augmentent jusqu'à 9&lt;br /&gt;
      } else {&lt;br /&gt;
        last_point[level] = 0;  // À partir de la position 9, les points diminuent&lt;br /&gt;
      }&lt;br /&gt;
    //   if(i&amp;lt;(1/2*NUM_OF_LEDS_BY_LEVEL)){&lt;br /&gt;
    //     last_point[level] = i;&lt;br /&gt;
    //   }&lt;br /&gt;
    //   else{&lt;br /&gt;
    //     for(int degr = 1; degr&amp;lt;NUM_OF_LEDS_BY_LEVEL; degr++)&lt;br /&gt;
    //     last_point[level] = (i - degr);&lt;br /&gt;
      &lt;br /&gt;
    // }&lt;br /&gt;
      int last_point_visu = i-1;&lt;br /&gt;
      return i-1;&lt;br /&gt;
      // -------- DEBUGGING -------- //&lt;br /&gt;
      /*&lt;br /&gt;
      Serial.print(&amp;quot;last_point_visu&amp;quot;);&lt;br /&gt;
      Serial.print(last_point_visu);&lt;br /&gt;
       &lt;br /&gt;
      for(int z=0; z&amp;lt;NUM_OF_LEVELS; z++){&lt;br /&gt;
        Serial.print(last_point[z]);&lt;br /&gt;
        Serial.print(&amp;quot;\n&amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
      */&lt;br /&gt;
      &lt;br /&gt;
      &lt;br /&gt;
    }&lt;br /&gt;
    //Eteins les LEDs derrière la LED mouvante&lt;br /&gt;
    leds[i - 1] = CRGB::Black;&lt;br /&gt;
    delay(3);&lt;br /&gt;
    leds[level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2] = CRGB::Yellow;&lt;br /&gt;
    leds[i] = color;&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(delay_level);&lt;br /&gt;
  }&lt;br /&gt;
  leds[NUM_OF_LEDS_BY_LEVEL * level + 20] = CRGB::Black;&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
  delay(delay_level);&lt;br /&gt;
  for (int i = NUM_OF_LEDS_BY_LEVEL * level +  NUM_OF_LEDS_BY_LEVEL - 1; i &amp;gt;= NUM_OF_LEDS_BY_LEVEL * level ; i--)&lt;br /&gt;
  {&lt;br /&gt;
    // -------- DEBUGGING -------- //&lt;br /&gt;
    /*&lt;br /&gt;
    Serial.print(&amp;quot;val de la led: &amp;quot;);&lt;br /&gt;
    Serial.print(i);&lt;br /&gt;
    Serial.print(&amp;quot;\n&amp;quot;);&lt;br /&gt;
    */&lt;br /&gt;
    if (digitalRead(PIN_BTN)==LOW){           //Stock des scores LEDs 1 -&amp;gt; 9 -&amp;gt; 1&lt;br /&gt;
      int center = abs(i - (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL / 2));&lt;br /&gt;
      if (center &amp;lt;= NUM_OF_LEDS_BY_LEVEL/2) {&lt;br /&gt;
        last_point[level] = NUM_OF_LEDS_BY_LEVEL/2 - center + 1;  // Les points augmentent jusqu'à 9&lt;br /&gt;
      } else {&lt;br /&gt;
        last_point[level] = 0;  // À partir de la position 9, les points diminuent&lt;br /&gt;
      }&lt;br /&gt;
      // if(i&amp;lt;(1/2*NUM_OF_LEDS_BY_LEVEL)){&lt;br /&gt;
      //   last_point[level] = i;&lt;br /&gt;
      // }&lt;br /&gt;
      // else{&lt;br /&gt;
      //   for(int degr = 1; degr&amp;lt;NUM_OF_LEDS_BY_LEVEL; degr++)&lt;br /&gt;
      //   last_point[level] = (i - degr);&lt;br /&gt;
      //   }&lt;br /&gt;
    &lt;br /&gt;
      int last_point_visu = i+1;&lt;br /&gt;
      return i+1;&lt;br /&gt;
      &lt;br /&gt;
      // -------- DEBUGGING -------- //&lt;br /&gt;
      /*&lt;br /&gt;
      Serial.print(&amp;quot;last_point_visu&amp;quot;);&lt;br /&gt;
      Serial.print(last_point_visu);&lt;br /&gt;
      &lt;br /&gt;
      for(int z=0; z&amp;lt;NUM_OF_LEVELS; z++){&lt;br /&gt;
        Serial.print(last_point[z]);&lt;br /&gt;
        Serial.print(&amp;quot;\n&amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
      */&lt;br /&gt;
      &lt;br /&gt;
    }&lt;br /&gt;
    //Eteins les LEDs derrière la LED mouvante&lt;br /&gt;
    leds[i + 1] = CRGB::Black;&lt;br /&gt;
    delay(3);&lt;br /&gt;
    leds[level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2] = CRGB::Yellow;&lt;br /&gt;
    leds[i] = color;&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(delay_level);&lt;br /&gt;
  }&lt;br /&gt;
    leds[NUM_OF_LEDS_BY_LEVEL] = CRGB::Black;&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(delay_level);&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void flash()   // fonction de décoration qui fait clignoter les leds en blanc avant le passage de niveau&lt;br /&gt;
{&lt;br /&gt;
  for (int cpt = 0; cpt &amp;lt; 4; cpt++) &lt;br /&gt;
  {&lt;br /&gt;
    for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++)  // On met toute les leds du niveau en blanc&lt;br /&gt;
    {&lt;br /&gt;
      leds[i] = CRGB::Green;&lt;br /&gt;
    }&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(100);&lt;br /&gt;
    for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++) // On éteint toutes les leds du niveau&lt;br /&gt;
    {&lt;br /&gt;
      leds[i] = CRGB::Black;&lt;br /&gt;
    }&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(100);&lt;br /&gt;
  }&lt;br /&gt;
  leds[last_point_visu] = CRGB::Purple;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void level_up()   // changement de niveau&lt;br /&gt;
{&lt;br /&gt;
  flash();  // animation&lt;br /&gt;
  level++;  // incrémentation de la variable niveau&lt;br /&gt;
  delay_level -= 4; // le jeu devient de plus en plus rapide&lt;br /&gt;
&lt;br /&gt;
  if (level &amp;gt;= NUM_OF_LEVELS)   // fin du jeu&lt;br /&gt;
  {&lt;br /&gt;
    compute_score(); //Calcul le score&lt;br /&gt;
    show_score(); //Affiche le score sur un écran à crystaux liquides&lt;br /&gt;
&lt;br /&gt;
    //Remise des valeurs pas défaut&lt;br /&gt;
    level = 0;      &lt;br /&gt;
    score = 0;&lt;br /&gt;
    delay_level = 30;&lt;br /&gt;
    game_in_progress = false;&lt;br /&gt;
    for(int w=0; w&amp;lt;NUM_OF_LEVELS;w++){&lt;br /&gt;
      last_point[w] = 0;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void waiting_start_game(){&lt;br /&gt;
  // Allume toutes les LEDs en bleu avant de faire commencer la partie&lt;br /&gt;
  for (int w = 0; w &amp;lt; NUM_LEDS; w++){&lt;br /&gt;
    leds[w] = CRGB::Blue;&lt;br /&gt;
  }&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int compute_score(){&lt;br /&gt;
  // Récupere les élements du tableau last_point et les additionnes&lt;br /&gt;
  for (int i = 0; i&amp;lt;NUM_OF_LEVELS; i++){&lt;br /&gt;
    if (i &amp;gt; 2) {&lt;br /&gt;
      // Pour les niveaux 4 et 5, le score est diviser par deux&lt;br /&gt;
      score += last_point[i] / 2;&lt;br /&gt;
    } else {&lt;br /&gt;
      score += last_point[i];&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  // -------- DEBUGGING -------- //&lt;br /&gt;
  /*&lt;br /&gt;
  Serial.print(&amp;quot;Score : &amp;quot;);&lt;br /&gt;
  Serial.println(score);&lt;br /&gt;
  */&lt;br /&gt;
  return score;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int show_score(){&lt;br /&gt;
  lcd.clear();&lt;br /&gt;
  lcd.setCursor(0,0);&lt;br /&gt;
  lcd.print(&amp;quot;   Score : &amp;quot;);&lt;br /&gt;
  lcd.print(score);&lt;br /&gt;
  lcd.setCursor(0,1);&lt;br /&gt;
  lcd.print(&amp;quot;  Bien joue !!&amp;quot;); // Je ne sais pas comment mettre des caractères speciaux (hors ASCII 128)&lt;br /&gt;
  delay(5000);&lt;br /&gt;
  lcd.clear();&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ----- MUSIQUE ----- // &lt;br /&gt;
&lt;br /&gt;
int melody[] = {&lt;br /&gt;
&lt;br /&gt;
  //Based on the arrangement at https://www.flutetunes.com/tunes.php?id=169&lt;br /&gt;
  &lt;br /&gt;
  NOTE_AS4,-2,  NOTE_F4,8,  NOTE_F4,8,  NOTE_AS4,8,//1&lt;br /&gt;
  NOTE_GS4,16,  NOTE_FS4,16,  NOTE_GS4,-2,&lt;br /&gt;
  NOTE_AS4,-2,  NOTE_FS4,8,  NOTE_FS4,8,  NOTE_AS4,8,&lt;br /&gt;
  NOTE_A4,16,  NOTE_G4,16,  NOTE_A4,-2,&lt;br /&gt;
  REST,1, &lt;br /&gt;
&lt;br /&gt;
  NOTE_AS4,4,  NOTE_F4,-4,  NOTE_AS4,8,  NOTE_AS4,16,  NOTE_C5,16, NOTE_D5,16, NOTE_DS5,16,//7&lt;br /&gt;
  NOTE_F5,2,  NOTE_F5,8,  NOTE_F5,8,  NOTE_F5,8,  NOTE_FS5,16, NOTE_GS5,16,&lt;br /&gt;
  NOTE_AS5,-2,  NOTE_AS5,8,  NOTE_AS5,8,  NOTE_GS5,8,  NOTE_FS5,16,&lt;br /&gt;
  NOTE_GS5,-8,  NOTE_FS5,16,  NOTE_F5,2,  NOTE_F5,4, &lt;br /&gt;
&lt;br /&gt;
  NOTE_DS5,-8, NOTE_F5,16, NOTE_FS5,2, NOTE_F5,8, NOTE_DS5,8, //11&lt;br /&gt;
  NOTE_CS5,-8, NOTE_DS5,16, NOTE_F5,2, NOTE_DS5,8, NOTE_CS5,8,&lt;br /&gt;
  NOTE_C5,-8, NOTE_D5,16, NOTE_E5,2, NOTE_G5,8, &lt;br /&gt;
  NOTE_F5,16, NOTE_F4,16, NOTE_F4,16, NOTE_F4,16,NOTE_F4,16,NOTE_F4,16,NOTE_F4,16,NOTE_F4,16,NOTE_F4,8, NOTE_F4,16,NOTE_F4,8,&lt;br /&gt;
&lt;br /&gt;
  NOTE_AS4,4,  NOTE_F4,-4,  NOTE_AS4,8,  NOTE_AS4,16,  NOTE_C5,16, NOTE_D5,16, NOTE_DS5,16,//15&lt;br /&gt;
  NOTE_F5,2,  NOTE_F5,8,  NOTE_F5,8,  NOTE_F5,8,  NOTE_FS5,16, NOTE_GS5,16,&lt;br /&gt;
  NOTE_AS5,-2, NOTE_CS6,4,&lt;br /&gt;
  NOTE_C6,4, NOTE_A5,2, NOTE_F5,4,&lt;br /&gt;
  NOTE_FS5,-2, NOTE_AS5,4,&lt;br /&gt;
  NOTE_A5,4, NOTE_F5,2, NOTE_F5,4,&lt;br /&gt;
&lt;br /&gt;
  NOTE_FS5,-2, NOTE_AS5,4,&lt;br /&gt;
  NOTE_A5,4, NOTE_F5,2, NOTE_D5,4,&lt;br /&gt;
  NOTE_DS5,-2, NOTE_FS5,4,&lt;br /&gt;
  NOTE_F5,4, NOTE_CS5,2, NOTE_AS4,4,&lt;br /&gt;
  NOTE_C5,-8, NOTE_D5,16, NOTE_E5,2, NOTE_G5,8, &lt;br /&gt;
  NOTE_F5,16, NOTE_F4,16, NOTE_F4,16, NOTE_F4,16,NOTE_F4,16,NOTE_F4,16,NOTE_F4,16,NOTE_F4,16,NOTE_F4,8, NOTE_F4,16,NOTE_F4,8&lt;br /&gt;
  &lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void musique(){&lt;br /&gt;
  int tempo = 60;&lt;br /&gt;
  // sizeof gives the number of bytes, each int value is composed of two bytes (16 bits)&lt;br /&gt;
  // there are two values per note (pitch and duration), so for each note there are four bytes&lt;br /&gt;
  int notes = sizeof(melody) / sizeof(melody[0]) / 2;&lt;br /&gt;
  &lt;br /&gt;
  // this calculates the duration of a whole note in ms&lt;br /&gt;
  int wholenote = (60000 * 2) / tempo;&lt;br /&gt;
  &lt;br /&gt;
  int divider = 0, noteDuration = 0;&lt;br /&gt;
  // iterate over the notes of the melody. &lt;br /&gt;
  // Remember, the array is twice the number of notes (notes + durations)&lt;br /&gt;
  for (int thisNote = 0; thisNote &amp;lt; notes * 2; thisNote = thisNote + 2) {&lt;br /&gt;
&lt;br /&gt;
    // calculates the duration of each note&lt;br /&gt;
    divider = melody[thisNote + 1];&lt;br /&gt;
    if (divider &amp;gt; 0) {&lt;br /&gt;
      // regular note, just proceed&lt;br /&gt;
      noteDuration = (wholenote) / divider;&lt;br /&gt;
    } else if (divider &amp;lt; 0) {&lt;br /&gt;
      // dotted notes are represented with negative durations!!&lt;br /&gt;
      noteDuration = (wholenote) / abs(divider);&lt;br /&gt;
      noteDuration *= 1.5; // increases the duration in half for dotted notes&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // we only play the note for 90% of the duration, leaving 10% as a pause&lt;br /&gt;
    tone(PIN_BUZZER, melody[thisNote], noteDuration*0.9);&lt;br /&gt;
&lt;br /&gt;
    // Wait for the specief duration before playing the next note.&lt;br /&gt;
    delay(noteDuration);&lt;br /&gt;
    &lt;br /&gt;
    // stop the waveform generation before the next note.&lt;br /&gt;
    noTone(PIN_BUZZER);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==étapes de fabrication==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===étape 1: câbler et souder===&lt;br /&gt;
câbler les fils entre différents composants (selon le schéma) puis souder les fils si nécessaire et enfin téléverser le programme dans la carte si nécessaire.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Cablage.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
===étape 2: le support===&lt;br /&gt;
réaliser le prototype en carton &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Tonk1.jpg|200px]]&lt;br /&gt;
[[Fichier:Tonk2.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
===étape 3 : support en bois===&lt;br /&gt;
&lt;br /&gt;
On réalise en suite le support en bois.&lt;br /&gt;
&lt;br /&gt;
Grâce au prototype en carton on dessine le support en bois puis on reporte les mesures sur des plaques en bois pour ensuite les découper.&lt;br /&gt;
&lt;br /&gt;
Une fois les différentes parties du support faites on les assemble.&lt;br /&gt;
&lt;br /&gt;
===troubleshouting===&lt;br /&gt;
quelles sont difficultés, les problèmes, quelles sont les solutions, les trucs et astuces pour que ça marche ?&lt;br /&gt;
&lt;br /&gt;
1er problème : le programme ne marchait pas car la LED était montée à l'envers&lt;br /&gt;
&lt;br /&gt;
On a mit la led ans le bon sens puis on a adapté le programme.&lt;br /&gt;
&lt;br /&gt;
2ème problème : adapter la taille du support qui était d'abord trop grand&lt;br /&gt;
&lt;br /&gt;
On a utilisé le support en carton pour créer un support en bois plus petit.&lt;br /&gt;
&lt;br /&gt;
==Sources et documentation complémentaire==&lt;br /&gt;
&lt;br /&gt;
==ne pas modifier sous cette ligne==&lt;br /&gt;
[[Catégorie:Enib2024]]&lt;/div&gt;</summary>
		<author><name>Arnaud...</name></author>	</entry>

	<entry>
		<id>http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2024_:_CatchTheJackpot&amp;diff=26215</id>
		<title>ENIB 2024 : CatchTheJackpot</title>
		<link rel="alternate" type="text/html" href="http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2024_:_CatchTheJackpot&amp;diff=26215"/>
				<updated>2024-01-31T10:45:14Z</updated>
		
		<summary type="html">&lt;p&gt;Arnaud... : /* Liste des composants */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==description==&lt;br /&gt;
&lt;br /&gt;
Ce projet fonction grâce à une carte Arduino, des LEDs et un bouton. &lt;br /&gt;
&lt;br /&gt;
Une lumière traverse le ruban de gauche à droite et lorsqu'elle est au milieu, il faut appuyer sur le bouton au bon moment pour gagner.&lt;br /&gt;
&lt;br /&gt;
==réalisé par :==&lt;br /&gt;
 -Arnaud Genty&lt;br /&gt;
 -Maxime Bintein&lt;br /&gt;
 -Tristan Le Coz&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
éventuelle vidéo&lt;br /&gt;
&lt;br /&gt;
==Liste des composants==&lt;br /&gt;
&lt;br /&gt;
* Bouton poussoir style Arcade&lt;br /&gt;
* Arduino nano&lt;br /&gt;
* 2 rubans de LED adressable (85 LEDs pour être exacte) &lt;br /&gt;
* Carton&lt;br /&gt;
* Bois&lt;br /&gt;
* Câbles mini-USB&lt;br /&gt;
* Câbles&lt;br /&gt;
* écran LCD&lt;br /&gt;
* Breadboard&lt;br /&gt;
* 2 résistances de 500kΩ&lt;br /&gt;
* Buzzer&lt;br /&gt;
&lt;br /&gt;
==Outils==&lt;br /&gt;
&lt;br /&gt;
* Cutter&lt;br /&gt;
* Marqueur noir&lt;br /&gt;
* Pistolet à colle&lt;br /&gt;
* Scotch&lt;br /&gt;
* Fer à souder&lt;br /&gt;
* Scie à bois&lt;br /&gt;
* Perceuse&lt;br /&gt;
* Bibliothèque Arduino FastLed &lt;br /&gt;
  https://fastled.io/&lt;br /&gt;
&lt;br /&gt;
==fichiers à joindre==&lt;br /&gt;
code, ficher d'impression 3D, de découpe laser ou vinyle, ...&lt;br /&gt;
&lt;br /&gt;
==Code :==&lt;br /&gt;
&lt;br /&gt;
//Programme fait sur carte STM8266 / WEMOS D1 mini&lt;br /&gt;
#include &amp;quot;pitches.h&amp;quot;&lt;br /&gt;
#include &amp;quot;FastLED.h&amp;quot;                    //bibliothèque pour controler le ruban led&lt;br /&gt;
#include &amp;lt;Wire.h&amp;gt;                  //bibliothèque écran&lt;br /&gt;
#include &amp;lt;LiquidCrystal_I2C.h&amp;gt;     //bibliothèque écran&lt;br /&gt;
#define REST 0&lt;br /&gt;
#define NUM_LEDS 86&lt;br /&gt;
#define NUM_OF_LEDS_BY_LEVEL 17         // nombre de leds par niveau&lt;br /&gt;
#define NUM_OF_LEVELS 5                  // nombre de niveaux&lt;br /&gt;
#define PIN_BTN D3                       // Entree du bouton&lt;br /&gt;
#define PIN_LEDS D4                      // Sortie du ruban led&lt;br /&gt;
#define PIN_BUZZER D8                    // Signal de sortie buzzer&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// -------- INIT VARIABLES --------&lt;br /&gt;
LiquidCrystal_I2C lcd(0x27, 16, 2);&lt;br /&gt;
CRGB leds[NUM_LEDS]; //Création d'une liste avec chaque led&lt;br /&gt;
CRGB randomcolor  = CHSV(random(192), 255, 255);&lt;br /&gt;
int level = 0;        // niveau auquel le joueur est&lt;br /&gt;
int delay_level = 30; // délai qui permet de controler la vitesse de déplacement de la led&lt;br /&gt;
auto color = CRGB::Blue; // couleur de la led qui se déplace&lt;br /&gt;
int score = 0;           // score du joueur&lt;br /&gt;
const double coef[] = {1,1.5,2,2.5,3}; // coefficient multiplicateur de point par niveau&lt;br /&gt;
int last_point[NUM_OF_LEVELS];     // sauvegarde de la derniere led allumée pour la rallumer après flash()&lt;br /&gt;
bool game_in_progress = false;&lt;br /&gt;
int last_point_visu = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// -------- INIT FONCTIONS --------&lt;br /&gt;
&lt;br /&gt;
int move();            // déplacement de la led&lt;br /&gt;
void level_up();    // passage de niveau&lt;br /&gt;
void waiting_start_game(); //affichage d'attente de début du jeu&lt;br /&gt;
void flash();       // animation de victoire d'un niveau&lt;br /&gt;
&lt;br /&gt;
// -------- PROGRAMME --------&lt;br /&gt;
void setup() {&lt;br /&gt;
  FastLED.addLeds&amp;lt;NEOPIXEL, D4&amp;gt;(leds, NUM_LEDS);     // setup du ruban de led sur la sortie PIN_LEDS =&amp;gt; 2&lt;br /&gt;
  pinMode(PIN_BTN, INPUT);                          // setup du bouton dur l'entrée PIN_BTN =&amp;gt; 3&lt;br /&gt;
  FastLED.setBrightness(50);                    // setup de la luminosité&lt;br /&gt;
  Serial.begin(9600);                               // setup moniteur série pour debug &lt;br /&gt;
  int last_point[NUM_OF_LEVELS];&lt;br /&gt;
  pinMode(PIN_BUZZER, OUTPUT);&lt;br /&gt;
&lt;br /&gt;
  // -------- ECRAN --------&lt;br /&gt;
  lcd.init();                        // Initialize I2C LCD module&lt;br /&gt;
  lcd.backlight();                   // Turn backlight ON&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  waiting_start_game();&lt;br /&gt;
    lcd.setCursor(0,0);&lt;br /&gt;
    lcd.print(&amp;quot;    Cliquer &amp;quot;);&lt;br /&gt;
    lcd.setCursor(0,1);&lt;br /&gt;
    lcd.print(&amp;quot; pour commencer&amp;quot;);&lt;br /&gt;
    FastLED.clear();&lt;br /&gt;
  if (digitalRead(PIN_BTN)==LOW){&lt;br /&gt;
    musique();&lt;br /&gt;
    game_in_progress = true;&lt;br /&gt;
    lcd.clear();&lt;br /&gt;
    lcd.setCursor(0,0);&lt;br /&gt;
    lcd.print(&amp;quot;Partie en cours !&amp;quot;);&lt;br /&gt;
    lcd.setCursor(0,1);&lt;br /&gt;
    lcd.print(&amp;quot;XoXoXoXoXoXoXoXo&amp;quot;);&lt;br /&gt;
    FastLED.clear();&lt;br /&gt;
    delay(400);&lt;br /&gt;
    while(game_in_progress){&lt;br /&gt;
      move();&lt;br /&gt;
      if (digitalRead(PIN_BTN)==LOW &amp;amp;&amp;amp; game_in_progress==true){&lt;br /&gt;
        level_up();&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
int move(){&lt;br /&gt;
  // Permet de faire bouger la LED de gauche à droite&lt;br /&gt;
  for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++){&lt;br /&gt;
    // -------- DEBUGGING -------- // &lt;br /&gt;
    /*&lt;br /&gt;
    Serial.print(&amp;quot;val de la led: &amp;quot;);&lt;br /&gt;
    Serial.print(i);&lt;br /&gt;
    Serial.print(&amp;quot;\n&amp;quot;);&lt;br /&gt;
    */&lt;br /&gt;
    if (digitalRead(PIN_BTN)==LOW){     //Stock des scores LEDs 1 -&amp;gt; 9 -&amp;gt; 1&lt;br /&gt;
      int center = abs(i - (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL / 2));&lt;br /&gt;
      if (center &amp;lt;= NUM_OF_LEDS_BY_LEVEL/2) {&lt;br /&gt;
        last_point[level] = NUM_OF_LEDS_BY_LEVEL/2 - center + 1;  // Les points augmentent jusqu'à 9&lt;br /&gt;
      } else {&lt;br /&gt;
        last_point[level] = 0;  // À partir de la position 9, les points diminuent&lt;br /&gt;
      }&lt;br /&gt;
    //   if(i&amp;lt;(1/2*NUM_OF_LEDS_BY_LEVEL)){&lt;br /&gt;
    //     last_point[level] = i;&lt;br /&gt;
    //   }&lt;br /&gt;
    //   else{&lt;br /&gt;
    //     for(int degr = 1; degr&amp;lt;NUM_OF_LEDS_BY_LEVEL; degr++)&lt;br /&gt;
    //     last_point[level] = (i - degr);&lt;br /&gt;
      &lt;br /&gt;
    // }&lt;br /&gt;
      int last_point_visu = i-1;&lt;br /&gt;
      return i-1;&lt;br /&gt;
      // -------- DEBUGGING -------- //&lt;br /&gt;
      /*&lt;br /&gt;
      Serial.print(&amp;quot;last_point_visu&amp;quot;);&lt;br /&gt;
      Serial.print(last_point_visu);&lt;br /&gt;
       &lt;br /&gt;
      for(int z=0; z&amp;lt;NUM_OF_LEVELS; z++){&lt;br /&gt;
        Serial.print(last_point[z]);&lt;br /&gt;
        Serial.print(&amp;quot;\n&amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
      */&lt;br /&gt;
      &lt;br /&gt;
      &lt;br /&gt;
    }&lt;br /&gt;
    //Eteins les LEDs derrière la LED mouvante&lt;br /&gt;
    leds[i - 1] = CRGB::Black;&lt;br /&gt;
    delay(3);&lt;br /&gt;
    leds[level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2] = CRGB::Yellow;&lt;br /&gt;
    leds[i] = color;&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(delay_level);&lt;br /&gt;
  }&lt;br /&gt;
  leds[NUM_OF_LEDS_BY_LEVEL * level + 20] = CRGB::Black;&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
  delay(delay_level);&lt;br /&gt;
  for (int i = NUM_OF_LEDS_BY_LEVEL * level +  NUM_OF_LEDS_BY_LEVEL - 1; i &amp;gt;= NUM_OF_LEDS_BY_LEVEL * level ; i--)&lt;br /&gt;
  {&lt;br /&gt;
    // -------- DEBUGGING -------- //&lt;br /&gt;
    /*&lt;br /&gt;
    Serial.print(&amp;quot;val de la led: &amp;quot;);&lt;br /&gt;
    Serial.print(i);&lt;br /&gt;
    Serial.print(&amp;quot;\n&amp;quot;);&lt;br /&gt;
    */&lt;br /&gt;
    if (digitalRead(PIN_BTN)==LOW){           //Stock des scores LEDs 1 -&amp;gt; 9 -&amp;gt; 1&lt;br /&gt;
      int center = abs(i - (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL / 2));&lt;br /&gt;
      if (center &amp;lt;= NUM_OF_LEDS_BY_LEVEL/2) {&lt;br /&gt;
        last_point[level] = NUM_OF_LEDS_BY_LEVEL/2 - center + 1;  // Les points augmentent jusqu'à 9&lt;br /&gt;
      } else {&lt;br /&gt;
        last_point[level] = 0;  // À partir de la position 9, les points diminuent&lt;br /&gt;
      }&lt;br /&gt;
      // if(i&amp;lt;(1/2*NUM_OF_LEDS_BY_LEVEL)){&lt;br /&gt;
      //   last_point[level] = i;&lt;br /&gt;
      // }&lt;br /&gt;
      // else{&lt;br /&gt;
      //   for(int degr = 1; degr&amp;lt;NUM_OF_LEDS_BY_LEVEL; degr++)&lt;br /&gt;
      //   last_point[level] = (i - degr);&lt;br /&gt;
      //   }&lt;br /&gt;
    &lt;br /&gt;
      int last_point_visu = i+1;&lt;br /&gt;
      return i+1;&lt;br /&gt;
      &lt;br /&gt;
      // -------- DEBUGGING -------- //&lt;br /&gt;
      /*&lt;br /&gt;
      Serial.print(&amp;quot;last_point_visu&amp;quot;);&lt;br /&gt;
      Serial.print(last_point_visu);&lt;br /&gt;
      &lt;br /&gt;
      for(int z=0; z&amp;lt;NUM_OF_LEVELS; z++){&lt;br /&gt;
        Serial.print(last_point[z]);&lt;br /&gt;
        Serial.print(&amp;quot;\n&amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
      */&lt;br /&gt;
      &lt;br /&gt;
    }&lt;br /&gt;
    //Eteins les LEDs derrière la LED mouvante&lt;br /&gt;
    leds[i + 1] = CRGB::Black;&lt;br /&gt;
    delay(3);&lt;br /&gt;
    leds[level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2] = CRGB::Yellow;&lt;br /&gt;
    leds[i] = color;&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(delay_level);&lt;br /&gt;
  }&lt;br /&gt;
    leds[NUM_OF_LEDS_BY_LEVEL] = CRGB::Black;&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(delay_level);&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void flash()   // fonction de décoration qui fait clignoter les leds en blanc avant le passage de niveau&lt;br /&gt;
{&lt;br /&gt;
  for (int cpt = 0; cpt &amp;lt; 4; cpt++) &lt;br /&gt;
  {&lt;br /&gt;
    for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++)  // On met toute les leds du niveau en blanc&lt;br /&gt;
    {&lt;br /&gt;
      leds[i] = CRGB::Green;&lt;br /&gt;
    }&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(100);&lt;br /&gt;
    for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++) // On éteint toutes les leds du niveau&lt;br /&gt;
    {&lt;br /&gt;
      leds[i] = CRGB::Black;&lt;br /&gt;
    }&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(100);&lt;br /&gt;
  }&lt;br /&gt;
  leds[last_point_visu] = CRGB::Purple;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void level_up()   // changement de niveau&lt;br /&gt;
{&lt;br /&gt;
  flash();  // animation&lt;br /&gt;
  level++;  // incrémentation de la variable niveau&lt;br /&gt;
  delay_level -= 4; // le jeu devient de plus en plus rapide&lt;br /&gt;
&lt;br /&gt;
  if (level &amp;gt;= NUM_OF_LEVELS)   // fin du jeu&lt;br /&gt;
  {&lt;br /&gt;
    compute_score(); //Calcul le score&lt;br /&gt;
    show_score(); //Affiche le score sur un écran à crystaux liquides&lt;br /&gt;
&lt;br /&gt;
    //Remise des valeurs pas défaut&lt;br /&gt;
    level = 0;      &lt;br /&gt;
    score = 0;&lt;br /&gt;
    delay_level = 30;&lt;br /&gt;
    game_in_progress = false;&lt;br /&gt;
    for(int w=0; w&amp;lt;NUM_OF_LEVELS;w++){&lt;br /&gt;
      last_point[w] = 0;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void waiting_start_game(){&lt;br /&gt;
  // Allume toutes les LEDs en bleu avant de faire commencer la partie&lt;br /&gt;
  for (int w = 0; w &amp;lt; NUM_LEDS; w++){&lt;br /&gt;
    leds[w] = CRGB::Blue;&lt;br /&gt;
  }&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int compute_score(){&lt;br /&gt;
  // Récupere les élements du tableau last_point et les additionnes&lt;br /&gt;
  for (int i = 0; i&amp;lt;NUM_OF_LEVELS; i++){&lt;br /&gt;
    if (i &amp;gt; 2) {&lt;br /&gt;
      // Pour les niveaux 4 et 5, le score est diviser par deux&lt;br /&gt;
      score += last_point[i] / 2;&lt;br /&gt;
    } else {&lt;br /&gt;
      score += last_point[i];&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  // -------- DEBUGGING -------- //&lt;br /&gt;
  /*&lt;br /&gt;
  Serial.print(&amp;quot;Score : &amp;quot;);&lt;br /&gt;
  Serial.println(score);&lt;br /&gt;
  */&lt;br /&gt;
  return score;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int show_score(){&lt;br /&gt;
  lcd.clear();&lt;br /&gt;
  lcd.setCursor(0,0);&lt;br /&gt;
  lcd.print(&amp;quot;   Score : &amp;quot;);&lt;br /&gt;
  lcd.print(score);&lt;br /&gt;
  lcd.setCursor(0,1);&lt;br /&gt;
  lcd.print(&amp;quot;  Bien joue !!&amp;quot;); // Je ne sais pas comment mettre des caractères speciaux (hors ASCII 128)&lt;br /&gt;
  delay(5000);&lt;br /&gt;
  lcd.clear();&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ----- MUSIQUE ----- // &lt;br /&gt;
&lt;br /&gt;
int melody[] = {&lt;br /&gt;
&lt;br /&gt;
  //Based on the arrangement at https://www.flutetunes.com/tunes.php?id=169&lt;br /&gt;
  &lt;br /&gt;
  NOTE_AS4,-2,  NOTE_F4,8,  NOTE_F4,8,  NOTE_AS4,8,//1&lt;br /&gt;
  NOTE_GS4,16,  NOTE_FS4,16,  NOTE_GS4,-2,&lt;br /&gt;
  NOTE_AS4,-2,  NOTE_FS4,8,  NOTE_FS4,8,  NOTE_AS4,8,&lt;br /&gt;
  NOTE_A4,16,  NOTE_G4,16,  NOTE_A4,-2,&lt;br /&gt;
  REST,1, &lt;br /&gt;
&lt;br /&gt;
  NOTE_AS4,4,  NOTE_F4,-4,  NOTE_AS4,8,  NOTE_AS4,16,  NOTE_C5,16, NOTE_D5,16, NOTE_DS5,16,//7&lt;br /&gt;
  NOTE_F5,2,  NOTE_F5,8,  NOTE_F5,8,  NOTE_F5,8,  NOTE_FS5,16, NOTE_GS5,16,&lt;br /&gt;
  NOTE_AS5,-2,  NOTE_AS5,8,  NOTE_AS5,8,  NOTE_GS5,8,  NOTE_FS5,16,&lt;br /&gt;
  NOTE_GS5,-8,  NOTE_FS5,16,  NOTE_F5,2,  NOTE_F5,4, &lt;br /&gt;
&lt;br /&gt;
  NOTE_DS5,-8, NOTE_F5,16, NOTE_FS5,2, NOTE_F5,8, NOTE_DS5,8, //11&lt;br /&gt;
  NOTE_CS5,-8, NOTE_DS5,16, NOTE_F5,2, NOTE_DS5,8, NOTE_CS5,8,&lt;br /&gt;
  NOTE_C5,-8, NOTE_D5,16, NOTE_E5,2, NOTE_G5,8, &lt;br /&gt;
  NOTE_F5,16, NOTE_F4,16, NOTE_F4,16, NOTE_F4,16,NOTE_F4,16,NOTE_F4,16,NOTE_F4,16,NOTE_F4,16,NOTE_F4,8, NOTE_F4,16,NOTE_F4,8,&lt;br /&gt;
&lt;br /&gt;
  NOTE_AS4,4,  NOTE_F4,-4,  NOTE_AS4,8,  NOTE_AS4,16,  NOTE_C5,16, NOTE_D5,16, NOTE_DS5,16,//15&lt;br /&gt;
  NOTE_F5,2,  NOTE_F5,8,  NOTE_F5,8,  NOTE_F5,8,  NOTE_FS5,16, NOTE_GS5,16,&lt;br /&gt;
  NOTE_AS5,-2, NOTE_CS6,4,&lt;br /&gt;
  NOTE_C6,4, NOTE_A5,2, NOTE_F5,4,&lt;br /&gt;
  NOTE_FS5,-2, NOTE_AS5,4,&lt;br /&gt;
  NOTE_A5,4, NOTE_F5,2, NOTE_F5,4,&lt;br /&gt;
&lt;br /&gt;
  NOTE_FS5,-2, NOTE_AS5,4,&lt;br /&gt;
  NOTE_A5,4, NOTE_F5,2, NOTE_D5,4,&lt;br /&gt;
  NOTE_DS5,-2, NOTE_FS5,4,&lt;br /&gt;
  NOTE_F5,4, NOTE_CS5,2, NOTE_AS4,4,&lt;br /&gt;
  NOTE_C5,-8, NOTE_D5,16, NOTE_E5,2, NOTE_G5,8, &lt;br /&gt;
  NOTE_F5,16, NOTE_F4,16, NOTE_F4,16, NOTE_F4,16,NOTE_F4,16,NOTE_F4,16,NOTE_F4,16,NOTE_F4,16,NOTE_F4,8, NOTE_F4,16,NOTE_F4,8&lt;br /&gt;
  &lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void musique(){&lt;br /&gt;
  int tempo = 60;&lt;br /&gt;
  // sizeof gives the number of bytes, each int value is composed of two bytes (16 bits)&lt;br /&gt;
  // there are two values per note (pitch and duration), so for each note there are four bytes&lt;br /&gt;
  int notes = sizeof(melody) / sizeof(melody[0]) / 2;&lt;br /&gt;
  &lt;br /&gt;
  // this calculates the duration of a whole note in ms&lt;br /&gt;
  int wholenote = (60000 * 2) / tempo;&lt;br /&gt;
  &lt;br /&gt;
  int divider = 0, noteDuration = 0;&lt;br /&gt;
  // iterate over the notes of the melody. &lt;br /&gt;
  // Remember, the array is twice the number of notes (notes + durations)&lt;br /&gt;
  for (int thisNote = 0; thisNote &amp;lt; notes * 2; thisNote = thisNote + 2) {&lt;br /&gt;
&lt;br /&gt;
    // calculates the duration of each note&lt;br /&gt;
    divider = melody[thisNote + 1];&lt;br /&gt;
    if (divider &amp;gt; 0) {&lt;br /&gt;
      // regular note, just proceed&lt;br /&gt;
      noteDuration = (wholenote) / divider;&lt;br /&gt;
    } else if (divider &amp;lt; 0) {&lt;br /&gt;
      // dotted notes are represented with negative durations!!&lt;br /&gt;
      noteDuration = (wholenote) / abs(divider);&lt;br /&gt;
      noteDuration *= 1.5; // increases the duration in half for dotted notes&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // we only play the note for 90% of the duration, leaving 10% as a pause&lt;br /&gt;
    tone(PIN_BUZZER, melody[thisNote], noteDuration*0.9);&lt;br /&gt;
&lt;br /&gt;
    // Wait for the specief duration before playing the next note.&lt;br /&gt;
    delay(noteDuration);&lt;br /&gt;
    &lt;br /&gt;
    // stop the waveform generation before the next note.&lt;br /&gt;
    noTone(PIN_BUZZER);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==étapes de fabrication==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===étape 1: câbler et souder===&lt;br /&gt;
câbler les fils entre les leds, la carte arduino et le bouton puis souder les fils si nécessaire et enfin téléverser le programme dans la carte si nécessaire.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Cablage.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
===étape 2: le support===&lt;br /&gt;
réaliser le prototype en carton &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Tonk1.jpg|200px]]&lt;br /&gt;
[[Fichier:Tonk2.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
===étape 3 : support en bois===&lt;br /&gt;
&lt;br /&gt;
On réalise en suite le support en bois.&lt;br /&gt;
&lt;br /&gt;
Grâce au prototype en carton on dessine le support en bois puis on reporte les mesures sur des plaques en bois pour ensuite les découper.&lt;br /&gt;
&lt;br /&gt;
Une fois les différentes parties du support faites on les assemble.&lt;br /&gt;
&lt;br /&gt;
===troubleshouting===&lt;br /&gt;
quelles sont difficultés, les problèmes, quelles sont les solutions, les trucs et astuces pour que ça marche ?&lt;br /&gt;
&lt;br /&gt;
1er problème : le programme ne marchait pas car la LED était montée à l'envers&lt;br /&gt;
&lt;br /&gt;
On a mit la led ans le bon sens puis on a adapté le programme.&lt;br /&gt;
&lt;br /&gt;
2ème problème : adapter la taille du support qui était d'abord trop grand&lt;br /&gt;
&lt;br /&gt;
On a utilisé le support en carton pour créer un support en bois plus petit.&lt;br /&gt;
&lt;br /&gt;
==Sources et documentation complémentaire==&lt;br /&gt;
&lt;br /&gt;
==ne pas modifier sous cette ligne==&lt;br /&gt;
[[Catégorie:Enib2024]]&lt;/div&gt;</summary>
		<author><name>Arnaud...</name></author>	</entry>

	<entry>
		<id>http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2024_:_CatchTheJackpot&amp;diff=26206</id>
		<title>ENIB 2024 : CatchTheJackpot</title>
		<link rel="alternate" type="text/html" href="http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2024_:_CatchTheJackpot&amp;diff=26206"/>
				<updated>2024-01-31T10:42:03Z</updated>
		
		<summary type="html">&lt;p&gt;Arnaud... : /* troubleshouting */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==description==&lt;br /&gt;
&lt;br /&gt;
Ce projet fonction grâce à une carte Arduino, des LEDs et un bouton. &lt;br /&gt;
&lt;br /&gt;
Une lumière traverse le ruban de gauche à droite et lorsqu'elle est au milieu, il faut appuyer sur le bouton au bon moment pour gagner.&lt;br /&gt;
&lt;br /&gt;
==réalisé par :==&lt;br /&gt;
 -Arnaud Genty&lt;br /&gt;
 -Maxime Bintein&lt;br /&gt;
 -Tristan Le Coz&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
éventuelle vidéo&lt;br /&gt;
&lt;br /&gt;
==Liste des composants==&lt;br /&gt;
&lt;br /&gt;
* Bouton poussoir style Arcade&lt;br /&gt;
* Arduino nano&lt;br /&gt;
* 2 rubans de LED adressable (85 LEDs pour être exacte) &lt;br /&gt;
* Carton&lt;br /&gt;
* Bois&lt;br /&gt;
* Câbles mini-USB&lt;br /&gt;
* Câbles&lt;br /&gt;
* écran LCD&lt;br /&gt;
* Breadboard&lt;br /&gt;
* 2 résistances de 500kΩ&lt;br /&gt;
&lt;br /&gt;
==Outils==&lt;br /&gt;
&lt;br /&gt;
* Cutter&lt;br /&gt;
* Marqueur noir&lt;br /&gt;
* Pistolet à colle&lt;br /&gt;
* Scotch&lt;br /&gt;
* Fer à souder&lt;br /&gt;
* Scie à bois&lt;br /&gt;
* Perceuse&lt;br /&gt;
* Bibliothèque Arduino FastLed &lt;br /&gt;
  https://fastled.io/&lt;br /&gt;
&lt;br /&gt;
==fichiers à joindre==&lt;br /&gt;
code, ficher d'impression 3D, de découpe laser ou vinyle, ...&lt;br /&gt;
&lt;br /&gt;
==Code :==&lt;br /&gt;
&lt;br /&gt;
//Programme fait sur carte STM8266 / WEMOS D1 mini&lt;br /&gt;
#include &amp;quot;pitches.h&amp;quot;&lt;br /&gt;
#include &amp;quot;FastLED.h&amp;quot;                    //bibliothèque pour controler le ruban led&lt;br /&gt;
#include &amp;lt;Wire.h&amp;gt;                  //bibliothèque écran&lt;br /&gt;
#include &amp;lt;LiquidCrystal_I2C.h&amp;gt;     //bibliothèque écran&lt;br /&gt;
#define REST 0&lt;br /&gt;
#define NUM_LEDS 86&lt;br /&gt;
#define NUM_OF_LEDS_BY_LEVEL 17         // nombre de leds par niveau&lt;br /&gt;
#define NUM_OF_LEVELS 5                  // nombre de niveaux&lt;br /&gt;
#define PIN_BTN D3                       // Entree du bouton&lt;br /&gt;
#define PIN_LEDS D4                      // Sortie du ruban led&lt;br /&gt;
#define PIN_BUZZER D8                    // Signal de sortie buzzer&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// -------- INIT VARIABLES --------&lt;br /&gt;
LiquidCrystal_I2C lcd(0x27, 16, 2);&lt;br /&gt;
CRGB leds[NUM_LEDS]; //Création d'une liste avec chaque led&lt;br /&gt;
CRGB randomcolor  = CHSV(random(192), 255, 255);&lt;br /&gt;
int level = 0;        // niveau auquel le joueur est&lt;br /&gt;
int delay_level = 30; // délai qui permet de controler la vitesse de déplacement de la led&lt;br /&gt;
auto color = CRGB::Blue; // couleur de la led qui se déplace&lt;br /&gt;
int score = 0;           // score du joueur&lt;br /&gt;
const double coef[] = {1,1.5,2,2.5,3}; // coefficient multiplicateur de point par niveau&lt;br /&gt;
int last_point[NUM_OF_LEVELS];     // sauvegarde de la derniere led allumée pour la rallumer après flash()&lt;br /&gt;
bool game_in_progress = false;&lt;br /&gt;
int last_point_visu = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// -------- INIT FONCTIONS --------&lt;br /&gt;
&lt;br /&gt;
int move();            // déplacement de la led&lt;br /&gt;
void level_up();    // passage de niveau&lt;br /&gt;
void waiting_start_game(); //affichage d'attente de début du jeu&lt;br /&gt;
void flash();       // animation de victoire d'un niveau&lt;br /&gt;
&lt;br /&gt;
// -------- PROGRAMME --------&lt;br /&gt;
void setup() {&lt;br /&gt;
  FastLED.addLeds&amp;lt;NEOPIXEL, D4&amp;gt;(leds, NUM_LEDS);     // setup du ruban de led sur la sortie PIN_LEDS =&amp;gt; 2&lt;br /&gt;
  pinMode(PIN_BTN, INPUT);                          // setup du bouton dur l'entrée PIN_BTN =&amp;gt; 3&lt;br /&gt;
  FastLED.setBrightness(50);                    // setup de la luminosité&lt;br /&gt;
  Serial.begin(9600);                               // setup moniteur série pour debug &lt;br /&gt;
  int last_point[NUM_OF_LEVELS];&lt;br /&gt;
  pinMode(PIN_BUZZER, OUTPUT);&lt;br /&gt;
&lt;br /&gt;
  // -------- ECRAN --------&lt;br /&gt;
  lcd.init();                        // Initialize I2C LCD module&lt;br /&gt;
  lcd.backlight();                   // Turn backlight ON&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  waiting_start_game();&lt;br /&gt;
    lcd.setCursor(0,0);&lt;br /&gt;
    lcd.print(&amp;quot;    Cliquer &amp;quot;);&lt;br /&gt;
    lcd.setCursor(0,1);&lt;br /&gt;
    lcd.print(&amp;quot; pour commencer&amp;quot;);&lt;br /&gt;
    FastLED.clear();&lt;br /&gt;
  if (digitalRead(PIN_BTN)==LOW){&lt;br /&gt;
    musique();&lt;br /&gt;
    game_in_progress = true;&lt;br /&gt;
    lcd.clear();&lt;br /&gt;
    lcd.setCursor(0,0);&lt;br /&gt;
    lcd.print(&amp;quot;Partie en cours !&amp;quot;);&lt;br /&gt;
    lcd.setCursor(0,1);&lt;br /&gt;
    lcd.print(&amp;quot;XoXoXoXoXoXoXoXo&amp;quot;);&lt;br /&gt;
    FastLED.clear();&lt;br /&gt;
    delay(400);&lt;br /&gt;
    while(game_in_progress){&lt;br /&gt;
      move();&lt;br /&gt;
      if (digitalRead(PIN_BTN)==LOW &amp;amp;&amp;amp; game_in_progress==true){&lt;br /&gt;
        level_up();&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
int move(){&lt;br /&gt;
  // Permet de faire bouger la LED de gauche à droite&lt;br /&gt;
  for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++){&lt;br /&gt;
    // -------- DEBUGGING -------- // &lt;br /&gt;
    /*&lt;br /&gt;
    Serial.print(&amp;quot;val de la led: &amp;quot;);&lt;br /&gt;
    Serial.print(i);&lt;br /&gt;
    Serial.print(&amp;quot;\n&amp;quot;);&lt;br /&gt;
    */&lt;br /&gt;
    if (digitalRead(PIN_BTN)==LOW){     //Stock des scores LEDs 1 -&amp;gt; 9 -&amp;gt; 1&lt;br /&gt;
      int center = abs(i - (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL / 2));&lt;br /&gt;
      if (center &amp;lt;= NUM_OF_LEDS_BY_LEVEL/2) {&lt;br /&gt;
        last_point[level] = NUM_OF_LEDS_BY_LEVEL/2 - center + 1;  // Les points augmentent jusqu'à 9&lt;br /&gt;
      } else {&lt;br /&gt;
        last_point[level] = 0;  // À partir de la position 9, les points diminuent&lt;br /&gt;
      }&lt;br /&gt;
    //   if(i&amp;lt;(1/2*NUM_OF_LEDS_BY_LEVEL)){&lt;br /&gt;
    //     last_point[level] = i;&lt;br /&gt;
    //   }&lt;br /&gt;
    //   else{&lt;br /&gt;
    //     for(int degr = 1; degr&amp;lt;NUM_OF_LEDS_BY_LEVEL; degr++)&lt;br /&gt;
    //     last_point[level] = (i - degr);&lt;br /&gt;
      &lt;br /&gt;
    // }&lt;br /&gt;
      int last_point_visu = i-1;&lt;br /&gt;
      return i-1;&lt;br /&gt;
      // -------- DEBUGGING -------- //&lt;br /&gt;
      /*&lt;br /&gt;
      Serial.print(&amp;quot;last_point_visu&amp;quot;);&lt;br /&gt;
      Serial.print(last_point_visu);&lt;br /&gt;
       &lt;br /&gt;
      for(int z=0; z&amp;lt;NUM_OF_LEVELS; z++){&lt;br /&gt;
        Serial.print(last_point[z]);&lt;br /&gt;
        Serial.print(&amp;quot;\n&amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
      */&lt;br /&gt;
      &lt;br /&gt;
      &lt;br /&gt;
    }&lt;br /&gt;
    //Eteins les LEDs derrière la LED mouvante&lt;br /&gt;
    leds[i - 1] = CRGB::Black;&lt;br /&gt;
    delay(3);&lt;br /&gt;
    leds[level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2] = CRGB::Yellow;&lt;br /&gt;
    leds[i] = color;&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(delay_level);&lt;br /&gt;
  }&lt;br /&gt;
  leds[NUM_OF_LEDS_BY_LEVEL * level + 20] = CRGB::Black;&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
  delay(delay_level);&lt;br /&gt;
  for (int i = NUM_OF_LEDS_BY_LEVEL * level +  NUM_OF_LEDS_BY_LEVEL - 1; i &amp;gt;= NUM_OF_LEDS_BY_LEVEL * level ; i--)&lt;br /&gt;
  {&lt;br /&gt;
    // -------- DEBUGGING -------- //&lt;br /&gt;
    /*&lt;br /&gt;
    Serial.print(&amp;quot;val de la led: &amp;quot;);&lt;br /&gt;
    Serial.print(i);&lt;br /&gt;
    Serial.print(&amp;quot;\n&amp;quot;);&lt;br /&gt;
    */&lt;br /&gt;
    if (digitalRead(PIN_BTN)==LOW){           //Stock des scores LEDs 1 -&amp;gt; 9 -&amp;gt; 1&lt;br /&gt;
      int center = abs(i - (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL / 2));&lt;br /&gt;
      if (center &amp;lt;= NUM_OF_LEDS_BY_LEVEL/2) {&lt;br /&gt;
        last_point[level] = NUM_OF_LEDS_BY_LEVEL/2 - center + 1;  // Les points augmentent jusqu'à 9&lt;br /&gt;
      } else {&lt;br /&gt;
        last_point[level] = 0;  // À partir de la position 9, les points diminuent&lt;br /&gt;
      }&lt;br /&gt;
      // if(i&amp;lt;(1/2*NUM_OF_LEDS_BY_LEVEL)){&lt;br /&gt;
      //   last_point[level] = i;&lt;br /&gt;
      // }&lt;br /&gt;
      // else{&lt;br /&gt;
      //   for(int degr = 1; degr&amp;lt;NUM_OF_LEDS_BY_LEVEL; degr++)&lt;br /&gt;
      //   last_point[level] = (i - degr);&lt;br /&gt;
      //   }&lt;br /&gt;
    &lt;br /&gt;
      int last_point_visu = i+1;&lt;br /&gt;
      return i+1;&lt;br /&gt;
      &lt;br /&gt;
      // -------- DEBUGGING -------- //&lt;br /&gt;
      /*&lt;br /&gt;
      Serial.print(&amp;quot;last_point_visu&amp;quot;);&lt;br /&gt;
      Serial.print(last_point_visu);&lt;br /&gt;
      &lt;br /&gt;
      for(int z=0; z&amp;lt;NUM_OF_LEVELS; z++){&lt;br /&gt;
        Serial.print(last_point[z]);&lt;br /&gt;
        Serial.print(&amp;quot;\n&amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
      */&lt;br /&gt;
      &lt;br /&gt;
    }&lt;br /&gt;
    //Eteins les LEDs derrière la LED mouvante&lt;br /&gt;
    leds[i + 1] = CRGB::Black;&lt;br /&gt;
    delay(3);&lt;br /&gt;
    leds[level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2] = CRGB::Yellow;&lt;br /&gt;
    leds[i] = color;&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(delay_level);&lt;br /&gt;
  }&lt;br /&gt;
    leds[NUM_OF_LEDS_BY_LEVEL] = CRGB::Black;&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(delay_level);&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void flash()   // fonction de décoration qui fait clignoter les leds en blanc avant le passage de niveau&lt;br /&gt;
{&lt;br /&gt;
  for (int cpt = 0; cpt &amp;lt; 4; cpt++) &lt;br /&gt;
  {&lt;br /&gt;
    for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++)  // On met toute les leds du niveau en blanc&lt;br /&gt;
    {&lt;br /&gt;
      leds[i] = CRGB::Green;&lt;br /&gt;
    }&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(100);&lt;br /&gt;
    for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++) // On éteint toutes les leds du niveau&lt;br /&gt;
    {&lt;br /&gt;
      leds[i] = CRGB::Black;&lt;br /&gt;
    }&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(100);&lt;br /&gt;
  }&lt;br /&gt;
  leds[last_point_visu] = CRGB::Purple;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void level_up()   // changement de niveau&lt;br /&gt;
{&lt;br /&gt;
  flash();  // animation&lt;br /&gt;
  level++;  // incrémentation de la variable niveau&lt;br /&gt;
  delay_level -= 4; // le jeu devient de plus en plus rapide&lt;br /&gt;
&lt;br /&gt;
  if (level &amp;gt;= NUM_OF_LEVELS)   // fin du jeu&lt;br /&gt;
  {&lt;br /&gt;
    compute_score(); //Calcul le score&lt;br /&gt;
    show_score(); //Affiche le score sur un écran à crystaux liquides&lt;br /&gt;
&lt;br /&gt;
    //Remise des valeurs pas défaut&lt;br /&gt;
    level = 0;      &lt;br /&gt;
    score = 0;&lt;br /&gt;
    delay_level = 30;&lt;br /&gt;
    game_in_progress = false;&lt;br /&gt;
    for(int w=0; w&amp;lt;NUM_OF_LEVELS;w++){&lt;br /&gt;
      last_point[w] = 0;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void waiting_start_game(){&lt;br /&gt;
  // Allume toutes les LEDs en bleu avant de faire commencer la partie&lt;br /&gt;
  for (int w = 0; w &amp;lt; NUM_LEDS; w++){&lt;br /&gt;
    leds[w] = CRGB::Blue;&lt;br /&gt;
  }&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int compute_score(){&lt;br /&gt;
  // Récupere les élements du tableau last_point et les additionnes&lt;br /&gt;
  for (int i = 0; i&amp;lt;NUM_OF_LEVELS; i++){&lt;br /&gt;
    if (i &amp;gt; 2) {&lt;br /&gt;
      // Pour les niveaux 4 et 5, le score est diviser par deux&lt;br /&gt;
      score += last_point[i] / 2;&lt;br /&gt;
    } else {&lt;br /&gt;
      score += last_point[i];&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  // -------- DEBUGGING -------- //&lt;br /&gt;
  /*&lt;br /&gt;
  Serial.print(&amp;quot;Score : &amp;quot;);&lt;br /&gt;
  Serial.println(score);&lt;br /&gt;
  */&lt;br /&gt;
  return score;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int show_score(){&lt;br /&gt;
  lcd.clear();&lt;br /&gt;
  lcd.setCursor(0,0);&lt;br /&gt;
  lcd.print(&amp;quot;   Score : &amp;quot;);&lt;br /&gt;
  lcd.print(score);&lt;br /&gt;
  lcd.setCursor(0,1);&lt;br /&gt;
  lcd.print(&amp;quot;  Bien joue !!&amp;quot;); // Je ne sais pas comment mettre des caractères speciaux (hors ASCII 128)&lt;br /&gt;
  delay(5000);&lt;br /&gt;
  lcd.clear();&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ----- MUSIQUE ----- // &lt;br /&gt;
&lt;br /&gt;
int melody[] = {&lt;br /&gt;
&lt;br /&gt;
  //Based on the arrangement at https://www.flutetunes.com/tunes.php?id=169&lt;br /&gt;
  &lt;br /&gt;
  NOTE_AS4,-2,  NOTE_F4,8,  NOTE_F4,8,  NOTE_AS4,8,//1&lt;br /&gt;
  NOTE_GS4,16,  NOTE_FS4,16,  NOTE_GS4,-2,&lt;br /&gt;
  NOTE_AS4,-2,  NOTE_FS4,8,  NOTE_FS4,8,  NOTE_AS4,8,&lt;br /&gt;
  NOTE_A4,16,  NOTE_G4,16,  NOTE_A4,-2,&lt;br /&gt;
  REST,1, &lt;br /&gt;
&lt;br /&gt;
  NOTE_AS4,4,  NOTE_F4,-4,  NOTE_AS4,8,  NOTE_AS4,16,  NOTE_C5,16, NOTE_D5,16, NOTE_DS5,16,//7&lt;br /&gt;
  NOTE_F5,2,  NOTE_F5,8,  NOTE_F5,8,  NOTE_F5,8,  NOTE_FS5,16, NOTE_GS5,16,&lt;br /&gt;
  NOTE_AS5,-2,  NOTE_AS5,8,  NOTE_AS5,8,  NOTE_GS5,8,  NOTE_FS5,16,&lt;br /&gt;
  NOTE_GS5,-8,  NOTE_FS5,16,  NOTE_F5,2,  NOTE_F5,4, &lt;br /&gt;
&lt;br /&gt;
  NOTE_DS5,-8, NOTE_F5,16, NOTE_FS5,2, NOTE_F5,8, NOTE_DS5,8, //11&lt;br /&gt;
  NOTE_CS5,-8, NOTE_DS5,16, NOTE_F5,2, NOTE_DS5,8, NOTE_CS5,8,&lt;br /&gt;
  NOTE_C5,-8, NOTE_D5,16, NOTE_E5,2, NOTE_G5,8, &lt;br /&gt;
  NOTE_F5,16, NOTE_F4,16, NOTE_F4,16, NOTE_F4,16,NOTE_F4,16,NOTE_F4,16,NOTE_F4,16,NOTE_F4,16,NOTE_F4,8, NOTE_F4,16,NOTE_F4,8,&lt;br /&gt;
&lt;br /&gt;
  NOTE_AS4,4,  NOTE_F4,-4,  NOTE_AS4,8,  NOTE_AS4,16,  NOTE_C5,16, NOTE_D5,16, NOTE_DS5,16,//15&lt;br /&gt;
  NOTE_F5,2,  NOTE_F5,8,  NOTE_F5,8,  NOTE_F5,8,  NOTE_FS5,16, NOTE_GS5,16,&lt;br /&gt;
  NOTE_AS5,-2, NOTE_CS6,4,&lt;br /&gt;
  NOTE_C6,4, NOTE_A5,2, NOTE_F5,4,&lt;br /&gt;
  NOTE_FS5,-2, NOTE_AS5,4,&lt;br /&gt;
  NOTE_A5,4, NOTE_F5,2, NOTE_F5,4,&lt;br /&gt;
&lt;br /&gt;
  NOTE_FS5,-2, NOTE_AS5,4,&lt;br /&gt;
  NOTE_A5,4, NOTE_F5,2, NOTE_D5,4,&lt;br /&gt;
  NOTE_DS5,-2, NOTE_FS5,4,&lt;br /&gt;
  NOTE_F5,4, NOTE_CS5,2, NOTE_AS4,4,&lt;br /&gt;
  NOTE_C5,-8, NOTE_D5,16, NOTE_E5,2, NOTE_G5,8, &lt;br /&gt;
  NOTE_F5,16, NOTE_F4,16, NOTE_F4,16, NOTE_F4,16,NOTE_F4,16,NOTE_F4,16,NOTE_F4,16,NOTE_F4,16,NOTE_F4,8, NOTE_F4,16,NOTE_F4,8&lt;br /&gt;
  &lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void musique(){&lt;br /&gt;
  int tempo = 60;&lt;br /&gt;
  // sizeof gives the number of bytes, each int value is composed of two bytes (16 bits)&lt;br /&gt;
  // there are two values per note (pitch and duration), so for each note there are four bytes&lt;br /&gt;
  int notes = sizeof(melody) / sizeof(melody[0]) / 2;&lt;br /&gt;
  &lt;br /&gt;
  // this calculates the duration of a whole note in ms&lt;br /&gt;
  int wholenote = (60000 * 2) / tempo;&lt;br /&gt;
  &lt;br /&gt;
  int divider = 0, noteDuration = 0;&lt;br /&gt;
  // iterate over the notes of the melody. &lt;br /&gt;
  // Remember, the array is twice the number of notes (notes + durations)&lt;br /&gt;
  for (int thisNote = 0; thisNote &amp;lt; notes * 2; thisNote = thisNote + 2) {&lt;br /&gt;
&lt;br /&gt;
    // calculates the duration of each note&lt;br /&gt;
    divider = melody[thisNote + 1];&lt;br /&gt;
    if (divider &amp;gt; 0) {&lt;br /&gt;
      // regular note, just proceed&lt;br /&gt;
      noteDuration = (wholenote) / divider;&lt;br /&gt;
    } else if (divider &amp;lt; 0) {&lt;br /&gt;
      // dotted notes are represented with negative durations!!&lt;br /&gt;
      noteDuration = (wholenote) / abs(divider);&lt;br /&gt;
      noteDuration *= 1.5; // increases the duration in half for dotted notes&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // we only play the note for 90% of the duration, leaving 10% as a pause&lt;br /&gt;
    tone(PIN_BUZZER, melody[thisNote], noteDuration*0.9);&lt;br /&gt;
&lt;br /&gt;
    // Wait for the specief duration before playing the next note.&lt;br /&gt;
    delay(noteDuration);&lt;br /&gt;
    &lt;br /&gt;
    // stop the waveform generation before the next note.&lt;br /&gt;
    noTone(PIN_BUZZER);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==étapes de fabrication==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===étape 1: câbler et souder===&lt;br /&gt;
câbler les fils entre les leds, la carte arduino et le bouton puis souder les fils si nécessaire et enfin téléverser le programme dans la carte si nécessaire.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Cablage.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
===étape 2: le support===&lt;br /&gt;
réaliser le prototype en carton &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Tonk1.jpg|200px]]&lt;br /&gt;
[[Fichier:Tonk2.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
===étape 3 : support en bois===&lt;br /&gt;
&lt;br /&gt;
On réalise en suite le support en bois.&lt;br /&gt;
&lt;br /&gt;
Grâce au prototype en carton on dessine le support en bois puis on reporte les mesures sur des plaques en bois pour ensuite les découper.&lt;br /&gt;
&lt;br /&gt;
Une fois les différentes parties du support faites on les assemble.&lt;br /&gt;
&lt;br /&gt;
===troubleshouting===&lt;br /&gt;
quelles sont difficultés, les problèmes, quelles sont les solutions, les trucs et astuces pour que ça marche ?&lt;br /&gt;
&lt;br /&gt;
1er problème : le programme ne marchait pas car la LED était montée à l'envers&lt;br /&gt;
&lt;br /&gt;
On a mit la led ans le bon sens puis on a adapté le programme.&lt;br /&gt;
&lt;br /&gt;
2ème problème : adapter la taille du support qui était d'abord trop grand&lt;br /&gt;
&lt;br /&gt;
On a utilisé le support en carton pour créer un support en bois plus petit.&lt;br /&gt;
&lt;br /&gt;
==Sources et documentation complémentaire==&lt;br /&gt;
&lt;br /&gt;
==ne pas modifier sous cette ligne==&lt;br /&gt;
[[Catégorie:Enib2024]]&lt;/div&gt;</summary>
		<author><name>Arnaud...</name></author>	</entry>

	<entry>
		<id>http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2024_:_CatchTheJackpot&amp;diff=26202</id>
		<title>ENIB 2024 : CatchTheJackpot</title>
		<link rel="alternate" type="text/html" href="http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2024_:_CatchTheJackpot&amp;diff=26202"/>
				<updated>2024-01-31T10:40:53Z</updated>
		
		<summary type="html">&lt;p&gt;Arnaud... : /* étape ... */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==description==&lt;br /&gt;
&lt;br /&gt;
Ce projet fonction grâce à une carte Arduino, des LEDs et un bouton. &lt;br /&gt;
&lt;br /&gt;
Une lumière traverse le ruban de gauche à droite et lorsqu'elle est au milieu, il faut appuyer sur le bouton au bon moment pour gagner.&lt;br /&gt;
&lt;br /&gt;
==réalisé par :==&lt;br /&gt;
 -Arnaud Genty&lt;br /&gt;
 -Maxime Bintein&lt;br /&gt;
 -Tristan Le Coz&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
éventuelle vidéo&lt;br /&gt;
&lt;br /&gt;
==Liste des composants==&lt;br /&gt;
&lt;br /&gt;
* Bouton poussoir style Arcade&lt;br /&gt;
* Arduino nano&lt;br /&gt;
* 2 rubans de LED adressable (85 LEDs pour être exacte) &lt;br /&gt;
* Carton&lt;br /&gt;
* Bois&lt;br /&gt;
* Câbles mini-USB&lt;br /&gt;
* Câbles&lt;br /&gt;
* écran LCD&lt;br /&gt;
* Breadboard&lt;br /&gt;
* 2 résistances de 500kΩ&lt;br /&gt;
&lt;br /&gt;
==Outils==&lt;br /&gt;
&lt;br /&gt;
* Cutter&lt;br /&gt;
* Marqueur noir&lt;br /&gt;
* Pistolet à colle&lt;br /&gt;
* Scotch&lt;br /&gt;
* Fer à souder&lt;br /&gt;
* Scie à bois&lt;br /&gt;
* Perceuse&lt;br /&gt;
* Bibliothèque Arduino FastLed &lt;br /&gt;
  https://fastled.io/&lt;br /&gt;
&lt;br /&gt;
==fichiers à joindre==&lt;br /&gt;
code, ficher d'impression 3D, de découpe laser ou vinyle, ...&lt;br /&gt;
&lt;br /&gt;
==Code :==&lt;br /&gt;
&lt;br /&gt;
//Programme fait sur carte STM8266 / WEMOS D1 mini&lt;br /&gt;
#include &amp;quot;pitches.h&amp;quot;&lt;br /&gt;
#include &amp;quot;FastLED.h&amp;quot;                    //bibliothèque pour controler le ruban led&lt;br /&gt;
#include &amp;lt;Wire.h&amp;gt;                  //bibliothèque écran&lt;br /&gt;
#include &amp;lt;LiquidCrystal_I2C.h&amp;gt;     //bibliothèque écran&lt;br /&gt;
#define REST 0&lt;br /&gt;
#define NUM_LEDS 86&lt;br /&gt;
#define NUM_OF_LEDS_BY_LEVEL 17         // nombre de leds par niveau&lt;br /&gt;
#define NUM_OF_LEVELS 5                  // nombre de niveaux&lt;br /&gt;
#define PIN_BTN D3                       // Entree du bouton&lt;br /&gt;
#define PIN_LEDS D4                      // Sortie du ruban led&lt;br /&gt;
#define PIN_BUZZER D8                    // Signal de sortie buzzer&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// -------- INIT VARIABLES --------&lt;br /&gt;
LiquidCrystal_I2C lcd(0x27, 16, 2);&lt;br /&gt;
CRGB leds[NUM_LEDS]; //Création d'une liste avec chaque led&lt;br /&gt;
CRGB randomcolor  = CHSV(random(192), 255, 255);&lt;br /&gt;
int level = 0;        // niveau auquel le joueur est&lt;br /&gt;
int delay_level = 30; // délai qui permet de controler la vitesse de déplacement de la led&lt;br /&gt;
auto color = CRGB::Blue; // couleur de la led qui se déplace&lt;br /&gt;
int score = 0;           // score du joueur&lt;br /&gt;
const double coef[] = {1,1.5,2,2.5,3}; // coefficient multiplicateur de point par niveau&lt;br /&gt;
int last_point[NUM_OF_LEVELS];     // sauvegarde de la derniere led allumée pour la rallumer après flash()&lt;br /&gt;
bool game_in_progress = false;&lt;br /&gt;
int last_point_visu = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// -------- INIT FONCTIONS --------&lt;br /&gt;
&lt;br /&gt;
int move();            // déplacement de la led&lt;br /&gt;
void level_up();    // passage de niveau&lt;br /&gt;
void waiting_start_game(); //affichage d'attente de début du jeu&lt;br /&gt;
void flash();       // animation de victoire d'un niveau&lt;br /&gt;
&lt;br /&gt;
// -------- PROGRAMME --------&lt;br /&gt;
void setup() {&lt;br /&gt;
  FastLED.addLeds&amp;lt;NEOPIXEL, D4&amp;gt;(leds, NUM_LEDS);     // setup du ruban de led sur la sortie PIN_LEDS =&amp;gt; 2&lt;br /&gt;
  pinMode(PIN_BTN, INPUT);                          // setup du bouton dur l'entrée PIN_BTN =&amp;gt; 3&lt;br /&gt;
  FastLED.setBrightness(50);                    // setup de la luminosité&lt;br /&gt;
  Serial.begin(9600);                               // setup moniteur série pour debug &lt;br /&gt;
  int last_point[NUM_OF_LEVELS];&lt;br /&gt;
  pinMode(PIN_BUZZER, OUTPUT);&lt;br /&gt;
&lt;br /&gt;
  // -------- ECRAN --------&lt;br /&gt;
  lcd.init();                        // Initialize I2C LCD module&lt;br /&gt;
  lcd.backlight();                   // Turn backlight ON&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  waiting_start_game();&lt;br /&gt;
    lcd.setCursor(0,0);&lt;br /&gt;
    lcd.print(&amp;quot;    Cliquer &amp;quot;);&lt;br /&gt;
    lcd.setCursor(0,1);&lt;br /&gt;
    lcd.print(&amp;quot; pour commencer&amp;quot;);&lt;br /&gt;
    FastLED.clear();&lt;br /&gt;
  if (digitalRead(PIN_BTN)==LOW){&lt;br /&gt;
    musique();&lt;br /&gt;
    game_in_progress = true;&lt;br /&gt;
    lcd.clear();&lt;br /&gt;
    lcd.setCursor(0,0);&lt;br /&gt;
    lcd.print(&amp;quot;Partie en cours !&amp;quot;);&lt;br /&gt;
    lcd.setCursor(0,1);&lt;br /&gt;
    lcd.print(&amp;quot;XoXoXoXoXoXoXoXo&amp;quot;);&lt;br /&gt;
    FastLED.clear();&lt;br /&gt;
    delay(400);&lt;br /&gt;
    while(game_in_progress){&lt;br /&gt;
      move();&lt;br /&gt;
      if (digitalRead(PIN_BTN)==LOW &amp;amp;&amp;amp; game_in_progress==true){&lt;br /&gt;
        level_up();&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
int move(){&lt;br /&gt;
  // Permet de faire bouger la LED de gauche à droite&lt;br /&gt;
  for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++){&lt;br /&gt;
    // -------- DEBUGGING -------- // &lt;br /&gt;
    /*&lt;br /&gt;
    Serial.print(&amp;quot;val de la led: &amp;quot;);&lt;br /&gt;
    Serial.print(i);&lt;br /&gt;
    Serial.print(&amp;quot;\n&amp;quot;);&lt;br /&gt;
    */&lt;br /&gt;
    if (digitalRead(PIN_BTN)==LOW){     //Stock des scores LEDs 1 -&amp;gt; 9 -&amp;gt; 1&lt;br /&gt;
      int center = abs(i - (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL / 2));&lt;br /&gt;
      if (center &amp;lt;= NUM_OF_LEDS_BY_LEVEL/2) {&lt;br /&gt;
        last_point[level] = NUM_OF_LEDS_BY_LEVEL/2 - center + 1;  // Les points augmentent jusqu'à 9&lt;br /&gt;
      } else {&lt;br /&gt;
        last_point[level] = 0;  // À partir de la position 9, les points diminuent&lt;br /&gt;
      }&lt;br /&gt;
    //   if(i&amp;lt;(1/2*NUM_OF_LEDS_BY_LEVEL)){&lt;br /&gt;
    //     last_point[level] = i;&lt;br /&gt;
    //   }&lt;br /&gt;
    //   else{&lt;br /&gt;
    //     for(int degr = 1; degr&amp;lt;NUM_OF_LEDS_BY_LEVEL; degr++)&lt;br /&gt;
    //     last_point[level] = (i - degr);&lt;br /&gt;
      &lt;br /&gt;
    // }&lt;br /&gt;
      int last_point_visu = i-1;&lt;br /&gt;
      return i-1;&lt;br /&gt;
      // -------- DEBUGGING -------- //&lt;br /&gt;
      /*&lt;br /&gt;
      Serial.print(&amp;quot;last_point_visu&amp;quot;);&lt;br /&gt;
      Serial.print(last_point_visu);&lt;br /&gt;
       &lt;br /&gt;
      for(int z=0; z&amp;lt;NUM_OF_LEVELS; z++){&lt;br /&gt;
        Serial.print(last_point[z]);&lt;br /&gt;
        Serial.print(&amp;quot;\n&amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
      */&lt;br /&gt;
      &lt;br /&gt;
      &lt;br /&gt;
    }&lt;br /&gt;
    //Eteins les LEDs derrière la LED mouvante&lt;br /&gt;
    leds[i - 1] = CRGB::Black;&lt;br /&gt;
    delay(3);&lt;br /&gt;
    leds[level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2] = CRGB::Yellow;&lt;br /&gt;
    leds[i] = color;&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(delay_level);&lt;br /&gt;
  }&lt;br /&gt;
  leds[NUM_OF_LEDS_BY_LEVEL * level + 20] = CRGB::Black;&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
  delay(delay_level);&lt;br /&gt;
  for (int i = NUM_OF_LEDS_BY_LEVEL * level +  NUM_OF_LEDS_BY_LEVEL - 1; i &amp;gt;= NUM_OF_LEDS_BY_LEVEL * level ; i--)&lt;br /&gt;
  {&lt;br /&gt;
    // -------- DEBUGGING -------- //&lt;br /&gt;
    /*&lt;br /&gt;
    Serial.print(&amp;quot;val de la led: &amp;quot;);&lt;br /&gt;
    Serial.print(i);&lt;br /&gt;
    Serial.print(&amp;quot;\n&amp;quot;);&lt;br /&gt;
    */&lt;br /&gt;
    if (digitalRead(PIN_BTN)==LOW){           //Stock des scores LEDs 1 -&amp;gt; 9 -&amp;gt; 1&lt;br /&gt;
      int center = abs(i - (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL / 2));&lt;br /&gt;
      if (center &amp;lt;= NUM_OF_LEDS_BY_LEVEL/2) {&lt;br /&gt;
        last_point[level] = NUM_OF_LEDS_BY_LEVEL/2 - center + 1;  // Les points augmentent jusqu'à 9&lt;br /&gt;
      } else {&lt;br /&gt;
        last_point[level] = 0;  // À partir de la position 9, les points diminuent&lt;br /&gt;
      }&lt;br /&gt;
      // if(i&amp;lt;(1/2*NUM_OF_LEDS_BY_LEVEL)){&lt;br /&gt;
      //   last_point[level] = i;&lt;br /&gt;
      // }&lt;br /&gt;
      // else{&lt;br /&gt;
      //   for(int degr = 1; degr&amp;lt;NUM_OF_LEDS_BY_LEVEL; degr++)&lt;br /&gt;
      //   last_point[level] = (i - degr);&lt;br /&gt;
      //   }&lt;br /&gt;
    &lt;br /&gt;
      int last_point_visu = i+1;&lt;br /&gt;
      return i+1;&lt;br /&gt;
      &lt;br /&gt;
      // -------- DEBUGGING -------- //&lt;br /&gt;
      /*&lt;br /&gt;
      Serial.print(&amp;quot;last_point_visu&amp;quot;);&lt;br /&gt;
      Serial.print(last_point_visu);&lt;br /&gt;
      &lt;br /&gt;
      for(int z=0; z&amp;lt;NUM_OF_LEVELS; z++){&lt;br /&gt;
        Serial.print(last_point[z]);&lt;br /&gt;
        Serial.print(&amp;quot;\n&amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
      */&lt;br /&gt;
      &lt;br /&gt;
    }&lt;br /&gt;
    //Eteins les LEDs derrière la LED mouvante&lt;br /&gt;
    leds[i + 1] = CRGB::Black;&lt;br /&gt;
    delay(3);&lt;br /&gt;
    leds[level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2] = CRGB::Yellow;&lt;br /&gt;
    leds[i] = color;&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(delay_level);&lt;br /&gt;
  }&lt;br /&gt;
    leds[NUM_OF_LEDS_BY_LEVEL] = CRGB::Black;&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(delay_level);&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void flash()   // fonction de décoration qui fait clignoter les leds en blanc avant le passage de niveau&lt;br /&gt;
{&lt;br /&gt;
  for (int cpt = 0; cpt &amp;lt; 4; cpt++) &lt;br /&gt;
  {&lt;br /&gt;
    for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++)  // On met toute les leds du niveau en blanc&lt;br /&gt;
    {&lt;br /&gt;
      leds[i] = CRGB::Green;&lt;br /&gt;
    }&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(100);&lt;br /&gt;
    for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++) // On éteint toutes les leds du niveau&lt;br /&gt;
    {&lt;br /&gt;
      leds[i] = CRGB::Black;&lt;br /&gt;
    }&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(100);&lt;br /&gt;
  }&lt;br /&gt;
  leds[last_point_visu] = CRGB::Purple;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void level_up()   // changement de niveau&lt;br /&gt;
{&lt;br /&gt;
  flash();  // animation&lt;br /&gt;
  level++;  // incrémentation de la variable niveau&lt;br /&gt;
  delay_level -= 4; // le jeu devient de plus en plus rapide&lt;br /&gt;
&lt;br /&gt;
  if (level &amp;gt;= NUM_OF_LEVELS)   // fin du jeu&lt;br /&gt;
  {&lt;br /&gt;
    compute_score(); //Calcul le score&lt;br /&gt;
    show_score(); //Affiche le score sur un écran à crystaux liquides&lt;br /&gt;
&lt;br /&gt;
    //Remise des valeurs pas défaut&lt;br /&gt;
    level = 0;      &lt;br /&gt;
    score = 0;&lt;br /&gt;
    delay_level = 30;&lt;br /&gt;
    game_in_progress = false;&lt;br /&gt;
    for(int w=0; w&amp;lt;NUM_OF_LEVELS;w++){&lt;br /&gt;
      last_point[w] = 0;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void waiting_start_game(){&lt;br /&gt;
  // Allume toutes les LEDs en bleu avant de faire commencer la partie&lt;br /&gt;
  for (int w = 0; w &amp;lt; NUM_LEDS; w++){&lt;br /&gt;
    leds[w] = CRGB::Blue;&lt;br /&gt;
  }&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int compute_score(){&lt;br /&gt;
  // Récupere les élements du tableau last_point et les additionnes&lt;br /&gt;
  for (int i = 0; i&amp;lt;NUM_OF_LEVELS; i++){&lt;br /&gt;
    if (i &amp;gt; 2) {&lt;br /&gt;
      // Pour les niveaux 4 et 5, le score est diviser par deux&lt;br /&gt;
      score += last_point[i] / 2;&lt;br /&gt;
    } else {&lt;br /&gt;
      score += last_point[i];&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  // -------- DEBUGGING -------- //&lt;br /&gt;
  /*&lt;br /&gt;
  Serial.print(&amp;quot;Score : &amp;quot;);&lt;br /&gt;
  Serial.println(score);&lt;br /&gt;
  */&lt;br /&gt;
  return score;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int show_score(){&lt;br /&gt;
  lcd.clear();&lt;br /&gt;
  lcd.setCursor(0,0);&lt;br /&gt;
  lcd.print(&amp;quot;   Score : &amp;quot;);&lt;br /&gt;
  lcd.print(score);&lt;br /&gt;
  lcd.setCursor(0,1);&lt;br /&gt;
  lcd.print(&amp;quot;  Bien joue !!&amp;quot;); // Je ne sais pas comment mettre des caractères speciaux (hors ASCII 128)&lt;br /&gt;
  delay(5000);&lt;br /&gt;
  lcd.clear();&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ----- MUSIQUE ----- // &lt;br /&gt;
&lt;br /&gt;
int melody[] = {&lt;br /&gt;
&lt;br /&gt;
  //Based on the arrangement at https://www.flutetunes.com/tunes.php?id=169&lt;br /&gt;
  &lt;br /&gt;
  NOTE_AS4,-2,  NOTE_F4,8,  NOTE_F4,8,  NOTE_AS4,8,//1&lt;br /&gt;
  NOTE_GS4,16,  NOTE_FS4,16,  NOTE_GS4,-2,&lt;br /&gt;
  NOTE_AS4,-2,  NOTE_FS4,8,  NOTE_FS4,8,  NOTE_AS4,8,&lt;br /&gt;
  NOTE_A4,16,  NOTE_G4,16,  NOTE_A4,-2,&lt;br /&gt;
  REST,1, &lt;br /&gt;
&lt;br /&gt;
  NOTE_AS4,4,  NOTE_F4,-4,  NOTE_AS4,8,  NOTE_AS4,16,  NOTE_C5,16, NOTE_D5,16, NOTE_DS5,16,//7&lt;br /&gt;
  NOTE_F5,2,  NOTE_F5,8,  NOTE_F5,8,  NOTE_F5,8,  NOTE_FS5,16, NOTE_GS5,16,&lt;br /&gt;
  NOTE_AS5,-2,  NOTE_AS5,8,  NOTE_AS5,8,  NOTE_GS5,8,  NOTE_FS5,16,&lt;br /&gt;
  NOTE_GS5,-8,  NOTE_FS5,16,  NOTE_F5,2,  NOTE_F5,4, &lt;br /&gt;
&lt;br /&gt;
  NOTE_DS5,-8, NOTE_F5,16, NOTE_FS5,2, NOTE_F5,8, NOTE_DS5,8, //11&lt;br /&gt;
  NOTE_CS5,-8, NOTE_DS5,16, NOTE_F5,2, NOTE_DS5,8, NOTE_CS5,8,&lt;br /&gt;
  NOTE_C5,-8, NOTE_D5,16, NOTE_E5,2, NOTE_G5,8, &lt;br /&gt;
  NOTE_F5,16, NOTE_F4,16, NOTE_F4,16, NOTE_F4,16,NOTE_F4,16,NOTE_F4,16,NOTE_F4,16,NOTE_F4,16,NOTE_F4,8, NOTE_F4,16,NOTE_F4,8,&lt;br /&gt;
&lt;br /&gt;
  NOTE_AS4,4,  NOTE_F4,-4,  NOTE_AS4,8,  NOTE_AS4,16,  NOTE_C5,16, NOTE_D5,16, NOTE_DS5,16,//15&lt;br /&gt;
  NOTE_F5,2,  NOTE_F5,8,  NOTE_F5,8,  NOTE_F5,8,  NOTE_FS5,16, NOTE_GS5,16,&lt;br /&gt;
  NOTE_AS5,-2, NOTE_CS6,4,&lt;br /&gt;
  NOTE_C6,4, NOTE_A5,2, NOTE_F5,4,&lt;br /&gt;
  NOTE_FS5,-2, NOTE_AS5,4,&lt;br /&gt;
  NOTE_A5,4, NOTE_F5,2, NOTE_F5,4,&lt;br /&gt;
&lt;br /&gt;
  NOTE_FS5,-2, NOTE_AS5,4,&lt;br /&gt;
  NOTE_A5,4, NOTE_F5,2, NOTE_D5,4,&lt;br /&gt;
  NOTE_DS5,-2, NOTE_FS5,4,&lt;br /&gt;
  NOTE_F5,4, NOTE_CS5,2, NOTE_AS4,4,&lt;br /&gt;
  NOTE_C5,-8, NOTE_D5,16, NOTE_E5,2, NOTE_G5,8, &lt;br /&gt;
  NOTE_F5,16, NOTE_F4,16, NOTE_F4,16, NOTE_F4,16,NOTE_F4,16,NOTE_F4,16,NOTE_F4,16,NOTE_F4,16,NOTE_F4,8, NOTE_F4,16,NOTE_F4,8&lt;br /&gt;
  &lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void musique(){&lt;br /&gt;
  int tempo = 60;&lt;br /&gt;
  // sizeof gives the number of bytes, each int value is composed of two bytes (16 bits)&lt;br /&gt;
  // there are two values per note (pitch and duration), so for each note there are four bytes&lt;br /&gt;
  int notes = sizeof(melody) / sizeof(melody[0]) / 2;&lt;br /&gt;
  &lt;br /&gt;
  // this calculates the duration of a whole note in ms&lt;br /&gt;
  int wholenote = (60000 * 2) / tempo;&lt;br /&gt;
  &lt;br /&gt;
  int divider = 0, noteDuration = 0;&lt;br /&gt;
  // iterate over the notes of the melody. &lt;br /&gt;
  // Remember, the array is twice the number of notes (notes + durations)&lt;br /&gt;
  for (int thisNote = 0; thisNote &amp;lt; notes * 2; thisNote = thisNote + 2) {&lt;br /&gt;
&lt;br /&gt;
    // calculates the duration of each note&lt;br /&gt;
    divider = melody[thisNote + 1];&lt;br /&gt;
    if (divider &amp;gt; 0) {&lt;br /&gt;
      // regular note, just proceed&lt;br /&gt;
      noteDuration = (wholenote) / divider;&lt;br /&gt;
    } else if (divider &amp;lt; 0) {&lt;br /&gt;
      // dotted notes are represented with negative durations!!&lt;br /&gt;
      noteDuration = (wholenote) / abs(divider);&lt;br /&gt;
      noteDuration *= 1.5; // increases the duration in half for dotted notes&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // we only play the note for 90% of the duration, leaving 10% as a pause&lt;br /&gt;
    tone(PIN_BUZZER, melody[thisNote], noteDuration*0.9);&lt;br /&gt;
&lt;br /&gt;
    // Wait for the specief duration before playing the next note.&lt;br /&gt;
    delay(noteDuration);&lt;br /&gt;
    &lt;br /&gt;
    // stop the waveform generation before the next note.&lt;br /&gt;
    noTone(PIN_BUZZER);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==étapes de fabrication==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===étape 1: câbler et souder===&lt;br /&gt;
câbler les fils entre les leds, la carte arduino et le bouton puis souder les fils si nécessaire et enfin téléverser le programme dans la carte si nécessaire.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Cablage.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
===étape 2: le support===&lt;br /&gt;
réaliser le prototype en carton &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Tonk1.jpg|200px]]&lt;br /&gt;
[[Fichier:Tonk2.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
===étape 3 : support en bois===&lt;br /&gt;
&lt;br /&gt;
On réalise en suite le support en bois.&lt;br /&gt;
&lt;br /&gt;
Grâce au prototype en carton on dessine le support en bois puis on reporte les mesures sur des plaques en bois pour ensuite les découper.&lt;br /&gt;
&lt;br /&gt;
Une fois les différentes parties du support faites on les assemble.&lt;br /&gt;
&lt;br /&gt;
===troubleshouting===&lt;br /&gt;
quelles sont difficultés, les problèmes, quelles sont les solutions, les trucs et astuces pour que ça marche ?&lt;br /&gt;
&lt;br /&gt;
1er problème : le programme ne marchait pas car la LED était montée à l'envers&lt;br /&gt;
&lt;br /&gt;
2ème problème : adapter la taille du support qui était d'abord trop grand&lt;br /&gt;
&lt;br /&gt;
==Sources et documentation complémentaire==&lt;br /&gt;
&lt;br /&gt;
==ne pas modifier sous cette ligne==&lt;br /&gt;
[[Catégorie:Enib2024]]&lt;/div&gt;</summary>
		<author><name>Arnaud...</name></author>	</entry>

	<entry>
		<id>http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2024_:_CatchTheJackpot&amp;diff=26191</id>
		<title>ENIB 2024 : CatchTheJackpot</title>
		<link rel="alternate" type="text/html" href="http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2024_:_CatchTheJackpot&amp;diff=26191"/>
				<updated>2024-01-31T10:37:37Z</updated>
		
		<summary type="html">&lt;p&gt;Arnaud... : /* étape 2: le support */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==description==&lt;br /&gt;
&lt;br /&gt;
Ce projet fonction grâce à une carte Arduino, des LEDs et un bouton. &lt;br /&gt;
&lt;br /&gt;
Une lumière traverse le ruban de gauche à droite et lorsqu'elle est au milieu, il faut appuyer sur le bouton au bon moment pour gagner.&lt;br /&gt;
&lt;br /&gt;
==réalisé par :==&lt;br /&gt;
 -Arnaud Genty&lt;br /&gt;
 -Maxime Bintein&lt;br /&gt;
 -Tristan Le Coz&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
éventuelle vidéo&lt;br /&gt;
&lt;br /&gt;
==Liste des composants==&lt;br /&gt;
&lt;br /&gt;
* Bouton poussoir style Arcade&lt;br /&gt;
* Arduino nano&lt;br /&gt;
* 2 rubans de LED adressable (85 LEDs pour être exacte) &lt;br /&gt;
* Carton&lt;br /&gt;
* Bois&lt;br /&gt;
* Câbles mini-USB&lt;br /&gt;
* Câbles&lt;br /&gt;
* écran LCD&lt;br /&gt;
* Breadboard&lt;br /&gt;
* 2 résistances de 500kΩ&lt;br /&gt;
&lt;br /&gt;
==Outils==&lt;br /&gt;
&lt;br /&gt;
* Cutter&lt;br /&gt;
* Marqueur noir&lt;br /&gt;
* Pistolet à colle&lt;br /&gt;
* Scotch&lt;br /&gt;
* Fer à souder&lt;br /&gt;
* Scie à bois&lt;br /&gt;
* Perceuse&lt;br /&gt;
* Bibliothèque Arduino FastLed &lt;br /&gt;
  https://fastled.io/&lt;br /&gt;
&lt;br /&gt;
==fichiers à joindre==&lt;br /&gt;
code, ficher d'impression 3D, de découpe laser ou vinyle, ...&lt;br /&gt;
&lt;br /&gt;
==Code :==&lt;br /&gt;
&lt;br /&gt;
//Programme fait sur carte STM8266 / WEMOS D1 mini&lt;br /&gt;
#include &amp;quot;pitches.h&amp;quot;&lt;br /&gt;
#include &amp;quot;FastLED.h&amp;quot;                    //bibliothèque pour controler le ruban led&lt;br /&gt;
#include &amp;lt;Wire.h&amp;gt;                  //bibliothèque écran&lt;br /&gt;
#include &amp;lt;LiquidCrystal_I2C.h&amp;gt;     //bibliothèque écran&lt;br /&gt;
#define REST 0&lt;br /&gt;
#define NUM_LEDS 86&lt;br /&gt;
#define NUM_OF_LEDS_BY_LEVEL 17         // nombre de leds par niveau&lt;br /&gt;
#define NUM_OF_LEVELS 5                  // nombre de niveaux&lt;br /&gt;
#define PIN_BTN D3                       // Entree du bouton&lt;br /&gt;
#define PIN_LEDS D4                      // Sortie du ruban led&lt;br /&gt;
#define PIN_BUZZER D8                    // Signal de sortie buzzer&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// -------- INIT VARIABLES --------&lt;br /&gt;
LiquidCrystal_I2C lcd(0x27, 16, 2);&lt;br /&gt;
CRGB leds[NUM_LEDS]; //Création d'une liste avec chaque led&lt;br /&gt;
CRGB randomcolor  = CHSV(random(192), 255, 255);&lt;br /&gt;
int level = 0;        // niveau auquel le joueur est&lt;br /&gt;
int delay_level = 30; // délai qui permet de controler la vitesse de déplacement de la led&lt;br /&gt;
auto color = CRGB::Blue; // couleur de la led qui se déplace&lt;br /&gt;
int score = 0;           // score du joueur&lt;br /&gt;
const double coef[] = {1,1.5,2,2.5,3}; // coefficient multiplicateur de point par niveau&lt;br /&gt;
int last_point[NUM_OF_LEVELS];     // sauvegarde de la derniere led allumée pour la rallumer après flash()&lt;br /&gt;
bool game_in_progress = false;&lt;br /&gt;
int last_point_visu = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// -------- INIT FONCTIONS --------&lt;br /&gt;
&lt;br /&gt;
int move();            // déplacement de la led&lt;br /&gt;
void level_up();    // passage de niveau&lt;br /&gt;
void waiting_start_game(); //affichage d'attente de début du jeu&lt;br /&gt;
void flash();       // animation de victoire d'un niveau&lt;br /&gt;
&lt;br /&gt;
// -------- PROGRAMME --------&lt;br /&gt;
void setup() {&lt;br /&gt;
  FastLED.addLeds&amp;lt;NEOPIXEL, D4&amp;gt;(leds, NUM_LEDS);     // setup du ruban de led sur la sortie PIN_LEDS =&amp;gt; 2&lt;br /&gt;
  pinMode(PIN_BTN, INPUT);                          // setup du bouton dur l'entrée PIN_BTN =&amp;gt; 3&lt;br /&gt;
  FastLED.setBrightness(50);                    // setup de la luminosité&lt;br /&gt;
  Serial.begin(9600);                               // setup moniteur série pour debug &lt;br /&gt;
  int last_point[NUM_OF_LEVELS];&lt;br /&gt;
  pinMode(PIN_BUZZER, OUTPUT);&lt;br /&gt;
&lt;br /&gt;
  // -------- ECRAN --------&lt;br /&gt;
  lcd.init();                        // Initialize I2C LCD module&lt;br /&gt;
  lcd.backlight();                   // Turn backlight ON&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  waiting_start_game();&lt;br /&gt;
    lcd.setCursor(0,0);&lt;br /&gt;
    lcd.print(&amp;quot;    Cliquer &amp;quot;);&lt;br /&gt;
    lcd.setCursor(0,1);&lt;br /&gt;
    lcd.print(&amp;quot; pour commencer&amp;quot;);&lt;br /&gt;
    FastLED.clear();&lt;br /&gt;
  if (digitalRead(PIN_BTN)==LOW){&lt;br /&gt;
    musique();&lt;br /&gt;
    game_in_progress = true;&lt;br /&gt;
    lcd.clear();&lt;br /&gt;
    lcd.setCursor(0,0);&lt;br /&gt;
    lcd.print(&amp;quot;Partie en cours !&amp;quot;);&lt;br /&gt;
    lcd.setCursor(0,1);&lt;br /&gt;
    lcd.print(&amp;quot;XoXoXoXoXoXoXoXo&amp;quot;);&lt;br /&gt;
    FastLED.clear();&lt;br /&gt;
    delay(400);&lt;br /&gt;
    while(game_in_progress){&lt;br /&gt;
      move();&lt;br /&gt;
      if (digitalRead(PIN_BTN)==LOW &amp;amp;&amp;amp; game_in_progress==true){&lt;br /&gt;
        level_up();&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
int move(){&lt;br /&gt;
  // Permet de faire bouger la LED de gauche à droite&lt;br /&gt;
  for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++){&lt;br /&gt;
    // -------- DEBUGGING -------- // &lt;br /&gt;
    /*&lt;br /&gt;
    Serial.print(&amp;quot;val de la led: &amp;quot;);&lt;br /&gt;
    Serial.print(i);&lt;br /&gt;
    Serial.print(&amp;quot;\n&amp;quot;);&lt;br /&gt;
    */&lt;br /&gt;
    if (digitalRead(PIN_BTN)==LOW){     //Stock des scores LEDs 1 -&amp;gt; 9 -&amp;gt; 1&lt;br /&gt;
      int center = abs(i - (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL / 2));&lt;br /&gt;
      if (center &amp;lt;= NUM_OF_LEDS_BY_LEVEL/2) {&lt;br /&gt;
        last_point[level] = NUM_OF_LEDS_BY_LEVEL/2 - center + 1;  // Les points augmentent jusqu'à 9&lt;br /&gt;
      } else {&lt;br /&gt;
        last_point[level] = 0;  // À partir de la position 9, les points diminuent&lt;br /&gt;
      }&lt;br /&gt;
    //   if(i&amp;lt;(1/2*NUM_OF_LEDS_BY_LEVEL)){&lt;br /&gt;
    //     last_point[level] = i;&lt;br /&gt;
    //   }&lt;br /&gt;
    //   else{&lt;br /&gt;
    //     for(int degr = 1; degr&amp;lt;NUM_OF_LEDS_BY_LEVEL; degr++)&lt;br /&gt;
    //     last_point[level] = (i - degr);&lt;br /&gt;
      &lt;br /&gt;
    // }&lt;br /&gt;
      int last_point_visu = i-1;&lt;br /&gt;
      return i-1;&lt;br /&gt;
      // -------- DEBUGGING -------- //&lt;br /&gt;
      /*&lt;br /&gt;
      Serial.print(&amp;quot;last_point_visu&amp;quot;);&lt;br /&gt;
      Serial.print(last_point_visu);&lt;br /&gt;
       &lt;br /&gt;
      for(int z=0; z&amp;lt;NUM_OF_LEVELS; z++){&lt;br /&gt;
        Serial.print(last_point[z]);&lt;br /&gt;
        Serial.print(&amp;quot;\n&amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
      */&lt;br /&gt;
      &lt;br /&gt;
      &lt;br /&gt;
    }&lt;br /&gt;
    //Eteins les LEDs derrière la LED mouvante&lt;br /&gt;
    leds[i - 1] = CRGB::Black;&lt;br /&gt;
    delay(3);&lt;br /&gt;
    leds[level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2] = CRGB::Yellow;&lt;br /&gt;
    leds[i] = color;&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(delay_level);&lt;br /&gt;
  }&lt;br /&gt;
  leds[NUM_OF_LEDS_BY_LEVEL * level + 20] = CRGB::Black;&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
  delay(delay_level);&lt;br /&gt;
  for (int i = NUM_OF_LEDS_BY_LEVEL * level +  NUM_OF_LEDS_BY_LEVEL - 1; i &amp;gt;= NUM_OF_LEDS_BY_LEVEL * level ; i--)&lt;br /&gt;
  {&lt;br /&gt;
    // -------- DEBUGGING -------- //&lt;br /&gt;
    /*&lt;br /&gt;
    Serial.print(&amp;quot;val de la led: &amp;quot;);&lt;br /&gt;
    Serial.print(i);&lt;br /&gt;
    Serial.print(&amp;quot;\n&amp;quot;);&lt;br /&gt;
    */&lt;br /&gt;
    if (digitalRead(PIN_BTN)==LOW){           //Stock des scores LEDs 1 -&amp;gt; 9 -&amp;gt; 1&lt;br /&gt;
      int center = abs(i - (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL / 2));&lt;br /&gt;
      if (center &amp;lt;= NUM_OF_LEDS_BY_LEVEL/2) {&lt;br /&gt;
        last_point[level] = NUM_OF_LEDS_BY_LEVEL/2 - center + 1;  // Les points augmentent jusqu'à 9&lt;br /&gt;
      } else {&lt;br /&gt;
        last_point[level] = 0;  // À partir de la position 9, les points diminuent&lt;br /&gt;
      }&lt;br /&gt;
      // if(i&amp;lt;(1/2*NUM_OF_LEDS_BY_LEVEL)){&lt;br /&gt;
      //   last_point[level] = i;&lt;br /&gt;
      // }&lt;br /&gt;
      // else{&lt;br /&gt;
      //   for(int degr = 1; degr&amp;lt;NUM_OF_LEDS_BY_LEVEL; degr++)&lt;br /&gt;
      //   last_point[level] = (i - degr);&lt;br /&gt;
      //   }&lt;br /&gt;
    &lt;br /&gt;
      int last_point_visu = i+1;&lt;br /&gt;
      return i+1;&lt;br /&gt;
      &lt;br /&gt;
      // -------- DEBUGGING -------- //&lt;br /&gt;
      /*&lt;br /&gt;
      Serial.print(&amp;quot;last_point_visu&amp;quot;);&lt;br /&gt;
      Serial.print(last_point_visu);&lt;br /&gt;
      &lt;br /&gt;
      for(int z=0; z&amp;lt;NUM_OF_LEVELS; z++){&lt;br /&gt;
        Serial.print(last_point[z]);&lt;br /&gt;
        Serial.print(&amp;quot;\n&amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
      */&lt;br /&gt;
      &lt;br /&gt;
    }&lt;br /&gt;
    //Eteins les LEDs derrière la LED mouvante&lt;br /&gt;
    leds[i + 1] = CRGB::Black;&lt;br /&gt;
    delay(3);&lt;br /&gt;
    leds[level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2] = CRGB::Yellow;&lt;br /&gt;
    leds[i] = color;&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(delay_level);&lt;br /&gt;
  }&lt;br /&gt;
    leds[NUM_OF_LEDS_BY_LEVEL] = CRGB::Black;&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(delay_level);&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void flash()   // fonction de décoration qui fait clignoter les leds en blanc avant le passage de niveau&lt;br /&gt;
{&lt;br /&gt;
  for (int cpt = 0; cpt &amp;lt; 4; cpt++) &lt;br /&gt;
  {&lt;br /&gt;
    for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++)  // On met toute les leds du niveau en blanc&lt;br /&gt;
    {&lt;br /&gt;
      leds[i] = CRGB::Green;&lt;br /&gt;
    }&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(100);&lt;br /&gt;
    for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++) // On éteint toutes les leds du niveau&lt;br /&gt;
    {&lt;br /&gt;
      leds[i] = CRGB::Black;&lt;br /&gt;
    }&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(100);&lt;br /&gt;
  }&lt;br /&gt;
  leds[last_point_visu] = CRGB::Purple;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void level_up()   // changement de niveau&lt;br /&gt;
{&lt;br /&gt;
  flash();  // animation&lt;br /&gt;
  level++;  // incrémentation de la variable niveau&lt;br /&gt;
  delay_level -= 4; // le jeu devient de plus en plus rapide&lt;br /&gt;
&lt;br /&gt;
  if (level &amp;gt;= NUM_OF_LEVELS)   // fin du jeu&lt;br /&gt;
  {&lt;br /&gt;
    compute_score(); //Calcul le score&lt;br /&gt;
    show_score(); //Affiche le score sur un écran à crystaux liquides&lt;br /&gt;
&lt;br /&gt;
    //Remise des valeurs pas défaut&lt;br /&gt;
    level = 0;      &lt;br /&gt;
    score = 0;&lt;br /&gt;
    delay_level = 30;&lt;br /&gt;
    game_in_progress = false;&lt;br /&gt;
    for(int w=0; w&amp;lt;NUM_OF_LEVELS;w++){&lt;br /&gt;
      last_point[w] = 0;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void waiting_start_game(){&lt;br /&gt;
  // Allume toutes les LEDs en bleu avant de faire commencer la partie&lt;br /&gt;
  for (int w = 0; w &amp;lt; NUM_LEDS; w++){&lt;br /&gt;
    leds[w] = CRGB::Blue;&lt;br /&gt;
  }&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int compute_score(){&lt;br /&gt;
  // Récupere les élements du tableau last_point et les additionnes&lt;br /&gt;
  for (int i = 0; i&amp;lt;NUM_OF_LEVELS; i++){&lt;br /&gt;
    if (i &amp;gt; 2) {&lt;br /&gt;
      // Pour les niveaux 4 et 5, le score est diviser par deux&lt;br /&gt;
      score += last_point[i] / 2;&lt;br /&gt;
    } else {&lt;br /&gt;
      score += last_point[i];&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  // -------- DEBUGGING -------- //&lt;br /&gt;
  /*&lt;br /&gt;
  Serial.print(&amp;quot;Score : &amp;quot;);&lt;br /&gt;
  Serial.println(score);&lt;br /&gt;
  */&lt;br /&gt;
  return score;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int show_score(){&lt;br /&gt;
  lcd.clear();&lt;br /&gt;
  lcd.setCursor(0,0);&lt;br /&gt;
  lcd.print(&amp;quot;   Score : &amp;quot;);&lt;br /&gt;
  lcd.print(score);&lt;br /&gt;
  lcd.setCursor(0,1);&lt;br /&gt;
  lcd.print(&amp;quot;  Bien joue !!&amp;quot;); // Je ne sais pas comment mettre des caractères speciaux (hors ASCII 128)&lt;br /&gt;
  delay(5000);&lt;br /&gt;
  lcd.clear();&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ----- MUSIQUE ----- // &lt;br /&gt;
&lt;br /&gt;
int melody[] = {&lt;br /&gt;
&lt;br /&gt;
  //Based on the arrangement at https://www.flutetunes.com/tunes.php?id=169&lt;br /&gt;
  &lt;br /&gt;
  NOTE_AS4,-2,  NOTE_F4,8,  NOTE_F4,8,  NOTE_AS4,8,//1&lt;br /&gt;
  NOTE_GS4,16,  NOTE_FS4,16,  NOTE_GS4,-2,&lt;br /&gt;
  NOTE_AS4,-2,  NOTE_FS4,8,  NOTE_FS4,8,  NOTE_AS4,8,&lt;br /&gt;
  NOTE_A4,16,  NOTE_G4,16,  NOTE_A4,-2,&lt;br /&gt;
  REST,1, &lt;br /&gt;
&lt;br /&gt;
  NOTE_AS4,4,  NOTE_F4,-4,  NOTE_AS4,8,  NOTE_AS4,16,  NOTE_C5,16, NOTE_D5,16, NOTE_DS5,16,//7&lt;br /&gt;
  NOTE_F5,2,  NOTE_F5,8,  NOTE_F5,8,  NOTE_F5,8,  NOTE_FS5,16, NOTE_GS5,16,&lt;br /&gt;
  NOTE_AS5,-2,  NOTE_AS5,8,  NOTE_AS5,8,  NOTE_GS5,8,  NOTE_FS5,16,&lt;br /&gt;
  NOTE_GS5,-8,  NOTE_FS5,16,  NOTE_F5,2,  NOTE_F5,4, &lt;br /&gt;
&lt;br /&gt;
  NOTE_DS5,-8, NOTE_F5,16, NOTE_FS5,2, NOTE_F5,8, NOTE_DS5,8, //11&lt;br /&gt;
  NOTE_CS5,-8, NOTE_DS5,16, NOTE_F5,2, NOTE_DS5,8, NOTE_CS5,8,&lt;br /&gt;
  NOTE_C5,-8, NOTE_D5,16, NOTE_E5,2, NOTE_G5,8, &lt;br /&gt;
  NOTE_F5,16, NOTE_F4,16, NOTE_F4,16, NOTE_F4,16,NOTE_F4,16,NOTE_F4,16,NOTE_F4,16,NOTE_F4,16,NOTE_F4,8, NOTE_F4,16,NOTE_F4,8,&lt;br /&gt;
&lt;br /&gt;
  NOTE_AS4,4,  NOTE_F4,-4,  NOTE_AS4,8,  NOTE_AS4,16,  NOTE_C5,16, NOTE_D5,16, NOTE_DS5,16,//15&lt;br /&gt;
  NOTE_F5,2,  NOTE_F5,8,  NOTE_F5,8,  NOTE_F5,8,  NOTE_FS5,16, NOTE_GS5,16,&lt;br /&gt;
  NOTE_AS5,-2, NOTE_CS6,4,&lt;br /&gt;
  NOTE_C6,4, NOTE_A5,2, NOTE_F5,4,&lt;br /&gt;
  NOTE_FS5,-2, NOTE_AS5,4,&lt;br /&gt;
  NOTE_A5,4, NOTE_F5,2, NOTE_F5,4,&lt;br /&gt;
&lt;br /&gt;
  NOTE_FS5,-2, NOTE_AS5,4,&lt;br /&gt;
  NOTE_A5,4, NOTE_F5,2, NOTE_D5,4,&lt;br /&gt;
  NOTE_DS5,-2, NOTE_FS5,4,&lt;br /&gt;
  NOTE_F5,4, NOTE_CS5,2, NOTE_AS4,4,&lt;br /&gt;
  NOTE_C5,-8, NOTE_D5,16, NOTE_E5,2, NOTE_G5,8, &lt;br /&gt;
  NOTE_F5,16, NOTE_F4,16, NOTE_F4,16, NOTE_F4,16,NOTE_F4,16,NOTE_F4,16,NOTE_F4,16,NOTE_F4,16,NOTE_F4,8, NOTE_F4,16,NOTE_F4,8&lt;br /&gt;
  &lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void musique(){&lt;br /&gt;
  int tempo = 60;&lt;br /&gt;
  // sizeof gives the number of bytes, each int value is composed of two bytes (16 bits)&lt;br /&gt;
  // there are two values per note (pitch and duration), so for each note there are four bytes&lt;br /&gt;
  int notes = sizeof(melody) / sizeof(melody[0]) / 2;&lt;br /&gt;
  &lt;br /&gt;
  // this calculates the duration of a whole note in ms&lt;br /&gt;
  int wholenote = (60000 * 2) / tempo;&lt;br /&gt;
  &lt;br /&gt;
  int divider = 0, noteDuration = 0;&lt;br /&gt;
  // iterate over the notes of the melody. &lt;br /&gt;
  // Remember, the array is twice the number of notes (notes + durations)&lt;br /&gt;
  for (int thisNote = 0; thisNote &amp;lt; notes * 2; thisNote = thisNote + 2) {&lt;br /&gt;
&lt;br /&gt;
    // calculates the duration of each note&lt;br /&gt;
    divider = melody[thisNote + 1];&lt;br /&gt;
    if (divider &amp;gt; 0) {&lt;br /&gt;
      // regular note, just proceed&lt;br /&gt;
      noteDuration = (wholenote) / divider;&lt;br /&gt;
    } else if (divider &amp;lt; 0) {&lt;br /&gt;
      // dotted notes are represented with negative durations!!&lt;br /&gt;
      noteDuration = (wholenote) / abs(divider);&lt;br /&gt;
      noteDuration *= 1.5; // increases the duration in half for dotted notes&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // we only play the note for 90% of the duration, leaving 10% as a pause&lt;br /&gt;
    tone(PIN_BUZZER, melody[thisNote], noteDuration*0.9);&lt;br /&gt;
&lt;br /&gt;
    // Wait for the specief duration before playing the next note.&lt;br /&gt;
    delay(noteDuration);&lt;br /&gt;
    &lt;br /&gt;
    // stop the waveform generation before the next note.&lt;br /&gt;
    noTone(PIN_BUZZER);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==étapes de fabrication==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===étape 1: câbler et souder===&lt;br /&gt;
câbler les fils entre les leds, la carte arduino et le bouton puis souder les fils si nécessaire et enfin téléverser le programme dans la carte si nécessaire.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Cablage.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
===étape 2: le support===&lt;br /&gt;
réaliser le prototype en carton &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Tonk1.jpg|200px]]&lt;br /&gt;
[[Fichier:Tonk2.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
===étape ...===&lt;br /&gt;
===troubleshouting===&lt;br /&gt;
quelles sont difficultés, les problèmes, quelles sont les solutions, les trucs et astuces pour que ça marche ?&lt;br /&gt;
&lt;br /&gt;
1er problème : le programme ne marchait pas car la LED était montée à l'envers&lt;br /&gt;
&lt;br /&gt;
2ème problème : adapter la taille du support qui était d'abord trop grand&lt;br /&gt;
&lt;br /&gt;
==Sources et documentation complémentaire==&lt;br /&gt;
&lt;br /&gt;
==ne pas modifier sous cette ligne==&lt;br /&gt;
[[Catégorie:Enib2024]]&lt;/div&gt;</summary>
		<author><name>Arnaud...</name></author>	</entry>

	<entry>
		<id>http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2024_:_CatchTheJackpot&amp;diff=26189</id>
		<title>ENIB 2024 : CatchTheJackpot</title>
		<link rel="alternate" type="text/html" href="http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2024_:_CatchTheJackpot&amp;diff=26189"/>
				<updated>2024-01-31T10:36:49Z</updated>
		
		<summary type="html">&lt;p&gt;Arnaud... : /* Code : */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==description==&lt;br /&gt;
&lt;br /&gt;
Ce projet fonction grâce à une carte Arduino, des LEDs et un bouton. &lt;br /&gt;
&lt;br /&gt;
Une lumière traverse le ruban de gauche à droite et lorsqu'elle est au milieu, il faut appuyer sur le bouton au bon moment pour gagner.&lt;br /&gt;
&lt;br /&gt;
==réalisé par :==&lt;br /&gt;
 -Arnaud Genty&lt;br /&gt;
 -Maxime Bintein&lt;br /&gt;
 -Tristan Le Coz&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
éventuelle vidéo&lt;br /&gt;
&lt;br /&gt;
==Liste des composants==&lt;br /&gt;
&lt;br /&gt;
* Bouton poussoir style Arcade&lt;br /&gt;
* Arduino nano&lt;br /&gt;
* 2 rubans de LED adressable (85 LEDs pour être exacte) &lt;br /&gt;
* Carton&lt;br /&gt;
* Bois&lt;br /&gt;
* Câbles mini-USB&lt;br /&gt;
* Câbles&lt;br /&gt;
* écran LCD&lt;br /&gt;
* Breadboard&lt;br /&gt;
* 2 résistances de 500kΩ&lt;br /&gt;
&lt;br /&gt;
==Outils==&lt;br /&gt;
&lt;br /&gt;
* Cutter&lt;br /&gt;
* Marqueur noir&lt;br /&gt;
* Pistolet à colle&lt;br /&gt;
* Scotch&lt;br /&gt;
* Fer à souder&lt;br /&gt;
* Scie à bois&lt;br /&gt;
* Perceuse&lt;br /&gt;
* Bibliothèque Arduino FastLed &lt;br /&gt;
  https://fastled.io/&lt;br /&gt;
&lt;br /&gt;
==fichiers à joindre==&lt;br /&gt;
code, ficher d'impression 3D, de découpe laser ou vinyle, ...&lt;br /&gt;
&lt;br /&gt;
==Code :==&lt;br /&gt;
&lt;br /&gt;
//Programme fait sur carte STM8266 / WEMOS D1 mini&lt;br /&gt;
#include &amp;quot;pitches.h&amp;quot;&lt;br /&gt;
#include &amp;quot;FastLED.h&amp;quot;                    //bibliothèque pour controler le ruban led&lt;br /&gt;
#include &amp;lt;Wire.h&amp;gt;                  //bibliothèque écran&lt;br /&gt;
#include &amp;lt;LiquidCrystal_I2C.h&amp;gt;     //bibliothèque écran&lt;br /&gt;
#define REST 0&lt;br /&gt;
#define NUM_LEDS 86&lt;br /&gt;
#define NUM_OF_LEDS_BY_LEVEL 17         // nombre de leds par niveau&lt;br /&gt;
#define NUM_OF_LEVELS 5                  // nombre de niveaux&lt;br /&gt;
#define PIN_BTN D3                       // Entree du bouton&lt;br /&gt;
#define PIN_LEDS D4                      // Sortie du ruban led&lt;br /&gt;
#define PIN_BUZZER D8                    // Signal de sortie buzzer&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// -------- INIT VARIABLES --------&lt;br /&gt;
LiquidCrystal_I2C lcd(0x27, 16, 2);&lt;br /&gt;
CRGB leds[NUM_LEDS]; //Création d'une liste avec chaque led&lt;br /&gt;
CRGB randomcolor  = CHSV(random(192), 255, 255);&lt;br /&gt;
int level = 0;        // niveau auquel le joueur est&lt;br /&gt;
int delay_level = 30; // délai qui permet de controler la vitesse de déplacement de la led&lt;br /&gt;
auto color = CRGB::Blue; // couleur de la led qui se déplace&lt;br /&gt;
int score = 0;           // score du joueur&lt;br /&gt;
const double coef[] = {1,1.5,2,2.5,3}; // coefficient multiplicateur de point par niveau&lt;br /&gt;
int last_point[NUM_OF_LEVELS];     // sauvegarde de la derniere led allumée pour la rallumer après flash()&lt;br /&gt;
bool game_in_progress = false;&lt;br /&gt;
int last_point_visu = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// -------- INIT FONCTIONS --------&lt;br /&gt;
&lt;br /&gt;
int move();            // déplacement de la led&lt;br /&gt;
void level_up();    // passage de niveau&lt;br /&gt;
void waiting_start_game(); //affichage d'attente de début du jeu&lt;br /&gt;
void flash();       // animation de victoire d'un niveau&lt;br /&gt;
&lt;br /&gt;
// -------- PROGRAMME --------&lt;br /&gt;
void setup() {&lt;br /&gt;
  FastLED.addLeds&amp;lt;NEOPIXEL, D4&amp;gt;(leds, NUM_LEDS);     // setup du ruban de led sur la sortie PIN_LEDS =&amp;gt; 2&lt;br /&gt;
  pinMode(PIN_BTN, INPUT);                          // setup du bouton dur l'entrée PIN_BTN =&amp;gt; 3&lt;br /&gt;
  FastLED.setBrightness(50);                    // setup de la luminosité&lt;br /&gt;
  Serial.begin(9600);                               // setup moniteur série pour debug &lt;br /&gt;
  int last_point[NUM_OF_LEVELS];&lt;br /&gt;
  pinMode(PIN_BUZZER, OUTPUT);&lt;br /&gt;
&lt;br /&gt;
  // -------- ECRAN --------&lt;br /&gt;
  lcd.init();                        // Initialize I2C LCD module&lt;br /&gt;
  lcd.backlight();                   // Turn backlight ON&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  waiting_start_game();&lt;br /&gt;
    lcd.setCursor(0,0);&lt;br /&gt;
    lcd.print(&amp;quot;    Cliquer &amp;quot;);&lt;br /&gt;
    lcd.setCursor(0,1);&lt;br /&gt;
    lcd.print(&amp;quot; pour commencer&amp;quot;);&lt;br /&gt;
    FastLED.clear();&lt;br /&gt;
  if (digitalRead(PIN_BTN)==LOW){&lt;br /&gt;
    musique();&lt;br /&gt;
    game_in_progress = true;&lt;br /&gt;
    lcd.clear();&lt;br /&gt;
    lcd.setCursor(0,0);&lt;br /&gt;
    lcd.print(&amp;quot;Partie en cours !&amp;quot;);&lt;br /&gt;
    lcd.setCursor(0,1);&lt;br /&gt;
    lcd.print(&amp;quot;XoXoXoXoXoXoXoXo&amp;quot;);&lt;br /&gt;
    FastLED.clear();&lt;br /&gt;
    delay(400);&lt;br /&gt;
    while(game_in_progress){&lt;br /&gt;
      move();&lt;br /&gt;
      if (digitalRead(PIN_BTN)==LOW &amp;amp;&amp;amp; game_in_progress==true){&lt;br /&gt;
        level_up();&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
int move(){&lt;br /&gt;
  // Permet de faire bouger la LED de gauche à droite&lt;br /&gt;
  for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++){&lt;br /&gt;
    // -------- DEBUGGING -------- // &lt;br /&gt;
    /*&lt;br /&gt;
    Serial.print(&amp;quot;val de la led: &amp;quot;);&lt;br /&gt;
    Serial.print(i);&lt;br /&gt;
    Serial.print(&amp;quot;\n&amp;quot;);&lt;br /&gt;
    */&lt;br /&gt;
    if (digitalRead(PIN_BTN)==LOW){     //Stock des scores LEDs 1 -&amp;gt; 9 -&amp;gt; 1&lt;br /&gt;
      int center = abs(i - (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL / 2));&lt;br /&gt;
      if (center &amp;lt;= NUM_OF_LEDS_BY_LEVEL/2) {&lt;br /&gt;
        last_point[level] = NUM_OF_LEDS_BY_LEVEL/2 - center + 1;  // Les points augmentent jusqu'à 9&lt;br /&gt;
      } else {&lt;br /&gt;
        last_point[level] = 0;  // À partir de la position 9, les points diminuent&lt;br /&gt;
      }&lt;br /&gt;
    //   if(i&amp;lt;(1/2*NUM_OF_LEDS_BY_LEVEL)){&lt;br /&gt;
    //     last_point[level] = i;&lt;br /&gt;
    //   }&lt;br /&gt;
    //   else{&lt;br /&gt;
    //     for(int degr = 1; degr&amp;lt;NUM_OF_LEDS_BY_LEVEL; degr++)&lt;br /&gt;
    //     last_point[level] = (i - degr);&lt;br /&gt;
      &lt;br /&gt;
    // }&lt;br /&gt;
      int last_point_visu = i-1;&lt;br /&gt;
      return i-1;&lt;br /&gt;
      // -------- DEBUGGING -------- //&lt;br /&gt;
      /*&lt;br /&gt;
      Serial.print(&amp;quot;last_point_visu&amp;quot;);&lt;br /&gt;
      Serial.print(last_point_visu);&lt;br /&gt;
       &lt;br /&gt;
      for(int z=0; z&amp;lt;NUM_OF_LEVELS; z++){&lt;br /&gt;
        Serial.print(last_point[z]);&lt;br /&gt;
        Serial.print(&amp;quot;\n&amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
      */&lt;br /&gt;
      &lt;br /&gt;
      &lt;br /&gt;
    }&lt;br /&gt;
    //Eteins les LEDs derrière la LED mouvante&lt;br /&gt;
    leds[i - 1] = CRGB::Black;&lt;br /&gt;
    delay(3);&lt;br /&gt;
    leds[level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2] = CRGB::Yellow;&lt;br /&gt;
    leds[i] = color;&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(delay_level);&lt;br /&gt;
  }&lt;br /&gt;
  leds[NUM_OF_LEDS_BY_LEVEL * level + 20] = CRGB::Black;&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
  delay(delay_level);&lt;br /&gt;
  for (int i = NUM_OF_LEDS_BY_LEVEL * level +  NUM_OF_LEDS_BY_LEVEL - 1; i &amp;gt;= NUM_OF_LEDS_BY_LEVEL * level ; i--)&lt;br /&gt;
  {&lt;br /&gt;
    // -------- DEBUGGING -------- //&lt;br /&gt;
    /*&lt;br /&gt;
    Serial.print(&amp;quot;val de la led: &amp;quot;);&lt;br /&gt;
    Serial.print(i);&lt;br /&gt;
    Serial.print(&amp;quot;\n&amp;quot;);&lt;br /&gt;
    */&lt;br /&gt;
    if (digitalRead(PIN_BTN)==LOW){           //Stock des scores LEDs 1 -&amp;gt; 9 -&amp;gt; 1&lt;br /&gt;
      int center = abs(i - (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL / 2));&lt;br /&gt;
      if (center &amp;lt;= NUM_OF_LEDS_BY_LEVEL/2) {&lt;br /&gt;
        last_point[level] = NUM_OF_LEDS_BY_LEVEL/2 - center + 1;  // Les points augmentent jusqu'à 9&lt;br /&gt;
      } else {&lt;br /&gt;
        last_point[level] = 0;  // À partir de la position 9, les points diminuent&lt;br /&gt;
      }&lt;br /&gt;
      // if(i&amp;lt;(1/2*NUM_OF_LEDS_BY_LEVEL)){&lt;br /&gt;
      //   last_point[level] = i;&lt;br /&gt;
      // }&lt;br /&gt;
      // else{&lt;br /&gt;
      //   for(int degr = 1; degr&amp;lt;NUM_OF_LEDS_BY_LEVEL; degr++)&lt;br /&gt;
      //   last_point[level] = (i - degr);&lt;br /&gt;
      //   }&lt;br /&gt;
    &lt;br /&gt;
      int last_point_visu = i+1;&lt;br /&gt;
      return i+1;&lt;br /&gt;
      &lt;br /&gt;
      // -------- DEBUGGING -------- //&lt;br /&gt;
      /*&lt;br /&gt;
      Serial.print(&amp;quot;last_point_visu&amp;quot;);&lt;br /&gt;
      Serial.print(last_point_visu);&lt;br /&gt;
      &lt;br /&gt;
      for(int z=0; z&amp;lt;NUM_OF_LEVELS; z++){&lt;br /&gt;
        Serial.print(last_point[z]);&lt;br /&gt;
        Serial.print(&amp;quot;\n&amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
      */&lt;br /&gt;
      &lt;br /&gt;
    }&lt;br /&gt;
    //Eteins les LEDs derrière la LED mouvante&lt;br /&gt;
    leds[i + 1] = CRGB::Black;&lt;br /&gt;
    delay(3);&lt;br /&gt;
    leds[level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2] = CRGB::Yellow;&lt;br /&gt;
    leds[i] = color;&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(delay_level);&lt;br /&gt;
  }&lt;br /&gt;
    leds[NUM_OF_LEDS_BY_LEVEL] = CRGB::Black;&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(delay_level);&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void flash()   // fonction de décoration qui fait clignoter les leds en blanc avant le passage de niveau&lt;br /&gt;
{&lt;br /&gt;
  for (int cpt = 0; cpt &amp;lt; 4; cpt++) &lt;br /&gt;
  {&lt;br /&gt;
    for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++)  // On met toute les leds du niveau en blanc&lt;br /&gt;
    {&lt;br /&gt;
      leds[i] = CRGB::Green;&lt;br /&gt;
    }&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(100);&lt;br /&gt;
    for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++) // On éteint toutes les leds du niveau&lt;br /&gt;
    {&lt;br /&gt;
      leds[i] = CRGB::Black;&lt;br /&gt;
    }&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(100);&lt;br /&gt;
  }&lt;br /&gt;
  leds[last_point_visu] = CRGB::Purple;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void level_up()   // changement de niveau&lt;br /&gt;
{&lt;br /&gt;
  flash();  // animation&lt;br /&gt;
  level++;  // incrémentation de la variable niveau&lt;br /&gt;
  delay_level -= 4; // le jeu devient de plus en plus rapide&lt;br /&gt;
&lt;br /&gt;
  if (level &amp;gt;= NUM_OF_LEVELS)   // fin du jeu&lt;br /&gt;
  {&lt;br /&gt;
    compute_score(); //Calcul le score&lt;br /&gt;
    show_score(); //Affiche le score sur un écran à crystaux liquides&lt;br /&gt;
&lt;br /&gt;
    //Remise des valeurs pas défaut&lt;br /&gt;
    level = 0;      &lt;br /&gt;
    score = 0;&lt;br /&gt;
    delay_level = 30;&lt;br /&gt;
    game_in_progress = false;&lt;br /&gt;
    for(int w=0; w&amp;lt;NUM_OF_LEVELS;w++){&lt;br /&gt;
      last_point[w] = 0;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void waiting_start_game(){&lt;br /&gt;
  // Allume toutes les LEDs en bleu avant de faire commencer la partie&lt;br /&gt;
  for (int w = 0; w &amp;lt; NUM_LEDS; w++){&lt;br /&gt;
    leds[w] = CRGB::Blue;&lt;br /&gt;
  }&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int compute_score(){&lt;br /&gt;
  // Récupere les élements du tableau last_point et les additionnes&lt;br /&gt;
  for (int i = 0; i&amp;lt;NUM_OF_LEVELS; i++){&lt;br /&gt;
    if (i &amp;gt; 2) {&lt;br /&gt;
      // Pour les niveaux 4 et 5, le score est diviser par deux&lt;br /&gt;
      score += last_point[i] / 2;&lt;br /&gt;
    } else {&lt;br /&gt;
      score += last_point[i];&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  // -------- DEBUGGING -------- //&lt;br /&gt;
  /*&lt;br /&gt;
  Serial.print(&amp;quot;Score : &amp;quot;);&lt;br /&gt;
  Serial.println(score);&lt;br /&gt;
  */&lt;br /&gt;
  return score;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int show_score(){&lt;br /&gt;
  lcd.clear();&lt;br /&gt;
  lcd.setCursor(0,0);&lt;br /&gt;
  lcd.print(&amp;quot;   Score : &amp;quot;);&lt;br /&gt;
  lcd.print(score);&lt;br /&gt;
  lcd.setCursor(0,1);&lt;br /&gt;
  lcd.print(&amp;quot;  Bien joue !!&amp;quot;); // Je ne sais pas comment mettre des caractères speciaux (hors ASCII 128)&lt;br /&gt;
  delay(5000);&lt;br /&gt;
  lcd.clear();&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ----- MUSIQUE ----- // &lt;br /&gt;
&lt;br /&gt;
int melody[] = {&lt;br /&gt;
&lt;br /&gt;
  //Based on the arrangement at https://www.flutetunes.com/tunes.php?id=169&lt;br /&gt;
  &lt;br /&gt;
  NOTE_AS4,-2,  NOTE_F4,8,  NOTE_F4,8,  NOTE_AS4,8,//1&lt;br /&gt;
  NOTE_GS4,16,  NOTE_FS4,16,  NOTE_GS4,-2,&lt;br /&gt;
  NOTE_AS4,-2,  NOTE_FS4,8,  NOTE_FS4,8,  NOTE_AS4,8,&lt;br /&gt;
  NOTE_A4,16,  NOTE_G4,16,  NOTE_A4,-2,&lt;br /&gt;
  REST,1, &lt;br /&gt;
&lt;br /&gt;
  NOTE_AS4,4,  NOTE_F4,-4,  NOTE_AS4,8,  NOTE_AS4,16,  NOTE_C5,16, NOTE_D5,16, NOTE_DS5,16,//7&lt;br /&gt;
  NOTE_F5,2,  NOTE_F5,8,  NOTE_F5,8,  NOTE_F5,8,  NOTE_FS5,16, NOTE_GS5,16,&lt;br /&gt;
  NOTE_AS5,-2,  NOTE_AS5,8,  NOTE_AS5,8,  NOTE_GS5,8,  NOTE_FS5,16,&lt;br /&gt;
  NOTE_GS5,-8,  NOTE_FS5,16,  NOTE_F5,2,  NOTE_F5,4, &lt;br /&gt;
&lt;br /&gt;
  NOTE_DS5,-8, NOTE_F5,16, NOTE_FS5,2, NOTE_F5,8, NOTE_DS5,8, //11&lt;br /&gt;
  NOTE_CS5,-8, NOTE_DS5,16, NOTE_F5,2, NOTE_DS5,8, NOTE_CS5,8,&lt;br /&gt;
  NOTE_C5,-8, NOTE_D5,16, NOTE_E5,2, NOTE_G5,8, &lt;br /&gt;
  NOTE_F5,16, NOTE_F4,16, NOTE_F4,16, NOTE_F4,16,NOTE_F4,16,NOTE_F4,16,NOTE_F4,16,NOTE_F4,16,NOTE_F4,8, NOTE_F4,16,NOTE_F4,8,&lt;br /&gt;
&lt;br /&gt;
  NOTE_AS4,4,  NOTE_F4,-4,  NOTE_AS4,8,  NOTE_AS4,16,  NOTE_C5,16, NOTE_D5,16, NOTE_DS5,16,//15&lt;br /&gt;
  NOTE_F5,2,  NOTE_F5,8,  NOTE_F5,8,  NOTE_F5,8,  NOTE_FS5,16, NOTE_GS5,16,&lt;br /&gt;
  NOTE_AS5,-2, NOTE_CS6,4,&lt;br /&gt;
  NOTE_C6,4, NOTE_A5,2, NOTE_F5,4,&lt;br /&gt;
  NOTE_FS5,-2, NOTE_AS5,4,&lt;br /&gt;
  NOTE_A5,4, NOTE_F5,2, NOTE_F5,4,&lt;br /&gt;
&lt;br /&gt;
  NOTE_FS5,-2, NOTE_AS5,4,&lt;br /&gt;
  NOTE_A5,4, NOTE_F5,2, NOTE_D5,4,&lt;br /&gt;
  NOTE_DS5,-2, NOTE_FS5,4,&lt;br /&gt;
  NOTE_F5,4, NOTE_CS5,2, NOTE_AS4,4,&lt;br /&gt;
  NOTE_C5,-8, NOTE_D5,16, NOTE_E5,2, NOTE_G5,8, &lt;br /&gt;
  NOTE_F5,16, NOTE_F4,16, NOTE_F4,16, NOTE_F4,16,NOTE_F4,16,NOTE_F4,16,NOTE_F4,16,NOTE_F4,16,NOTE_F4,8, NOTE_F4,16,NOTE_F4,8&lt;br /&gt;
  &lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void musique(){&lt;br /&gt;
  int tempo = 60;&lt;br /&gt;
  // sizeof gives the number of bytes, each int value is composed of two bytes (16 bits)&lt;br /&gt;
  // there are two values per note (pitch and duration), so for each note there are four bytes&lt;br /&gt;
  int notes = sizeof(melody) / sizeof(melody[0]) / 2;&lt;br /&gt;
  &lt;br /&gt;
  // this calculates the duration of a whole note in ms&lt;br /&gt;
  int wholenote = (60000 * 2) / tempo;&lt;br /&gt;
  &lt;br /&gt;
  int divider = 0, noteDuration = 0;&lt;br /&gt;
  // iterate over the notes of the melody. &lt;br /&gt;
  // Remember, the array is twice the number of notes (notes + durations)&lt;br /&gt;
  for (int thisNote = 0; thisNote &amp;lt; notes * 2; thisNote = thisNote + 2) {&lt;br /&gt;
&lt;br /&gt;
    // calculates the duration of each note&lt;br /&gt;
    divider = melody[thisNote + 1];&lt;br /&gt;
    if (divider &amp;gt; 0) {&lt;br /&gt;
      // regular note, just proceed&lt;br /&gt;
      noteDuration = (wholenote) / divider;&lt;br /&gt;
    } else if (divider &amp;lt; 0) {&lt;br /&gt;
      // dotted notes are represented with negative durations!!&lt;br /&gt;
      noteDuration = (wholenote) / abs(divider);&lt;br /&gt;
      noteDuration *= 1.5; // increases the duration in half for dotted notes&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // we only play the note for 90% of the duration, leaving 10% as a pause&lt;br /&gt;
    tone(PIN_BUZZER, melody[thisNote], noteDuration*0.9);&lt;br /&gt;
&lt;br /&gt;
    // Wait for the specief duration before playing the next note.&lt;br /&gt;
    delay(noteDuration);&lt;br /&gt;
    &lt;br /&gt;
    // stop the waveform generation before the next note.&lt;br /&gt;
    noTone(PIN_BUZZER);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==étapes de fabrication==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===étape 1: câbler et souder===&lt;br /&gt;
câbler les fils entre les leds, la carte arduino et le bouton puis souder les fils si nécessaire et enfin téléverser le programme dans la carte si nécessaire.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Cablage.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
===étape 2: le support===&lt;br /&gt;
réaliser le support en coupant et collant les cartons&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Tonk1.jpg|200px]]&lt;br /&gt;
[[Fichier:Tonk2.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
===étape ...===&lt;br /&gt;
===troubleshouting===&lt;br /&gt;
quelles sont difficultés, les problèmes, quelles sont les solutions, les trucs et astuces pour que ça marche ?&lt;br /&gt;
&lt;br /&gt;
1er problème : le programme ne marchait pas car la LED était montée à l'envers&lt;br /&gt;
&lt;br /&gt;
2ème problème : adapter la taille du support qui était d'abord trop grand&lt;br /&gt;
&lt;br /&gt;
==Sources et documentation complémentaire==&lt;br /&gt;
&lt;br /&gt;
==ne pas modifier sous cette ligne==&lt;br /&gt;
[[Catégorie:Enib2024]]&lt;/div&gt;</summary>
		<author><name>Arnaud...</name></author>	</entry>

	<entry>
		<id>http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2024_:_CatchTheJackpot&amp;diff=26183</id>
		<title>ENIB 2024 : CatchTheJackpot</title>
		<link rel="alternate" type="text/html" href="http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2024_:_CatchTheJackpot&amp;diff=26183"/>
				<updated>2024-01-31T10:33:17Z</updated>
		
		<summary type="html">&lt;p&gt;Arnaud... : /* Outils */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==description==&lt;br /&gt;
&lt;br /&gt;
Ce projet fonction grâce à une carte Arduino, des LEDs et un bouton. &lt;br /&gt;
&lt;br /&gt;
Une lumière traverse le ruban de gauche à droite et lorsqu'elle est au milieu, il faut appuyer sur le bouton au bon moment pour gagner.&lt;br /&gt;
&lt;br /&gt;
==réalisé par :==&lt;br /&gt;
 -Arnaud Genty&lt;br /&gt;
 -Maxime Bintein&lt;br /&gt;
 -Tristan Le Coz&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
éventuelle vidéo&lt;br /&gt;
&lt;br /&gt;
==Liste des composants==&lt;br /&gt;
&lt;br /&gt;
* Bouton poussoir style Arcade&lt;br /&gt;
* Arduino nano&lt;br /&gt;
* 2 rubans de LED adressable (85 LEDs pour être exacte) &lt;br /&gt;
* Carton&lt;br /&gt;
* Bois&lt;br /&gt;
* Câbles mini-USB&lt;br /&gt;
* Câbles&lt;br /&gt;
* écran LCD&lt;br /&gt;
* Breadboard&lt;br /&gt;
* 2 résistances de 500kΩ&lt;br /&gt;
&lt;br /&gt;
==Outils==&lt;br /&gt;
&lt;br /&gt;
* Cutter&lt;br /&gt;
* Marqueur noir&lt;br /&gt;
* Pistolet à colle&lt;br /&gt;
* Scotch&lt;br /&gt;
* Fer à souder&lt;br /&gt;
* Scie à bois&lt;br /&gt;
* Perceuse&lt;br /&gt;
* Bibliothèque Arduino FastLed &lt;br /&gt;
  https://fastled.io/&lt;br /&gt;
&lt;br /&gt;
==fichiers à joindre==&lt;br /&gt;
code, ficher d'impression 3D, de découpe laser ou vinyle, ...&lt;br /&gt;
&lt;br /&gt;
===Code :===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Arduino&amp;quot; line&amp;gt;&lt;br /&gt;
#include &amp;quot;FastLED.h&amp;quot;                    //bibliothèque pour controler le ruban led&lt;br /&gt;
#define NUM_LEDS 86&lt;br /&gt;
#define NUM_OF_LEDS_BY_LEVEL 17         // nombre de leds par niveau&lt;br /&gt;
#define NUM_OF_LEVELS 5                  // nombre de niveaux&lt;br /&gt;
#define PIN_BTN 3                       // Entree du bouton&lt;br /&gt;
#define PIN_LEDS 2                      // Sortie du ruban led&lt;br /&gt;
&lt;br /&gt;
// Dans ce programme nous avons utilisé presque intégralement des variables globales&lt;br /&gt;
&lt;br /&gt;
CRGB leds[NUM_LEDS];&lt;br /&gt;
int level = 0;        // niveau auquel le joueur est&lt;br /&gt;
int delay_level = 30; // délai qui permet de controler la vitesse de déplacement de la led&lt;br /&gt;
auto color = CRGB::Purple; // couleur de la led qui se déplace&lt;br /&gt;
int score = 0;           // socre du joueur&lt;br /&gt;
const double coef[] = {1, 1.4, 1.7, 1.9, 2, 2.2}; // coefficient multiplicateur de point par niveau&lt;br /&gt;
int last_point = 0;     // sauvegarde de la derniere led allumée pour la rallumer après flash()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Déclarations de fonctions&lt;br /&gt;
int compute_score(int score_of_level);    // calcul du score par niveau&lt;br /&gt;
int up();           // deplacement led&lt;br /&gt;
int down();         // deplacement led dans l'autre sense&lt;br /&gt;
void level_up();    // passage de niveau&lt;br /&gt;
void flash();       // animation de victoire d'un niveau&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  FastLED.addLeds&amp;lt;NEOPIXEL, 2&amp;gt;(leds, NUM_LEDS);     // setup du ruban de led sur la sortie PIN_LEDS =&amp;gt; 2&lt;br /&gt;
  pinMode(PIN_BTN, INPUT);                          // setup du bouton dur l'entrée PIN_BTN =&amp;gt; 3&lt;br /&gt;
  Serial.begin(9600);                               // setup moniteur série pour debug&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
&lt;br /&gt;
  int score_of_level;&lt;br /&gt;
  if (score_of_level = up())              // led avance dans un sense&lt;br /&gt;
  {&lt;br /&gt;
    score += compute_score(score_of_level);       // ajout score du niveau&lt;br /&gt;
    level_up();&lt;br /&gt;
  }&lt;br /&gt;
  else if (score_of_level = down())       // led avance dans l'autre sense&lt;br /&gt;
  {&lt;br /&gt;
    score += compute_score(score_of_level);       // ajout score du niveau&lt;br /&gt;
    level_up();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int compute_score(int score_of_level)&lt;br /&gt;
{&lt;br /&gt;
  return (NUM_OF_LEDS_BY_LEVEL/2 - (int)abs((level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2) - score_of_level)) * coef[level] + 1;&lt;br /&gt;
  // On calcul le nombre de leds d'un niveau moins la différence entre la led du joueur et celle du milieu on ajoute 2 et on multiplie par le coefficient de points du level&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int up()&lt;br /&gt;
{&lt;br /&gt;
  for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++)&lt;br /&gt;
  {&lt;br /&gt;
    if (digitalRead(PIN_BTN))   // appuie sur le bouton&lt;br /&gt;
    {&lt;br /&gt;
      while (digitalRead(PIN_BTN))    // blocage du bouton tant que celui-ci n'a pas été relaché&lt;br /&gt;
      {&lt;br /&gt;
        delay(2);&lt;br /&gt;
      }&lt;br /&gt;
      last_point = i-1;     // on concerve la valeur de la led choisie pour la réafficher après le flash&lt;br /&gt;
      return i - 1;   // renvoie la position de la led au moment de l'appuie sur le bouton&lt;br /&gt;
    }&lt;br /&gt;
    leds[i - 1] = CRGB::Black;&lt;br /&gt;
    delay(3);&lt;br /&gt;
&lt;br /&gt;
    leds[level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2] = CRGB::White;&lt;br /&gt;
    leds[i] = color;&lt;br /&gt;
&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(delay_level);&lt;br /&gt;
  }&lt;br /&gt;
  leds[NUM_OF_LEDS_BY_LEVEL * level + 20] = CRGB::Black;&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
  delay(delay_level);&lt;br /&gt;
  return 0;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int down()&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  for (int i = NUM_OF_LEDS_BY_LEVEL * level +  NUM_OF_LEDS_BY_LEVEL - 1; i &amp;gt;= NUM_OF_LEDS_BY_LEVEL * level ; i--)&lt;br /&gt;
  {&lt;br /&gt;
    if (digitalRead(PIN_BTN))&lt;br /&gt;
    {&lt;br /&gt;
      while (digitalRead(PIN_BTN))&lt;br /&gt;
      {&lt;br /&gt;
        delay(2);&lt;br /&gt;
      }&lt;br /&gt;
      last_point = i+1;&lt;br /&gt;
      return i + 1;   // renvoie la position de la led au moment de l'appuie sur le bouton&lt;br /&gt;
    }&lt;br /&gt;
    leds[i + 1] = CRGB::Black;&lt;br /&gt;
    delay(3);&lt;br /&gt;
&lt;br /&gt;
    leds[level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2] = CRGB::White;&lt;br /&gt;
    leds[i] = color;&lt;br /&gt;
&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(delay_level);&lt;br /&gt;
  }&lt;br /&gt;
  leds[NUM_OF_LEDS_BY_LEVEL] = CRGB::Black;&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
  delay(delay_level);&lt;br /&gt;
  return 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
void flash()   // fonction de décoration qui fait clignoter les leds en blanc avant le passage de niveau&lt;br /&gt;
{&lt;br /&gt;
  for (int cpt = 0; cpt &amp;lt; 4; cpt++) &lt;br /&gt;
  {&lt;br /&gt;
    for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++)  // On met toute les leds du niveau en blanc&lt;br /&gt;
    {&lt;br /&gt;
      leds[i] = CRGB::White;&lt;br /&gt;
    }&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
&lt;br /&gt;
    delay(100);&lt;br /&gt;
    for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++) // On éteint toutes les leds du niveau&lt;br /&gt;
    {&lt;br /&gt;
      leds[i] = CRGB::Black;&lt;br /&gt;
    }&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(100);&lt;br /&gt;
  }&lt;br /&gt;
  leds[last_point] = CRGB::Red;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void score_leds()   // affichage du score avec les leds&lt;br /&gt;
{&lt;br /&gt;
  for (int i = 0; i &amp;lt; score; i++)&lt;br /&gt;
  {&lt;br /&gt;
    leds[i] = CRGB::Red;&lt;br /&gt;
&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(10);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void reset_leds()   // on éteint toutes les leds&lt;br /&gt;
{&lt;br /&gt;
  for (int i = 0; i &amp;lt; NUM_LEDS; i++)&lt;br /&gt;
  {&lt;br /&gt;
    leds[i] = CRGB::Black;&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void animation_attente()&lt;br /&gt;
{&lt;br /&gt;
    for(int i = 0; i &amp;lt; NUM_LEDS; i++)&lt;br /&gt;
    {&lt;br /&gt;
      leds[i].red = random(0,255);&lt;br /&gt;
      leds[i].green = random(0,255);&lt;br /&gt;
      leds[i].blue = random(0,255);&lt;br /&gt;
    }&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
void level_up()   // changement de niveau&lt;br /&gt;
{&lt;br /&gt;
  flash();  // animation&lt;br /&gt;
  level++;  // incrémentation de la variable niveau&lt;br /&gt;
  delay_level -= 4; // le jeu devient de plus en plus rapide&lt;br /&gt;
  if (level &amp;gt;= NUM_OF_LEVELS)   // fin du jeu&lt;br /&gt;
  {&lt;br /&gt;
    reset_leds();&lt;br /&gt;
    score_leds();   // affichage score&lt;br /&gt;
    delay(3000);&lt;br /&gt;
    reset_leds();&lt;br /&gt;
    while (!digitalRead(PIN_BTN))   // on attend que l'utilisateur appuie sur un bonton&lt;br /&gt;
    {&lt;br /&gt;
      animation_attente();&lt;br /&gt;
      delay(200);&lt;br /&gt;
    }&lt;br /&gt;
    while (digitalRead(PIN_BTN))  // on vérifie que le bouton n'est pas resté appuyé&lt;br /&gt;
    {&lt;br /&gt;
      delay(10);&lt;br /&gt;
    }&lt;br /&gt;
    // on réinitialise le jeu&lt;br /&gt;
    level = 0;      &lt;br /&gt;
    reset_leds();&lt;br /&gt;
    score = 0;&lt;br /&gt;
    delay_level = 30;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==étapes de fabrication==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===étape 1: câbler et souder===&lt;br /&gt;
câbler les fils entre les leds, la carte arduino et le bouton puis souder les fils si nécessaire et enfin téléverser le programme dans la carte si nécessaire.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Cablage.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
===étape 2: le support===&lt;br /&gt;
réaliser le support en coupant et collant les cartons&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Tonk1.jpg|200px]]&lt;br /&gt;
[[Fichier:Tonk2.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
===étape ...===&lt;br /&gt;
===troubleshouting===&lt;br /&gt;
quelles sont difficultés, les problèmes, quelles sont les solutions, les trucs et astuces pour que ça marche ?&lt;br /&gt;
&lt;br /&gt;
1er problème : le programme ne marchait pas car la LED était montée à l'envers&lt;br /&gt;
&lt;br /&gt;
2ème problème : adapter la taille du support qui était d'abord trop grand&lt;br /&gt;
&lt;br /&gt;
==Sources et documentation complémentaire==&lt;br /&gt;
&lt;br /&gt;
==ne pas modifier sous cette ligne==&lt;br /&gt;
[[Catégorie:Enib2024]]&lt;/div&gt;</summary>
		<author><name>Arnaud...</name></author>	</entry>

	<entry>
		<id>http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2024_:_CatchTheJackpot&amp;diff=26178</id>
		<title>ENIB 2024 : CatchTheJackpot</title>
		<link rel="alternate" type="text/html" href="http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2024_:_CatchTheJackpot&amp;diff=26178"/>
				<updated>2024-01-31T10:32:38Z</updated>
		
		<summary type="html">&lt;p&gt;Arnaud... : /* Liste des composants */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==description==&lt;br /&gt;
&lt;br /&gt;
Ce projet fonction grâce à une carte Arduino, des LEDs et un bouton. &lt;br /&gt;
&lt;br /&gt;
Une lumière traverse le ruban de gauche à droite et lorsqu'elle est au milieu, il faut appuyer sur le bouton au bon moment pour gagner.&lt;br /&gt;
&lt;br /&gt;
==réalisé par :==&lt;br /&gt;
 -Arnaud Genty&lt;br /&gt;
 -Maxime Bintein&lt;br /&gt;
 -Tristan Le Coz&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
éventuelle vidéo&lt;br /&gt;
&lt;br /&gt;
==Liste des composants==&lt;br /&gt;
&lt;br /&gt;
* Bouton poussoir style Arcade&lt;br /&gt;
* Arduino nano&lt;br /&gt;
* 2 rubans de LED adressable (85 LEDs pour être exacte) &lt;br /&gt;
* Carton&lt;br /&gt;
* Bois&lt;br /&gt;
* Câbles mini-USB&lt;br /&gt;
* Câbles&lt;br /&gt;
* écran LCD&lt;br /&gt;
* Breadboard&lt;br /&gt;
* 2 résistances de 500kΩ&lt;br /&gt;
&lt;br /&gt;
==Outils==&lt;br /&gt;
&lt;br /&gt;
* Cutter&lt;br /&gt;
* Marqueur noir&lt;br /&gt;
* Pistolet à colle&lt;br /&gt;
* Scotch&lt;br /&gt;
* Fer à souder&lt;br /&gt;
&lt;br /&gt;
* Bibliothèque Arduino FastLed &lt;br /&gt;
  https://fastled.io/&lt;br /&gt;
==fichiers à joindre==&lt;br /&gt;
code, ficher d'impression 3D, de découpe laser ou vinyle, ...&lt;br /&gt;
&lt;br /&gt;
===Code :===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Arduino&amp;quot; line&amp;gt;&lt;br /&gt;
#include &amp;quot;FastLED.h&amp;quot;                    //bibliothèque pour controler le ruban led&lt;br /&gt;
#define NUM_LEDS 86&lt;br /&gt;
#define NUM_OF_LEDS_BY_LEVEL 17         // nombre de leds par niveau&lt;br /&gt;
#define NUM_OF_LEVELS 5                  // nombre de niveaux&lt;br /&gt;
#define PIN_BTN 3                       // Entree du bouton&lt;br /&gt;
#define PIN_LEDS 2                      // Sortie du ruban led&lt;br /&gt;
&lt;br /&gt;
// Dans ce programme nous avons utilisé presque intégralement des variables globales&lt;br /&gt;
&lt;br /&gt;
CRGB leds[NUM_LEDS];&lt;br /&gt;
int level = 0;        // niveau auquel le joueur est&lt;br /&gt;
int delay_level = 30; // délai qui permet de controler la vitesse de déplacement de la led&lt;br /&gt;
auto color = CRGB::Purple; // couleur de la led qui se déplace&lt;br /&gt;
int score = 0;           // socre du joueur&lt;br /&gt;
const double coef[] = {1, 1.4, 1.7, 1.9, 2, 2.2}; // coefficient multiplicateur de point par niveau&lt;br /&gt;
int last_point = 0;     // sauvegarde de la derniere led allumée pour la rallumer après flash()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Déclarations de fonctions&lt;br /&gt;
int compute_score(int score_of_level);    // calcul du score par niveau&lt;br /&gt;
int up();           // deplacement led&lt;br /&gt;
int down();         // deplacement led dans l'autre sense&lt;br /&gt;
void level_up();    // passage de niveau&lt;br /&gt;
void flash();       // animation de victoire d'un niveau&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  FastLED.addLeds&amp;lt;NEOPIXEL, 2&amp;gt;(leds, NUM_LEDS);     // setup du ruban de led sur la sortie PIN_LEDS =&amp;gt; 2&lt;br /&gt;
  pinMode(PIN_BTN, INPUT);                          // setup du bouton dur l'entrée PIN_BTN =&amp;gt; 3&lt;br /&gt;
  Serial.begin(9600);                               // setup moniteur série pour debug&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
&lt;br /&gt;
  int score_of_level;&lt;br /&gt;
  if (score_of_level = up())              // led avance dans un sense&lt;br /&gt;
  {&lt;br /&gt;
    score += compute_score(score_of_level);       // ajout score du niveau&lt;br /&gt;
    level_up();&lt;br /&gt;
  }&lt;br /&gt;
  else if (score_of_level = down())       // led avance dans l'autre sense&lt;br /&gt;
  {&lt;br /&gt;
    score += compute_score(score_of_level);       // ajout score du niveau&lt;br /&gt;
    level_up();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int compute_score(int score_of_level)&lt;br /&gt;
{&lt;br /&gt;
  return (NUM_OF_LEDS_BY_LEVEL/2 - (int)abs((level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2) - score_of_level)) * coef[level] + 1;&lt;br /&gt;
  // On calcul le nombre de leds d'un niveau moins la différence entre la led du joueur et celle du milieu on ajoute 2 et on multiplie par le coefficient de points du level&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int up()&lt;br /&gt;
{&lt;br /&gt;
  for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++)&lt;br /&gt;
  {&lt;br /&gt;
    if (digitalRead(PIN_BTN))   // appuie sur le bouton&lt;br /&gt;
    {&lt;br /&gt;
      while (digitalRead(PIN_BTN))    // blocage du bouton tant que celui-ci n'a pas été relaché&lt;br /&gt;
      {&lt;br /&gt;
        delay(2);&lt;br /&gt;
      }&lt;br /&gt;
      last_point = i-1;     // on concerve la valeur de la led choisie pour la réafficher après le flash&lt;br /&gt;
      return i - 1;   // renvoie la position de la led au moment de l'appuie sur le bouton&lt;br /&gt;
    }&lt;br /&gt;
    leds[i - 1] = CRGB::Black;&lt;br /&gt;
    delay(3);&lt;br /&gt;
&lt;br /&gt;
    leds[level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2] = CRGB::White;&lt;br /&gt;
    leds[i] = color;&lt;br /&gt;
&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(delay_level);&lt;br /&gt;
  }&lt;br /&gt;
  leds[NUM_OF_LEDS_BY_LEVEL * level + 20] = CRGB::Black;&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
  delay(delay_level);&lt;br /&gt;
  return 0;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int down()&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  for (int i = NUM_OF_LEDS_BY_LEVEL * level +  NUM_OF_LEDS_BY_LEVEL - 1; i &amp;gt;= NUM_OF_LEDS_BY_LEVEL * level ; i--)&lt;br /&gt;
  {&lt;br /&gt;
    if (digitalRead(PIN_BTN))&lt;br /&gt;
    {&lt;br /&gt;
      while (digitalRead(PIN_BTN))&lt;br /&gt;
      {&lt;br /&gt;
        delay(2);&lt;br /&gt;
      }&lt;br /&gt;
      last_point = i+1;&lt;br /&gt;
      return i + 1;   // renvoie la position de la led au moment de l'appuie sur le bouton&lt;br /&gt;
    }&lt;br /&gt;
    leds[i + 1] = CRGB::Black;&lt;br /&gt;
    delay(3);&lt;br /&gt;
&lt;br /&gt;
    leds[level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2] = CRGB::White;&lt;br /&gt;
    leds[i] = color;&lt;br /&gt;
&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(delay_level);&lt;br /&gt;
  }&lt;br /&gt;
  leds[NUM_OF_LEDS_BY_LEVEL] = CRGB::Black;&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
  delay(delay_level);&lt;br /&gt;
  return 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
void flash()   // fonction de décoration qui fait clignoter les leds en blanc avant le passage de niveau&lt;br /&gt;
{&lt;br /&gt;
  for (int cpt = 0; cpt &amp;lt; 4; cpt++) &lt;br /&gt;
  {&lt;br /&gt;
    for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++)  // On met toute les leds du niveau en blanc&lt;br /&gt;
    {&lt;br /&gt;
      leds[i] = CRGB::White;&lt;br /&gt;
    }&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
&lt;br /&gt;
    delay(100);&lt;br /&gt;
    for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++) // On éteint toutes les leds du niveau&lt;br /&gt;
    {&lt;br /&gt;
      leds[i] = CRGB::Black;&lt;br /&gt;
    }&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(100);&lt;br /&gt;
  }&lt;br /&gt;
  leds[last_point] = CRGB::Red;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void score_leds()   // affichage du score avec les leds&lt;br /&gt;
{&lt;br /&gt;
  for (int i = 0; i &amp;lt; score; i++)&lt;br /&gt;
  {&lt;br /&gt;
    leds[i] = CRGB::Red;&lt;br /&gt;
&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(10);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void reset_leds()   // on éteint toutes les leds&lt;br /&gt;
{&lt;br /&gt;
  for (int i = 0; i &amp;lt; NUM_LEDS; i++)&lt;br /&gt;
  {&lt;br /&gt;
    leds[i] = CRGB::Black;&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void animation_attente()&lt;br /&gt;
{&lt;br /&gt;
    for(int i = 0; i &amp;lt; NUM_LEDS; i++)&lt;br /&gt;
    {&lt;br /&gt;
      leds[i].red = random(0,255);&lt;br /&gt;
      leds[i].green = random(0,255);&lt;br /&gt;
      leds[i].blue = random(0,255);&lt;br /&gt;
    }&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
void level_up()   // changement de niveau&lt;br /&gt;
{&lt;br /&gt;
  flash();  // animation&lt;br /&gt;
  level++;  // incrémentation de la variable niveau&lt;br /&gt;
  delay_level -= 4; // le jeu devient de plus en plus rapide&lt;br /&gt;
  if (level &amp;gt;= NUM_OF_LEVELS)   // fin du jeu&lt;br /&gt;
  {&lt;br /&gt;
    reset_leds();&lt;br /&gt;
    score_leds();   // affichage score&lt;br /&gt;
    delay(3000);&lt;br /&gt;
    reset_leds();&lt;br /&gt;
    while (!digitalRead(PIN_BTN))   // on attend que l'utilisateur appuie sur un bonton&lt;br /&gt;
    {&lt;br /&gt;
      animation_attente();&lt;br /&gt;
      delay(200);&lt;br /&gt;
    }&lt;br /&gt;
    while (digitalRead(PIN_BTN))  // on vérifie que le bouton n'est pas resté appuyé&lt;br /&gt;
    {&lt;br /&gt;
      delay(10);&lt;br /&gt;
    }&lt;br /&gt;
    // on réinitialise le jeu&lt;br /&gt;
    level = 0;      &lt;br /&gt;
    reset_leds();&lt;br /&gt;
    score = 0;&lt;br /&gt;
    delay_level = 30;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==étapes de fabrication==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===étape 1: câbler et souder===&lt;br /&gt;
câbler les fils entre les leds, la carte arduino et le bouton puis souder les fils si nécessaire et enfin téléverser le programme dans la carte si nécessaire.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Cablage.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
===étape 2: le support===&lt;br /&gt;
réaliser le support en coupant et collant les cartons&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Tonk1.jpg|200px]]&lt;br /&gt;
[[Fichier:Tonk2.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
===étape ...===&lt;br /&gt;
===troubleshouting===&lt;br /&gt;
quelles sont difficultés, les problèmes, quelles sont les solutions, les trucs et astuces pour que ça marche ?&lt;br /&gt;
&lt;br /&gt;
1er problème : le programme ne marchait pas car la LED était montée à l'envers&lt;br /&gt;
&lt;br /&gt;
2ème problème : adapter la taille du support qui était d'abord trop grand&lt;br /&gt;
&lt;br /&gt;
==Sources et documentation complémentaire==&lt;br /&gt;
&lt;br /&gt;
==ne pas modifier sous cette ligne==&lt;br /&gt;
[[Catégorie:Enib2024]]&lt;/div&gt;</summary>
		<author><name>Arnaud...</name></author>	</entry>

	<entry>
		<id>http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2024_:_CatchTheJackpot&amp;diff=25992</id>
		<title>ENIB 2024 : CatchTheJackpot</title>
		<link rel="alternate" type="text/html" href="http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2024_:_CatchTheJackpot&amp;diff=25992"/>
				<updated>2024-01-30T15:15:37Z</updated>
		
		<summary type="html">&lt;p&gt;Arnaud... : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==description==&lt;br /&gt;
&lt;br /&gt;
Ce projet fonction grâce à une carte Arduino, des LEDs et un bouton. &lt;br /&gt;
&lt;br /&gt;
Une lumière traverse le ruban de gauche à droite et lorsqu'elle est au milieu, il faut appuyer sur le bouton au bon moment pour gagner.&lt;br /&gt;
&lt;br /&gt;
==réalisé par :==&lt;br /&gt;
 -Arnaud Genty&lt;br /&gt;
 -Maxime Bintein&lt;br /&gt;
 -Tristan Le Coz&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
éventuelle vidéo&lt;br /&gt;
&lt;br /&gt;
==Liste des composants==&lt;br /&gt;
&lt;br /&gt;
* Bouton poussoir style Arcade&lt;br /&gt;
* Arduino nano&lt;br /&gt;
* 2 rubans de LED adressable (85 LEDs pour être exacte) &lt;br /&gt;
* Carton&lt;br /&gt;
* Câbles mini-USB&lt;br /&gt;
* Câbles&lt;br /&gt;
&lt;br /&gt;
==Outils==&lt;br /&gt;
&lt;br /&gt;
* Cutter&lt;br /&gt;
* Marqueur noir&lt;br /&gt;
* Pistolet à colle&lt;br /&gt;
* Scotch&lt;br /&gt;
* Fer à souder&lt;br /&gt;
&lt;br /&gt;
* Bibliothèque Arduino FastLed &lt;br /&gt;
  https://fastled.io/&lt;br /&gt;
==fichiers à joindre==&lt;br /&gt;
code, ficher d'impression 3D, de découpe laser ou vinyle, ...&lt;br /&gt;
&lt;br /&gt;
===Code :===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Arduino&amp;quot; line&amp;gt;&lt;br /&gt;
#include &amp;quot;FastLED.h&amp;quot;                    //bibliothèque pour controler le ruban led&lt;br /&gt;
#define NUM_LEDS 86&lt;br /&gt;
#define NUM_OF_LEDS_BY_LEVEL 17         // nombre de leds par niveau&lt;br /&gt;
#define NUM_OF_LEVELS 5                  // nombre de niveaux&lt;br /&gt;
#define PIN_BTN 3                       // Entree du bouton&lt;br /&gt;
#define PIN_LEDS 2                      // Sortie du ruban led&lt;br /&gt;
&lt;br /&gt;
// Dans ce programme nous avons utilisé presque intégralement des variables globales&lt;br /&gt;
&lt;br /&gt;
CRGB leds[NUM_LEDS];&lt;br /&gt;
int level = 0;        // niveau auquel le joueur est&lt;br /&gt;
int delay_level = 30; // délai qui permet de controler la vitesse de déplacement de la led&lt;br /&gt;
auto color = CRGB::Purple; // couleur de la led qui se déplace&lt;br /&gt;
int score = 0;           // socre du joueur&lt;br /&gt;
const double coef[] = {1, 1.4, 1.7, 1.9, 2, 2.2}; // coefficient multiplicateur de point par niveau&lt;br /&gt;
int last_point = 0;     // sauvegarde de la derniere led allumée pour la rallumer après flash()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Déclarations de fonctions&lt;br /&gt;
int compute_score(int score_of_level);    // calcul du score par niveau&lt;br /&gt;
int up();           // deplacement led&lt;br /&gt;
int down();         // deplacement led dans l'autre sense&lt;br /&gt;
void level_up();    // passage de niveau&lt;br /&gt;
void flash();       // animation de victoire d'un niveau&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  FastLED.addLeds&amp;lt;NEOPIXEL, 2&amp;gt;(leds, NUM_LEDS);     // setup du ruban de led sur la sortie PIN_LEDS =&amp;gt; 2&lt;br /&gt;
  pinMode(PIN_BTN, INPUT);                          // setup du bouton dur l'entrée PIN_BTN =&amp;gt; 3&lt;br /&gt;
  Serial.begin(9600);                               // setup moniteur série pour debug&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
&lt;br /&gt;
  int score_of_level;&lt;br /&gt;
  if (score_of_level = up())              // led avance dans un sense&lt;br /&gt;
  {&lt;br /&gt;
    score += compute_score(score_of_level);       // ajout score du niveau&lt;br /&gt;
    level_up();&lt;br /&gt;
  }&lt;br /&gt;
  else if (score_of_level = down())       // led avance dans l'autre sense&lt;br /&gt;
  {&lt;br /&gt;
    score += compute_score(score_of_level);       // ajout score du niveau&lt;br /&gt;
    level_up();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int compute_score(int score_of_level)&lt;br /&gt;
{&lt;br /&gt;
  return (NUM_OF_LEDS_BY_LEVEL/2 - (int)abs((level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2) - score_of_level)) * coef[level] + 1;&lt;br /&gt;
  // On calcul le nombre de leds d'un niveau moins la différence entre la led du joueur et celle du milieu on ajoute 2 et on multiplie par le coefficient de points du level&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int up()&lt;br /&gt;
{&lt;br /&gt;
  for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++)&lt;br /&gt;
  {&lt;br /&gt;
    if (digitalRead(PIN_BTN))   // appuie sur le bouton&lt;br /&gt;
    {&lt;br /&gt;
      while (digitalRead(PIN_BTN))    // blocage du bouton tant que celui-ci n'a pas été relaché&lt;br /&gt;
      {&lt;br /&gt;
        delay(2);&lt;br /&gt;
      }&lt;br /&gt;
      last_point = i-1;     // on concerve la valeur de la led choisie pour la réafficher après le flash&lt;br /&gt;
      return i - 1;   // renvoie la position de la led au moment de l'appuie sur le bouton&lt;br /&gt;
    }&lt;br /&gt;
    leds[i - 1] = CRGB::Black;&lt;br /&gt;
    delay(3);&lt;br /&gt;
&lt;br /&gt;
    leds[level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2] = CRGB::White;&lt;br /&gt;
    leds[i] = color;&lt;br /&gt;
&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(delay_level);&lt;br /&gt;
  }&lt;br /&gt;
  leds[NUM_OF_LEDS_BY_LEVEL * level + 20] = CRGB::Black;&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
  delay(delay_level);&lt;br /&gt;
  return 0;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int down()&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  for (int i = NUM_OF_LEDS_BY_LEVEL * level +  NUM_OF_LEDS_BY_LEVEL - 1; i &amp;gt;= NUM_OF_LEDS_BY_LEVEL * level ; i--)&lt;br /&gt;
  {&lt;br /&gt;
    if (digitalRead(PIN_BTN))&lt;br /&gt;
    {&lt;br /&gt;
      while (digitalRead(PIN_BTN))&lt;br /&gt;
      {&lt;br /&gt;
        delay(2);&lt;br /&gt;
      }&lt;br /&gt;
      last_point = i+1;&lt;br /&gt;
      return i + 1;   // renvoie la position de la led au moment de l'appuie sur le bouton&lt;br /&gt;
    }&lt;br /&gt;
    leds[i + 1] = CRGB::Black;&lt;br /&gt;
    delay(3);&lt;br /&gt;
&lt;br /&gt;
    leds[level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2] = CRGB::White;&lt;br /&gt;
    leds[i] = color;&lt;br /&gt;
&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(delay_level);&lt;br /&gt;
  }&lt;br /&gt;
  leds[NUM_OF_LEDS_BY_LEVEL] = CRGB::Black;&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
  delay(delay_level);&lt;br /&gt;
  return 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
void flash()   // fonction de décoration qui fait clignoter les leds en blanc avant le passage de niveau&lt;br /&gt;
{&lt;br /&gt;
  for (int cpt = 0; cpt &amp;lt; 4; cpt++) &lt;br /&gt;
  {&lt;br /&gt;
    for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++)  // On met toute les leds du niveau en blanc&lt;br /&gt;
    {&lt;br /&gt;
      leds[i] = CRGB::White;&lt;br /&gt;
    }&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
&lt;br /&gt;
    delay(100);&lt;br /&gt;
    for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++) // On éteint toutes les leds du niveau&lt;br /&gt;
    {&lt;br /&gt;
      leds[i] = CRGB::Black;&lt;br /&gt;
    }&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(100);&lt;br /&gt;
  }&lt;br /&gt;
  leds[last_point] = CRGB::Red;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void score_leds()   // affichage du score avec les leds&lt;br /&gt;
{&lt;br /&gt;
  for (int i = 0; i &amp;lt; score; i++)&lt;br /&gt;
  {&lt;br /&gt;
    leds[i] = CRGB::Red;&lt;br /&gt;
&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(10);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void reset_leds()   // on éteint toutes les leds&lt;br /&gt;
{&lt;br /&gt;
  for (int i = 0; i &amp;lt; NUM_LEDS; i++)&lt;br /&gt;
  {&lt;br /&gt;
    leds[i] = CRGB::Black;&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void animation_attente()&lt;br /&gt;
{&lt;br /&gt;
    for(int i = 0; i &amp;lt; NUM_LEDS; i++)&lt;br /&gt;
    {&lt;br /&gt;
      leds[i].red = random(0,255);&lt;br /&gt;
      leds[i].green = random(0,255);&lt;br /&gt;
      leds[i].blue = random(0,255);&lt;br /&gt;
    }&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
void level_up()   // changement de niveau&lt;br /&gt;
{&lt;br /&gt;
  flash();  // animation&lt;br /&gt;
  level++;  // incrémentation de la variable niveau&lt;br /&gt;
  delay_level -= 4; // le jeu devient de plus en plus rapide&lt;br /&gt;
  if (level &amp;gt;= NUM_OF_LEVELS)   // fin du jeu&lt;br /&gt;
  {&lt;br /&gt;
    reset_leds();&lt;br /&gt;
    score_leds();   // affichage score&lt;br /&gt;
    delay(3000);&lt;br /&gt;
    reset_leds();&lt;br /&gt;
    while (!digitalRead(PIN_BTN))   // on attend que l'utilisateur appuie sur un bonton&lt;br /&gt;
    {&lt;br /&gt;
      animation_attente();&lt;br /&gt;
      delay(200);&lt;br /&gt;
    }&lt;br /&gt;
    while (digitalRead(PIN_BTN))  // on vérifie que le bouton n'est pas resté appuyé&lt;br /&gt;
    {&lt;br /&gt;
      delay(10);&lt;br /&gt;
    }&lt;br /&gt;
    // on réinitialise le jeu&lt;br /&gt;
    level = 0;      &lt;br /&gt;
    reset_leds();&lt;br /&gt;
    score = 0;&lt;br /&gt;
    delay_level = 30;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==étapes de fabrication==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===étape 1: câbler et souder===&lt;br /&gt;
câbler les fils entre les leds, la carte arduino et le bouton puis souder les fils si nécessaire et enfin téléverser le programme dans la carte si nécessaire.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Cablage.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
===étape 2: le support===&lt;br /&gt;
réaliser le support en coupant et collant les cartons&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Tonk1.jpg|200px]]&lt;br /&gt;
[[Fichier:Tonk2.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
===étape ...===&lt;br /&gt;
===troubleshouting===&lt;br /&gt;
quelles sont difficultés, les problèmes, quelles sont les solutions, les trucs et astuces pour que ça marche ?&lt;br /&gt;
&lt;br /&gt;
1er problème : le programme ne marchait pas car la LED était montée à l'envers&lt;br /&gt;
&lt;br /&gt;
2ème problème : adapter la taille du support qui était d'abord trop grand&lt;br /&gt;
&lt;br /&gt;
==Sources et documentation complémentaire==&lt;br /&gt;
&lt;br /&gt;
==ne pas modifier sous cette ligne==&lt;br /&gt;
[[Catégorie:Enib2024]]&lt;/div&gt;</summary>
		<author><name>Arnaud...</name></author>	</entry>

	<entry>
		<id>http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2024_:_CatchTheJackpot&amp;diff=25959</id>
		<title>ENIB 2024 : CatchTheJackpot</title>
		<link rel="alternate" type="text/html" href="http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2024_:_CatchTheJackpot&amp;diff=25959"/>
				<updated>2024-01-30T15:08:27Z</updated>
		
		<summary type="html">&lt;p&gt;Arnaud... : /* troubleshouting */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Fichier:Ahok.jpg|vignette]]&lt;br /&gt;
Titre de la fiche expérience :&lt;br /&gt;
==description==&lt;br /&gt;
&lt;br /&gt;
Ce projet fonction grâce à une carte Arduino, des LEDs et un bouton. &lt;br /&gt;
&lt;br /&gt;
Une lumière traverse le ruban de gauche à droite et lorsqu'elle est au milieu, il faut appuyer sur le bouton au bon moment pour gagner.&lt;br /&gt;
&lt;br /&gt;
==réalisé par :==&lt;br /&gt;
 -Arnaud Genty&lt;br /&gt;
 -Maxime Bintein&lt;br /&gt;
 -Tristan Le Coz&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
éventuelle vidéo&lt;br /&gt;
&lt;br /&gt;
==Liste des composants==&lt;br /&gt;
&lt;br /&gt;
* Bouton poussoir style Arcade&lt;br /&gt;
* Arduino nano&lt;br /&gt;
* 2 rubans de LED adressable (85 LEDs pour être exacte) &lt;br /&gt;
* Carton&lt;br /&gt;
* Câbles mini-USB&lt;br /&gt;
* Câbles&lt;br /&gt;
&lt;br /&gt;
==Outils==&lt;br /&gt;
&lt;br /&gt;
* Cutter&lt;br /&gt;
* Marqueur noir&lt;br /&gt;
* Pistolet à colle&lt;br /&gt;
* Scotch&lt;br /&gt;
* Fer à souder&lt;br /&gt;
&lt;br /&gt;
* Bibliothèque Arduino FastLed &lt;br /&gt;
  https://fastled.io/&lt;br /&gt;
==fichiers à joindre==&lt;br /&gt;
code, ficher d'impression 3D, de découpe laser ou vinyle, ...&lt;br /&gt;
&lt;br /&gt;
===Code :===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Arduino&amp;quot; line&amp;gt;&lt;br /&gt;
#include &amp;quot;FastLED.h&amp;quot;                    //bibliothèque pour controler le ruban led&lt;br /&gt;
#define NUM_LEDS 86&lt;br /&gt;
#define NUM_OF_LEDS_BY_LEVEL 17         // nombre de leds par niveau&lt;br /&gt;
#define NUM_OF_LEVELS 5                  // nombre de niveaux&lt;br /&gt;
#define PIN_BTN 3                       // Entree du bouton&lt;br /&gt;
#define PIN_LEDS 2                      // Sortie du ruban led&lt;br /&gt;
&lt;br /&gt;
// Dans ce programme nous avons utilisé presque intégralement des variables globales&lt;br /&gt;
&lt;br /&gt;
CRGB leds[NUM_LEDS];&lt;br /&gt;
int level = 0;        // niveau auquel le joueur est&lt;br /&gt;
int delay_level = 30; // délai qui permet de controler la vitesse de déplacement de la led&lt;br /&gt;
auto color = CRGB::Purple; // couleur de la led qui se déplace&lt;br /&gt;
int score = 0;           // socre du joueur&lt;br /&gt;
const double coef[] = {1, 1.4, 1.7, 1.9, 2, 2.2}; // coefficient multiplicateur de point par niveau&lt;br /&gt;
int last_point = 0;     // sauvegarde de la derniere led allumée pour la rallumer après flash()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Déclarations de fonctions&lt;br /&gt;
int compute_score(int score_of_level);    // calcul du score par niveau&lt;br /&gt;
int up();           // deplacement led&lt;br /&gt;
int down();         // deplacement led dans l'autre sense&lt;br /&gt;
void level_up();    // passage de niveau&lt;br /&gt;
void flash();       // animation de victoire d'un niveau&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  FastLED.addLeds&amp;lt;NEOPIXEL, 2&amp;gt;(leds, NUM_LEDS);     // setup du ruban de led sur la sortie PIN_LEDS =&amp;gt; 2&lt;br /&gt;
  pinMode(PIN_BTN, INPUT);                          // setup du bouton dur l'entrée PIN_BTN =&amp;gt; 3&lt;br /&gt;
  Serial.begin(9600);                               // setup moniteur série pour debug&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
&lt;br /&gt;
  int score_of_level;&lt;br /&gt;
  if (score_of_level = up())              // led avance dans un sense&lt;br /&gt;
  {&lt;br /&gt;
    score += compute_score(score_of_level);       // ajout score du niveau&lt;br /&gt;
    level_up();&lt;br /&gt;
  }&lt;br /&gt;
  else if (score_of_level = down())       // led avance dans l'autre sense&lt;br /&gt;
  {&lt;br /&gt;
    score += compute_score(score_of_level);       // ajout score du niveau&lt;br /&gt;
    level_up();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int compute_score(int score_of_level)&lt;br /&gt;
{&lt;br /&gt;
  return (NUM_OF_LEDS_BY_LEVEL/2 - (int)abs((level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2) - score_of_level)) * coef[level] + 1;&lt;br /&gt;
  // On calcul le nombre de leds d'un niveau moins la différence entre la led du joueur et celle du milieu on ajoute 2 et on multiplie par le coefficient de points du level&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int up()&lt;br /&gt;
{&lt;br /&gt;
  for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++)&lt;br /&gt;
  {&lt;br /&gt;
    if (digitalRead(PIN_BTN))   // appuie sur le bouton&lt;br /&gt;
    {&lt;br /&gt;
      while (digitalRead(PIN_BTN))    // blocage du bouton tant que celui-ci n'a pas été relaché&lt;br /&gt;
      {&lt;br /&gt;
        delay(2);&lt;br /&gt;
      }&lt;br /&gt;
      last_point = i-1;     // on concerve la valeur de la led choisie pour la réafficher après le flash&lt;br /&gt;
      return i - 1;   // renvoie la position de la led au moment de l'appuie sur le bouton&lt;br /&gt;
    }&lt;br /&gt;
    leds[i - 1] = CRGB::Black;&lt;br /&gt;
    delay(3);&lt;br /&gt;
&lt;br /&gt;
    leds[level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2] = CRGB::White;&lt;br /&gt;
    leds[i] = color;&lt;br /&gt;
&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(delay_level);&lt;br /&gt;
  }&lt;br /&gt;
  leds[NUM_OF_LEDS_BY_LEVEL * level + 20] = CRGB::Black;&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
  delay(delay_level);&lt;br /&gt;
  return 0;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int down()&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  for (int i = NUM_OF_LEDS_BY_LEVEL * level +  NUM_OF_LEDS_BY_LEVEL - 1; i &amp;gt;= NUM_OF_LEDS_BY_LEVEL * level ; i--)&lt;br /&gt;
  {&lt;br /&gt;
    if (digitalRead(PIN_BTN))&lt;br /&gt;
    {&lt;br /&gt;
      while (digitalRead(PIN_BTN))&lt;br /&gt;
      {&lt;br /&gt;
        delay(2);&lt;br /&gt;
      }&lt;br /&gt;
      last_point = i+1;&lt;br /&gt;
      return i + 1;   // renvoie la position de la led au moment de l'appuie sur le bouton&lt;br /&gt;
    }&lt;br /&gt;
    leds[i + 1] = CRGB::Black;&lt;br /&gt;
    delay(3);&lt;br /&gt;
&lt;br /&gt;
    leds[level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2] = CRGB::White;&lt;br /&gt;
    leds[i] = color;&lt;br /&gt;
&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(delay_level);&lt;br /&gt;
  }&lt;br /&gt;
  leds[NUM_OF_LEDS_BY_LEVEL] = CRGB::Black;&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
  delay(delay_level);&lt;br /&gt;
  return 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
void flash()   // fonction de décoration qui fait clignoter les leds en blanc avant le passage de niveau&lt;br /&gt;
{&lt;br /&gt;
  for (int cpt = 0; cpt &amp;lt; 4; cpt++) &lt;br /&gt;
  {&lt;br /&gt;
    for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++)  // On met toute les leds du niveau en blanc&lt;br /&gt;
    {&lt;br /&gt;
      leds[i] = CRGB::White;&lt;br /&gt;
    }&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
&lt;br /&gt;
    delay(100);&lt;br /&gt;
    for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++) // On éteint toutes les leds du niveau&lt;br /&gt;
    {&lt;br /&gt;
      leds[i] = CRGB::Black;&lt;br /&gt;
    }&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(100);&lt;br /&gt;
  }&lt;br /&gt;
  leds[last_point] = CRGB::Red;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void score_leds()   // affichage du score avec les leds&lt;br /&gt;
{&lt;br /&gt;
  for (int i = 0; i &amp;lt; score; i++)&lt;br /&gt;
  {&lt;br /&gt;
    leds[i] = CRGB::Red;&lt;br /&gt;
&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(10);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void reset_leds()   // on éteint toutes les leds&lt;br /&gt;
{&lt;br /&gt;
  for (int i = 0; i &amp;lt; NUM_LEDS; i++)&lt;br /&gt;
  {&lt;br /&gt;
    leds[i] = CRGB::Black;&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void animation_attente()&lt;br /&gt;
{&lt;br /&gt;
    for(int i = 0; i &amp;lt; NUM_LEDS; i++)&lt;br /&gt;
    {&lt;br /&gt;
      leds[i].red = random(0,255);&lt;br /&gt;
      leds[i].green = random(0,255);&lt;br /&gt;
      leds[i].blue = random(0,255);&lt;br /&gt;
    }&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
void level_up()   // changement de niveau&lt;br /&gt;
{&lt;br /&gt;
  flash();  // animation&lt;br /&gt;
  level++;  // incrémentation de la variable niveau&lt;br /&gt;
  delay_level -= 4; // le jeu devient de plus en plus rapide&lt;br /&gt;
  if (level &amp;gt;= NUM_OF_LEVELS)   // fin du jeu&lt;br /&gt;
  {&lt;br /&gt;
    reset_leds();&lt;br /&gt;
    score_leds();   // affichage score&lt;br /&gt;
    delay(3000);&lt;br /&gt;
    reset_leds();&lt;br /&gt;
    while (!digitalRead(PIN_BTN))   // on attend que l'utilisateur appuie sur un bonton&lt;br /&gt;
    {&lt;br /&gt;
      animation_attente();&lt;br /&gt;
      delay(200);&lt;br /&gt;
    }&lt;br /&gt;
    while (digitalRead(PIN_BTN))  // on vérifie que le bouton n'est pas resté appuyé&lt;br /&gt;
    {&lt;br /&gt;
      delay(10);&lt;br /&gt;
    }&lt;br /&gt;
    // on réinitialise le jeu&lt;br /&gt;
    level = 0;      &lt;br /&gt;
    reset_leds();&lt;br /&gt;
    score = 0;&lt;br /&gt;
    delay_level = 30;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==étapes de fabrication==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===étape 1: câbler et souder===&lt;br /&gt;
câbler les fils entre les leds, la carte arduino et le bouton puis souder les fils si nécessaire et enfin téléverser le programme dans la carte si nécessaire.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Cablage.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
===étape 2: le support===&lt;br /&gt;
réaliser le support en coupant et collant les cartons&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Tonk1.jpg|200px]]&lt;br /&gt;
[[Fichier:Tonk2.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
===étape ...===&lt;br /&gt;
===troubleshouting===&lt;br /&gt;
quelles sont difficultés, les problèmes, quelles sont les solutions, les trucs et astuces pour que ça marche ?&lt;br /&gt;
&lt;br /&gt;
1er problème : le programme ne marchait pas car la LED était montée à l'envers&lt;br /&gt;
&lt;br /&gt;
2ème problème : adapter la taille du support qui était d'abord trop grand&lt;br /&gt;
&lt;br /&gt;
==Sources et documentation complémentaire==&lt;br /&gt;
&lt;br /&gt;
==ne pas modifier sous cette ligne==&lt;br /&gt;
[[Catégorie:Enib2024]]&lt;/div&gt;</summary>
		<author><name>Arnaud...</name></author>	</entry>

	<entry>
		<id>http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2024_:_CatchTheJackpot&amp;diff=25805</id>
		<title>ENIB 2024 : CatchTheJackpot</title>
		<link rel="alternate" type="text/html" href="http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2024_:_CatchTheJackpot&amp;diff=25805"/>
				<updated>2024-01-30T13:36:51Z</updated>
		
		<summary type="html">&lt;p&gt;Arnaud... : /* étape 1: câbler et souder */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Fichier:Ahok.jpg|vignette]]&lt;br /&gt;
Titre de la fiche expérience :&lt;br /&gt;
==description==&lt;br /&gt;
&lt;br /&gt;
Ce projet fonction grâce à une carte Arduino, des LEDs et un bouton. &lt;br /&gt;
&lt;br /&gt;
Une lumière traverse le ruban de gauche à droite et lorsqu'elle est au milieu, il faut appuyer sur le bouton au bon moment pour gagner.&lt;br /&gt;
&lt;br /&gt;
==réalisé par :==&lt;br /&gt;
 -Arnaud Genty&lt;br /&gt;
 -Maxime Bintein&lt;br /&gt;
 -Tristan Le Coz&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
éventuelle vidéo&lt;br /&gt;
&lt;br /&gt;
==Liste des composants==&lt;br /&gt;
&lt;br /&gt;
* Bouton poussoir style Arcade&lt;br /&gt;
* Arduino nano&lt;br /&gt;
* 2 rubans de LED adressable (85 LEDs pour être exacte) &lt;br /&gt;
* Carton&lt;br /&gt;
* Câbles mini-USB&lt;br /&gt;
* Câbles&lt;br /&gt;
&lt;br /&gt;
==Outils==&lt;br /&gt;
&lt;br /&gt;
* Cutter&lt;br /&gt;
* Marqueur noir&lt;br /&gt;
* Pistolet à colle&lt;br /&gt;
* Scotch&lt;br /&gt;
* Fer à souder&lt;br /&gt;
&lt;br /&gt;
* Bibliothèque Arduino FastLed &lt;br /&gt;
  https://fastled.io/&lt;br /&gt;
==fichiers à joindre==&lt;br /&gt;
code, ficher d'impression 3D, de découpe laser ou vinyle, ...&lt;br /&gt;
&lt;br /&gt;
===Code :===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Arduino&amp;quot; line&amp;gt;&lt;br /&gt;
#include &amp;quot;FastLED.h&amp;quot;                    //bibliothèque pour controler le ruban led&lt;br /&gt;
#define NUM_LEDS 86&lt;br /&gt;
#define NUM_OF_LEDS_BY_LEVEL 17         // nombre de leds par niveau&lt;br /&gt;
#define NUM_OF_LEVELS 5                  // nombre de niveaux&lt;br /&gt;
#define PIN_BTN 3                       // Entree du bouton&lt;br /&gt;
#define PIN_LEDS 2                      // Sortie du ruban led&lt;br /&gt;
&lt;br /&gt;
// Dans ce programme nous avons utilisé presque intégralement des variables globales&lt;br /&gt;
&lt;br /&gt;
CRGB leds[NUM_LEDS];&lt;br /&gt;
int level = 0;        // niveau auquel le joueur est&lt;br /&gt;
int delay_level = 30; // délai qui permet de controler la vitesse de déplacement de la led&lt;br /&gt;
auto color = CRGB::Purple; // couleur de la led qui se déplace&lt;br /&gt;
int score = 0;           // socre du joueur&lt;br /&gt;
const double coef[] = {1, 1.4, 1.7, 1.9, 2, 2.2}; // coefficient multiplicateur de point par niveau&lt;br /&gt;
int last_point = 0;     // sauvegarde de la derniere led allumée pour la rallumer après flash()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Déclarations de fonctions&lt;br /&gt;
int compute_score(int score_of_level);    // calcul du score par niveau&lt;br /&gt;
int up();           // deplacement led&lt;br /&gt;
int down();         // deplacement led dans l'autre sense&lt;br /&gt;
void level_up();    // passage de niveau&lt;br /&gt;
void flash();       // animation de victoire d'un niveau&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  FastLED.addLeds&amp;lt;NEOPIXEL, 2&amp;gt;(leds, NUM_LEDS);     // setup du ruban de led sur la sortie PIN_LEDS =&amp;gt; 2&lt;br /&gt;
  pinMode(PIN_BTN, INPUT);                          // setup du bouton dur l'entrée PIN_BTN =&amp;gt; 3&lt;br /&gt;
  Serial.begin(9600);                               // setup moniteur série pour debug&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
&lt;br /&gt;
  int score_of_level;&lt;br /&gt;
  if (score_of_level = up())              // led avance dans un sense&lt;br /&gt;
  {&lt;br /&gt;
    score += compute_score(score_of_level);       // ajout score du niveau&lt;br /&gt;
    level_up();&lt;br /&gt;
  }&lt;br /&gt;
  else if (score_of_level = down())       // led avance dans l'autre sense&lt;br /&gt;
  {&lt;br /&gt;
    score += compute_score(score_of_level);       // ajout score du niveau&lt;br /&gt;
    level_up();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int compute_score(int score_of_level)&lt;br /&gt;
{&lt;br /&gt;
  return (NUM_OF_LEDS_BY_LEVEL/2 - (int)abs((level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2) - score_of_level)) * coef[level] + 1;&lt;br /&gt;
  // On calcul le nombre de leds d'un niveau moins la différence entre la led du joueur et celle du milieu on ajoute 2 et on multiplie par le coefficient de points du level&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int up()&lt;br /&gt;
{&lt;br /&gt;
  for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++)&lt;br /&gt;
  {&lt;br /&gt;
    if (digitalRead(PIN_BTN))   // appuie sur le bouton&lt;br /&gt;
    {&lt;br /&gt;
      while (digitalRead(PIN_BTN))    // blocage du bouton tant que celui-ci n'a pas été relaché&lt;br /&gt;
      {&lt;br /&gt;
        delay(2);&lt;br /&gt;
      }&lt;br /&gt;
      last_point = i-1;     // on concerve la valeur de la led choisie pour la réafficher après le flash&lt;br /&gt;
      return i - 1;   // renvoie la position de la led au moment de l'appuie sur le bouton&lt;br /&gt;
    }&lt;br /&gt;
    leds[i - 1] = CRGB::Black;&lt;br /&gt;
    delay(3);&lt;br /&gt;
&lt;br /&gt;
    leds[level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2] = CRGB::White;&lt;br /&gt;
    leds[i] = color;&lt;br /&gt;
&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(delay_level);&lt;br /&gt;
  }&lt;br /&gt;
  leds[NUM_OF_LEDS_BY_LEVEL * level + 20] = CRGB::Black;&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
  delay(delay_level);&lt;br /&gt;
  return 0;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int down()&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  for (int i = NUM_OF_LEDS_BY_LEVEL * level +  NUM_OF_LEDS_BY_LEVEL - 1; i &amp;gt;= NUM_OF_LEDS_BY_LEVEL * level ; i--)&lt;br /&gt;
  {&lt;br /&gt;
    if (digitalRead(PIN_BTN))&lt;br /&gt;
    {&lt;br /&gt;
      while (digitalRead(PIN_BTN))&lt;br /&gt;
      {&lt;br /&gt;
        delay(2);&lt;br /&gt;
      }&lt;br /&gt;
      last_point = i+1;&lt;br /&gt;
      return i + 1;   // renvoie la position de la led au moment de l'appuie sur le bouton&lt;br /&gt;
    }&lt;br /&gt;
    leds[i + 1] = CRGB::Black;&lt;br /&gt;
    delay(3);&lt;br /&gt;
&lt;br /&gt;
    leds[level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2] = CRGB::White;&lt;br /&gt;
    leds[i] = color;&lt;br /&gt;
&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(delay_level);&lt;br /&gt;
  }&lt;br /&gt;
  leds[NUM_OF_LEDS_BY_LEVEL] = CRGB::Black;&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
  delay(delay_level);&lt;br /&gt;
  return 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
void flash()   // fonction de décoration qui fait clignoter les leds en blanc avant le passage de niveau&lt;br /&gt;
{&lt;br /&gt;
  for (int cpt = 0; cpt &amp;lt; 4; cpt++) &lt;br /&gt;
  {&lt;br /&gt;
    for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++)  // On met toute les leds du niveau en blanc&lt;br /&gt;
    {&lt;br /&gt;
      leds[i] = CRGB::White;&lt;br /&gt;
    }&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
&lt;br /&gt;
    delay(100);&lt;br /&gt;
    for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++) // On éteint toutes les leds du niveau&lt;br /&gt;
    {&lt;br /&gt;
      leds[i] = CRGB::Black;&lt;br /&gt;
    }&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(100);&lt;br /&gt;
  }&lt;br /&gt;
  leds[last_point] = CRGB::Red;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void score_leds()   // affichage du score avec les leds&lt;br /&gt;
{&lt;br /&gt;
  for (int i = 0; i &amp;lt; score; i++)&lt;br /&gt;
  {&lt;br /&gt;
    leds[i] = CRGB::Red;&lt;br /&gt;
&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(10);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void reset_leds()   // on éteint toutes les leds&lt;br /&gt;
{&lt;br /&gt;
  for (int i = 0; i &amp;lt; NUM_LEDS; i++)&lt;br /&gt;
  {&lt;br /&gt;
    leds[i] = CRGB::Black;&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void animation_attente()&lt;br /&gt;
{&lt;br /&gt;
    for(int i = 0; i &amp;lt; NUM_LEDS; i++)&lt;br /&gt;
    {&lt;br /&gt;
      leds[i].red = random(0,255);&lt;br /&gt;
      leds[i].green = random(0,255);&lt;br /&gt;
      leds[i].blue = random(0,255);&lt;br /&gt;
    }&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
void level_up()   // changement de niveau&lt;br /&gt;
{&lt;br /&gt;
  flash();  // animation&lt;br /&gt;
  level++;  // incrémentation de la variable niveau&lt;br /&gt;
  delay_level -= 4; // le jeu devient de plus en plus rapide&lt;br /&gt;
  if (level &amp;gt;= NUM_OF_LEVELS)   // fin du jeu&lt;br /&gt;
  {&lt;br /&gt;
    reset_leds();&lt;br /&gt;
    score_leds();   // affichage score&lt;br /&gt;
    delay(3000);&lt;br /&gt;
    reset_leds();&lt;br /&gt;
    while (!digitalRead(PIN_BTN))   // on attend que l'utilisateur appuie sur un bonton&lt;br /&gt;
    {&lt;br /&gt;
      animation_attente();&lt;br /&gt;
      delay(200);&lt;br /&gt;
    }&lt;br /&gt;
    while (digitalRead(PIN_BTN))  // on vérifie que le bouton n'est pas resté appuyé&lt;br /&gt;
    {&lt;br /&gt;
      delay(10);&lt;br /&gt;
    }&lt;br /&gt;
    // on réinitialise le jeu&lt;br /&gt;
    level = 0;      &lt;br /&gt;
    reset_leds();&lt;br /&gt;
    score = 0;&lt;br /&gt;
    delay_level = 30;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==étapes de fabrication==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===étape 1: câbler et souder===&lt;br /&gt;
câbler les fils entre les leds, la carte arduino et le bouton puis souder les fils si nécessaire et enfin téléverser le programme dans la carte si nécessaire.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Cablage.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
===étape 2: le support===&lt;br /&gt;
réaliser le support en coupant et collant les cartons&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Tonk1.jpg|200px]]&lt;br /&gt;
[[Fichier:Tonk2.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
===étape ...===&lt;br /&gt;
===troubleshouting===&lt;br /&gt;
quelles sont difficultés, les problèmes, quelles sont les solutions, les trucs et astuces pour que ça marche ?&lt;br /&gt;
&lt;br /&gt;
1er problème : le programme ne marchait pas car la LED était montée à l'envers&lt;br /&gt;
&lt;br /&gt;
==Sources et documentation complémentaire==&lt;br /&gt;
&lt;br /&gt;
==ne pas modifier sous cette ligne==&lt;br /&gt;
[[Catégorie:Enib2024]]&lt;/div&gt;</summary>
		<author><name>Arnaud...</name></author>	</entry>

	<entry>
		<id>http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2024_:_CatchTheJackpot&amp;diff=25804</id>
		<title>ENIB 2024 : CatchTheJackpot</title>
		<link rel="alternate" type="text/html" href="http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2024_:_CatchTheJackpot&amp;diff=25804"/>
				<updated>2024-01-30T13:36:01Z</updated>
		
		<summary type="html">&lt;p&gt;Arnaud... : /* étape 2: le support */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Fichier:Ahok.jpg|vignette]]&lt;br /&gt;
Titre de la fiche expérience :&lt;br /&gt;
==description==&lt;br /&gt;
&lt;br /&gt;
Ce projet fonction grâce à une carte Arduino, des LEDs et un bouton. &lt;br /&gt;
&lt;br /&gt;
Une lumière traverse le ruban de gauche à droite et lorsqu'elle est au milieu, il faut appuyer sur le bouton au bon moment pour gagner.&lt;br /&gt;
&lt;br /&gt;
==réalisé par :==&lt;br /&gt;
 -Arnaud Genty&lt;br /&gt;
 -Maxime Bintein&lt;br /&gt;
 -Tristan Le Coz&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
éventuelle vidéo&lt;br /&gt;
&lt;br /&gt;
==Liste des composants==&lt;br /&gt;
&lt;br /&gt;
* Bouton poussoir style Arcade&lt;br /&gt;
* Arduino nano&lt;br /&gt;
* 2 rubans de LED adressable (85 LEDs pour être exacte) &lt;br /&gt;
* Carton&lt;br /&gt;
* Câbles mini-USB&lt;br /&gt;
* Câbles&lt;br /&gt;
&lt;br /&gt;
==Outils==&lt;br /&gt;
&lt;br /&gt;
* Cutter&lt;br /&gt;
* Marqueur noir&lt;br /&gt;
* Pistolet à colle&lt;br /&gt;
* Scotch&lt;br /&gt;
* Fer à souder&lt;br /&gt;
&lt;br /&gt;
* Bibliothèque Arduino FastLed &lt;br /&gt;
  https://fastled.io/&lt;br /&gt;
==fichiers à joindre==&lt;br /&gt;
code, ficher d'impression 3D, de découpe laser ou vinyle, ...&lt;br /&gt;
&lt;br /&gt;
===Code :===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Arduino&amp;quot; line&amp;gt;&lt;br /&gt;
#include &amp;quot;FastLED.h&amp;quot;                    //bibliothèque pour controler le ruban led&lt;br /&gt;
#define NUM_LEDS 86&lt;br /&gt;
#define NUM_OF_LEDS_BY_LEVEL 17         // nombre de leds par niveau&lt;br /&gt;
#define NUM_OF_LEVELS 5                  // nombre de niveaux&lt;br /&gt;
#define PIN_BTN 3                       // Entree du bouton&lt;br /&gt;
#define PIN_LEDS 2                      // Sortie du ruban led&lt;br /&gt;
&lt;br /&gt;
// Dans ce programme nous avons utilisé presque intégralement des variables globales&lt;br /&gt;
&lt;br /&gt;
CRGB leds[NUM_LEDS];&lt;br /&gt;
int level = 0;        // niveau auquel le joueur est&lt;br /&gt;
int delay_level = 30; // délai qui permet de controler la vitesse de déplacement de la led&lt;br /&gt;
auto color = CRGB::Purple; // couleur de la led qui se déplace&lt;br /&gt;
int score = 0;           // socre du joueur&lt;br /&gt;
const double coef[] = {1, 1.4, 1.7, 1.9, 2, 2.2}; // coefficient multiplicateur de point par niveau&lt;br /&gt;
int last_point = 0;     // sauvegarde de la derniere led allumée pour la rallumer après flash()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Déclarations de fonctions&lt;br /&gt;
int compute_score(int score_of_level);    // calcul du score par niveau&lt;br /&gt;
int up();           // deplacement led&lt;br /&gt;
int down();         // deplacement led dans l'autre sense&lt;br /&gt;
void level_up();    // passage de niveau&lt;br /&gt;
void flash();       // animation de victoire d'un niveau&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  FastLED.addLeds&amp;lt;NEOPIXEL, 2&amp;gt;(leds, NUM_LEDS);     // setup du ruban de led sur la sortie PIN_LEDS =&amp;gt; 2&lt;br /&gt;
  pinMode(PIN_BTN, INPUT);                          // setup du bouton dur l'entrée PIN_BTN =&amp;gt; 3&lt;br /&gt;
  Serial.begin(9600);                               // setup moniteur série pour debug&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
&lt;br /&gt;
  int score_of_level;&lt;br /&gt;
  if (score_of_level = up())              // led avance dans un sense&lt;br /&gt;
  {&lt;br /&gt;
    score += compute_score(score_of_level);       // ajout score du niveau&lt;br /&gt;
    level_up();&lt;br /&gt;
  }&lt;br /&gt;
  else if (score_of_level = down())       // led avance dans l'autre sense&lt;br /&gt;
  {&lt;br /&gt;
    score += compute_score(score_of_level);       // ajout score du niveau&lt;br /&gt;
    level_up();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int compute_score(int score_of_level)&lt;br /&gt;
{&lt;br /&gt;
  return (NUM_OF_LEDS_BY_LEVEL/2 - (int)abs((level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2) - score_of_level)) * coef[level] + 1;&lt;br /&gt;
  // On calcul le nombre de leds d'un niveau moins la différence entre la led du joueur et celle du milieu on ajoute 2 et on multiplie par le coefficient de points du level&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int up()&lt;br /&gt;
{&lt;br /&gt;
  for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++)&lt;br /&gt;
  {&lt;br /&gt;
    if (digitalRead(PIN_BTN))   // appuie sur le bouton&lt;br /&gt;
    {&lt;br /&gt;
      while (digitalRead(PIN_BTN))    // blocage du bouton tant que celui-ci n'a pas été relaché&lt;br /&gt;
      {&lt;br /&gt;
        delay(2);&lt;br /&gt;
      }&lt;br /&gt;
      last_point = i-1;     // on concerve la valeur de la led choisie pour la réafficher après le flash&lt;br /&gt;
      return i - 1;   // renvoie la position de la led au moment de l'appuie sur le bouton&lt;br /&gt;
    }&lt;br /&gt;
    leds[i - 1] = CRGB::Black;&lt;br /&gt;
    delay(3);&lt;br /&gt;
&lt;br /&gt;
    leds[level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2] = CRGB::White;&lt;br /&gt;
    leds[i] = color;&lt;br /&gt;
&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(delay_level);&lt;br /&gt;
  }&lt;br /&gt;
  leds[NUM_OF_LEDS_BY_LEVEL * level + 20] = CRGB::Black;&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
  delay(delay_level);&lt;br /&gt;
  return 0;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int down()&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  for (int i = NUM_OF_LEDS_BY_LEVEL * level +  NUM_OF_LEDS_BY_LEVEL - 1; i &amp;gt;= NUM_OF_LEDS_BY_LEVEL * level ; i--)&lt;br /&gt;
  {&lt;br /&gt;
    if (digitalRead(PIN_BTN))&lt;br /&gt;
    {&lt;br /&gt;
      while (digitalRead(PIN_BTN))&lt;br /&gt;
      {&lt;br /&gt;
        delay(2);&lt;br /&gt;
      }&lt;br /&gt;
      last_point = i+1;&lt;br /&gt;
      return i + 1;   // renvoie la position de la led au moment de l'appuie sur le bouton&lt;br /&gt;
    }&lt;br /&gt;
    leds[i + 1] = CRGB::Black;&lt;br /&gt;
    delay(3);&lt;br /&gt;
&lt;br /&gt;
    leds[level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2] = CRGB::White;&lt;br /&gt;
    leds[i] = color;&lt;br /&gt;
&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(delay_level);&lt;br /&gt;
  }&lt;br /&gt;
  leds[NUM_OF_LEDS_BY_LEVEL] = CRGB::Black;&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
  delay(delay_level);&lt;br /&gt;
  return 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
void flash()   // fonction de décoration qui fait clignoter les leds en blanc avant le passage de niveau&lt;br /&gt;
{&lt;br /&gt;
  for (int cpt = 0; cpt &amp;lt; 4; cpt++) &lt;br /&gt;
  {&lt;br /&gt;
    for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++)  // On met toute les leds du niveau en blanc&lt;br /&gt;
    {&lt;br /&gt;
      leds[i] = CRGB::White;&lt;br /&gt;
    }&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
&lt;br /&gt;
    delay(100);&lt;br /&gt;
    for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++) // On éteint toutes les leds du niveau&lt;br /&gt;
    {&lt;br /&gt;
      leds[i] = CRGB::Black;&lt;br /&gt;
    }&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(100);&lt;br /&gt;
  }&lt;br /&gt;
  leds[last_point] = CRGB::Red;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void score_leds()   // affichage du score avec les leds&lt;br /&gt;
{&lt;br /&gt;
  for (int i = 0; i &amp;lt; score; i++)&lt;br /&gt;
  {&lt;br /&gt;
    leds[i] = CRGB::Red;&lt;br /&gt;
&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(10);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void reset_leds()   // on éteint toutes les leds&lt;br /&gt;
{&lt;br /&gt;
  for (int i = 0; i &amp;lt; NUM_LEDS; i++)&lt;br /&gt;
  {&lt;br /&gt;
    leds[i] = CRGB::Black;&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void animation_attente()&lt;br /&gt;
{&lt;br /&gt;
    for(int i = 0; i &amp;lt; NUM_LEDS; i++)&lt;br /&gt;
    {&lt;br /&gt;
      leds[i].red = random(0,255);&lt;br /&gt;
      leds[i].green = random(0,255);&lt;br /&gt;
      leds[i].blue = random(0,255);&lt;br /&gt;
    }&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
void level_up()   // changement de niveau&lt;br /&gt;
{&lt;br /&gt;
  flash();  // animation&lt;br /&gt;
  level++;  // incrémentation de la variable niveau&lt;br /&gt;
  delay_level -= 4; // le jeu devient de plus en plus rapide&lt;br /&gt;
  if (level &amp;gt;= NUM_OF_LEVELS)   // fin du jeu&lt;br /&gt;
  {&lt;br /&gt;
    reset_leds();&lt;br /&gt;
    score_leds();   // affichage score&lt;br /&gt;
    delay(3000);&lt;br /&gt;
    reset_leds();&lt;br /&gt;
    while (!digitalRead(PIN_BTN))   // on attend que l'utilisateur appuie sur un bonton&lt;br /&gt;
    {&lt;br /&gt;
      animation_attente();&lt;br /&gt;
      delay(200);&lt;br /&gt;
    }&lt;br /&gt;
    while (digitalRead(PIN_BTN))  // on vérifie que le bouton n'est pas resté appuyé&lt;br /&gt;
    {&lt;br /&gt;
      delay(10);&lt;br /&gt;
    }&lt;br /&gt;
    // on réinitialise le jeu&lt;br /&gt;
    level = 0;      &lt;br /&gt;
    reset_leds();&lt;br /&gt;
    score = 0;&lt;br /&gt;
    delay_level = 30;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==étapes de fabrication==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===étape 1: câbler et souder===&lt;br /&gt;
câbler les fils entre les leds, la carte arduino et le bouton puis souder les fils si nécessaire&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Cablage.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
===étape 2: le support===&lt;br /&gt;
réaliser le support en coupant et collant les cartons&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Tonk1.jpg|200px]]&lt;br /&gt;
[[Fichier:Tonk2.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
===étape ...===&lt;br /&gt;
===troubleshouting===&lt;br /&gt;
quelles sont difficultés, les problèmes, quelles sont les solutions, les trucs et astuces pour que ça marche ?&lt;br /&gt;
&lt;br /&gt;
1er problème : le programme ne marchait pas car la LED était montée à l'envers&lt;br /&gt;
&lt;br /&gt;
==Sources et documentation complémentaire==&lt;br /&gt;
&lt;br /&gt;
==ne pas modifier sous cette ligne==&lt;br /&gt;
[[Catégorie:Enib2024]]&lt;/div&gt;</summary>
		<author><name>Arnaud...</name></author>	</entry>

	<entry>
		<id>http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2024_:_CatchTheJackpot&amp;diff=25803</id>
		<title>ENIB 2024 : CatchTheJackpot</title>
		<link rel="alternate" type="text/html" href="http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2024_:_CatchTheJackpot&amp;diff=25803"/>
				<updated>2024-01-30T13:35:49Z</updated>
		
		<summary type="html">&lt;p&gt;Arnaud... : /* étape 2: le support */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Fichier:Ahok.jpg|vignette]]&lt;br /&gt;
Titre de la fiche expérience :&lt;br /&gt;
==description==&lt;br /&gt;
&lt;br /&gt;
Ce projet fonction grâce à une carte Arduino, des LEDs et un bouton. &lt;br /&gt;
&lt;br /&gt;
Une lumière traverse le ruban de gauche à droite et lorsqu'elle est au milieu, il faut appuyer sur le bouton au bon moment pour gagner.&lt;br /&gt;
&lt;br /&gt;
==réalisé par :==&lt;br /&gt;
 -Arnaud Genty&lt;br /&gt;
 -Maxime Bintein&lt;br /&gt;
 -Tristan Le Coz&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
éventuelle vidéo&lt;br /&gt;
&lt;br /&gt;
==Liste des composants==&lt;br /&gt;
&lt;br /&gt;
* Bouton poussoir style Arcade&lt;br /&gt;
* Arduino nano&lt;br /&gt;
* 2 rubans de LED adressable (85 LEDs pour être exacte) &lt;br /&gt;
* Carton&lt;br /&gt;
* Câbles mini-USB&lt;br /&gt;
* Câbles&lt;br /&gt;
&lt;br /&gt;
==Outils==&lt;br /&gt;
&lt;br /&gt;
* Cutter&lt;br /&gt;
* Marqueur noir&lt;br /&gt;
* Pistolet à colle&lt;br /&gt;
* Scotch&lt;br /&gt;
* Fer à souder&lt;br /&gt;
&lt;br /&gt;
* Bibliothèque Arduino FastLed &lt;br /&gt;
  https://fastled.io/&lt;br /&gt;
==fichiers à joindre==&lt;br /&gt;
code, ficher d'impression 3D, de découpe laser ou vinyle, ...&lt;br /&gt;
&lt;br /&gt;
===Code :===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Arduino&amp;quot; line&amp;gt;&lt;br /&gt;
#include &amp;quot;FastLED.h&amp;quot;                    //bibliothèque pour controler le ruban led&lt;br /&gt;
#define NUM_LEDS 86&lt;br /&gt;
#define NUM_OF_LEDS_BY_LEVEL 17         // nombre de leds par niveau&lt;br /&gt;
#define NUM_OF_LEVELS 5                  // nombre de niveaux&lt;br /&gt;
#define PIN_BTN 3                       // Entree du bouton&lt;br /&gt;
#define PIN_LEDS 2                      // Sortie du ruban led&lt;br /&gt;
&lt;br /&gt;
// Dans ce programme nous avons utilisé presque intégralement des variables globales&lt;br /&gt;
&lt;br /&gt;
CRGB leds[NUM_LEDS];&lt;br /&gt;
int level = 0;        // niveau auquel le joueur est&lt;br /&gt;
int delay_level = 30; // délai qui permet de controler la vitesse de déplacement de la led&lt;br /&gt;
auto color = CRGB::Purple; // couleur de la led qui se déplace&lt;br /&gt;
int score = 0;           // socre du joueur&lt;br /&gt;
const double coef[] = {1, 1.4, 1.7, 1.9, 2, 2.2}; // coefficient multiplicateur de point par niveau&lt;br /&gt;
int last_point = 0;     // sauvegarde de la derniere led allumée pour la rallumer après flash()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Déclarations de fonctions&lt;br /&gt;
int compute_score(int score_of_level);    // calcul du score par niveau&lt;br /&gt;
int up();           // deplacement led&lt;br /&gt;
int down();         // deplacement led dans l'autre sense&lt;br /&gt;
void level_up();    // passage de niveau&lt;br /&gt;
void flash();       // animation de victoire d'un niveau&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  FastLED.addLeds&amp;lt;NEOPIXEL, 2&amp;gt;(leds, NUM_LEDS);     // setup du ruban de led sur la sortie PIN_LEDS =&amp;gt; 2&lt;br /&gt;
  pinMode(PIN_BTN, INPUT);                          // setup du bouton dur l'entrée PIN_BTN =&amp;gt; 3&lt;br /&gt;
  Serial.begin(9600);                               // setup moniteur série pour debug&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
&lt;br /&gt;
  int score_of_level;&lt;br /&gt;
  if (score_of_level = up())              // led avance dans un sense&lt;br /&gt;
  {&lt;br /&gt;
    score += compute_score(score_of_level);       // ajout score du niveau&lt;br /&gt;
    level_up();&lt;br /&gt;
  }&lt;br /&gt;
  else if (score_of_level = down())       // led avance dans l'autre sense&lt;br /&gt;
  {&lt;br /&gt;
    score += compute_score(score_of_level);       // ajout score du niveau&lt;br /&gt;
    level_up();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int compute_score(int score_of_level)&lt;br /&gt;
{&lt;br /&gt;
  return (NUM_OF_LEDS_BY_LEVEL/2 - (int)abs((level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2) - score_of_level)) * coef[level] + 1;&lt;br /&gt;
  // On calcul le nombre de leds d'un niveau moins la différence entre la led du joueur et celle du milieu on ajoute 2 et on multiplie par le coefficient de points du level&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int up()&lt;br /&gt;
{&lt;br /&gt;
  for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++)&lt;br /&gt;
  {&lt;br /&gt;
    if (digitalRead(PIN_BTN))   // appuie sur le bouton&lt;br /&gt;
    {&lt;br /&gt;
      while (digitalRead(PIN_BTN))    // blocage du bouton tant que celui-ci n'a pas été relaché&lt;br /&gt;
      {&lt;br /&gt;
        delay(2);&lt;br /&gt;
      }&lt;br /&gt;
      last_point = i-1;     // on concerve la valeur de la led choisie pour la réafficher après le flash&lt;br /&gt;
      return i - 1;   // renvoie la position de la led au moment de l'appuie sur le bouton&lt;br /&gt;
    }&lt;br /&gt;
    leds[i - 1] = CRGB::Black;&lt;br /&gt;
    delay(3);&lt;br /&gt;
&lt;br /&gt;
    leds[level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2] = CRGB::White;&lt;br /&gt;
    leds[i] = color;&lt;br /&gt;
&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(delay_level);&lt;br /&gt;
  }&lt;br /&gt;
  leds[NUM_OF_LEDS_BY_LEVEL * level + 20] = CRGB::Black;&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
  delay(delay_level);&lt;br /&gt;
  return 0;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int down()&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  for (int i = NUM_OF_LEDS_BY_LEVEL * level +  NUM_OF_LEDS_BY_LEVEL - 1; i &amp;gt;= NUM_OF_LEDS_BY_LEVEL * level ; i--)&lt;br /&gt;
  {&lt;br /&gt;
    if (digitalRead(PIN_BTN))&lt;br /&gt;
    {&lt;br /&gt;
      while (digitalRead(PIN_BTN))&lt;br /&gt;
      {&lt;br /&gt;
        delay(2);&lt;br /&gt;
      }&lt;br /&gt;
      last_point = i+1;&lt;br /&gt;
      return i + 1;   // renvoie la position de la led au moment de l'appuie sur le bouton&lt;br /&gt;
    }&lt;br /&gt;
    leds[i + 1] = CRGB::Black;&lt;br /&gt;
    delay(3);&lt;br /&gt;
&lt;br /&gt;
    leds[level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2] = CRGB::White;&lt;br /&gt;
    leds[i] = color;&lt;br /&gt;
&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(delay_level);&lt;br /&gt;
  }&lt;br /&gt;
  leds[NUM_OF_LEDS_BY_LEVEL] = CRGB::Black;&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
  delay(delay_level);&lt;br /&gt;
  return 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
void flash()   // fonction de décoration qui fait clignoter les leds en blanc avant le passage de niveau&lt;br /&gt;
{&lt;br /&gt;
  for (int cpt = 0; cpt &amp;lt; 4; cpt++) &lt;br /&gt;
  {&lt;br /&gt;
    for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++)  // On met toute les leds du niveau en blanc&lt;br /&gt;
    {&lt;br /&gt;
      leds[i] = CRGB::White;&lt;br /&gt;
    }&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
&lt;br /&gt;
    delay(100);&lt;br /&gt;
    for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++) // On éteint toutes les leds du niveau&lt;br /&gt;
    {&lt;br /&gt;
      leds[i] = CRGB::Black;&lt;br /&gt;
    }&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(100);&lt;br /&gt;
  }&lt;br /&gt;
  leds[last_point] = CRGB::Red;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void score_leds()   // affichage du score avec les leds&lt;br /&gt;
{&lt;br /&gt;
  for (int i = 0; i &amp;lt; score; i++)&lt;br /&gt;
  {&lt;br /&gt;
    leds[i] = CRGB::Red;&lt;br /&gt;
&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(10);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void reset_leds()   // on éteint toutes les leds&lt;br /&gt;
{&lt;br /&gt;
  for (int i = 0; i &amp;lt; NUM_LEDS; i++)&lt;br /&gt;
  {&lt;br /&gt;
    leds[i] = CRGB::Black;&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void animation_attente()&lt;br /&gt;
{&lt;br /&gt;
    for(int i = 0; i &amp;lt; NUM_LEDS; i++)&lt;br /&gt;
    {&lt;br /&gt;
      leds[i].red = random(0,255);&lt;br /&gt;
      leds[i].green = random(0,255);&lt;br /&gt;
      leds[i].blue = random(0,255);&lt;br /&gt;
    }&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
void level_up()   // changement de niveau&lt;br /&gt;
{&lt;br /&gt;
  flash();  // animation&lt;br /&gt;
  level++;  // incrémentation de la variable niveau&lt;br /&gt;
  delay_level -= 4; // le jeu devient de plus en plus rapide&lt;br /&gt;
  if (level &amp;gt;= NUM_OF_LEVELS)   // fin du jeu&lt;br /&gt;
  {&lt;br /&gt;
    reset_leds();&lt;br /&gt;
    score_leds();   // affichage score&lt;br /&gt;
    delay(3000);&lt;br /&gt;
    reset_leds();&lt;br /&gt;
    while (!digitalRead(PIN_BTN))   // on attend que l'utilisateur appuie sur un bonton&lt;br /&gt;
    {&lt;br /&gt;
      animation_attente();&lt;br /&gt;
      delay(200);&lt;br /&gt;
    }&lt;br /&gt;
    while (digitalRead(PIN_BTN))  // on vérifie que le bouton n'est pas resté appuyé&lt;br /&gt;
    {&lt;br /&gt;
      delay(10);&lt;br /&gt;
    }&lt;br /&gt;
    // on réinitialise le jeu&lt;br /&gt;
    level = 0;      &lt;br /&gt;
    reset_leds();&lt;br /&gt;
    score = 0;&lt;br /&gt;
    delay_level = 30;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==étapes de fabrication==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===étape 1: câbler et souder===&lt;br /&gt;
câbler les fils entre les leds, la carte arduino et le bouton puis souder les fils si nécessaire&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Cablage.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
===étape 2: le support===&lt;br /&gt;
réaliser le support en coupant et collant les cartons&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Tonk1.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Tonk2.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
===étape ...===&lt;br /&gt;
===troubleshouting===&lt;br /&gt;
quelles sont difficultés, les problèmes, quelles sont les solutions, les trucs et astuces pour que ça marche ?&lt;br /&gt;
&lt;br /&gt;
1er problème : le programme ne marchait pas car la LED était montée à l'envers&lt;br /&gt;
&lt;br /&gt;
==Sources et documentation complémentaire==&lt;br /&gt;
&lt;br /&gt;
==ne pas modifier sous cette ligne==&lt;br /&gt;
[[Catégorie:Enib2024]]&lt;/div&gt;</summary>
		<author><name>Arnaud...</name></author>	</entry>

	<entry>
		<id>http://wiki.lesfabriquesduponant.net/index.php?title=Fichier:Tonk2.jpg&amp;diff=25800</id>
		<title>Fichier:Tonk2.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.lesfabriquesduponant.net/index.php?title=Fichier:Tonk2.jpg&amp;diff=25800"/>
				<updated>2024-01-30T13:34:04Z</updated>
		
		<summary type="html">&lt;p&gt;Arnaud... : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Arnaud...</name></author>	</entry>

	<entry>
		<id>http://wiki.lesfabriquesduponant.net/index.php?title=Fichier:Tonk1.jpg&amp;diff=25798</id>
		<title>Fichier:Tonk1.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.lesfabriquesduponant.net/index.php?title=Fichier:Tonk1.jpg&amp;diff=25798"/>
				<updated>2024-01-30T13:33:41Z</updated>
		
		<summary type="html">&lt;p&gt;Arnaud... : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Arnaud...</name></author>	</entry>

	<entry>
		<id>http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2024_:_CatchTheJackpot&amp;diff=25774</id>
		<title>ENIB 2024 : CatchTheJackpot</title>
		<link rel="alternate" type="text/html" href="http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2024_:_CatchTheJackpot&amp;diff=25774"/>
				<updated>2024-01-30T13:17:16Z</updated>
		
		<summary type="html">&lt;p&gt;Arnaud... : /* troubleshouting */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Fichier:Ahok.jpg|vignette]]&lt;br /&gt;
Titre de la fiche expérience :&lt;br /&gt;
==description==&lt;br /&gt;
&lt;br /&gt;
Ce projet fonction grâce à une carte Arduino, des LEDs et un bouton. &lt;br /&gt;
&lt;br /&gt;
Une lumière traverse le ruban de gauche à droite et lorsqu'elle est au milieu, il faut appuyer sur le bouton au bon moment pour gagner.&lt;br /&gt;
&lt;br /&gt;
==réalisé par :==&lt;br /&gt;
 -Arnaud Genty&lt;br /&gt;
 -Maxime Bintein&lt;br /&gt;
 -Tristan Le Coz&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
éventuelle vidéo&lt;br /&gt;
&lt;br /&gt;
==Liste des composants==&lt;br /&gt;
&lt;br /&gt;
* Bouton poussoir style Arcade&lt;br /&gt;
* Arduino nano&lt;br /&gt;
* 2 rubans de LED adressable (85 LEDs pour être exacte) &lt;br /&gt;
* Carton&lt;br /&gt;
* Câbles mini-USB&lt;br /&gt;
* Câbles&lt;br /&gt;
&lt;br /&gt;
==Outils==&lt;br /&gt;
&lt;br /&gt;
* Cutter&lt;br /&gt;
* Marqueur noir&lt;br /&gt;
* Pistolet à colle&lt;br /&gt;
* Scotch&lt;br /&gt;
* Fer à souder&lt;br /&gt;
&lt;br /&gt;
* Bibliothèque Arduino FastLed &lt;br /&gt;
  https://fastled.io/&lt;br /&gt;
==fichiers à joindre==&lt;br /&gt;
code, ficher d'impression 3D, de découpe laser ou vinyle, ...&lt;br /&gt;
&lt;br /&gt;
===Code :===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Arduino&amp;quot; line&amp;gt;&lt;br /&gt;
#include &amp;quot;FastLED.h&amp;quot;                    //bibliothèque pour controler le ruban led&lt;br /&gt;
#define NUM_LEDS 86&lt;br /&gt;
#define NUM_OF_LEDS_BY_LEVEL 17         // nombre de leds par niveau&lt;br /&gt;
#define NUM_OF_LEVELS 5                  // nombre de niveaux&lt;br /&gt;
#define PIN_BTN 3                       // Entree du bouton&lt;br /&gt;
#define PIN_LEDS 2                      // Sortie du ruban led&lt;br /&gt;
&lt;br /&gt;
// Dans ce programme nous avons utilisé presque intégralement des variables globales&lt;br /&gt;
&lt;br /&gt;
CRGB leds[NUM_LEDS];&lt;br /&gt;
int level = 0;        // niveau auquel le joueur est&lt;br /&gt;
int delay_level = 30; // délai qui permet de controler la vitesse de déplacement de la led&lt;br /&gt;
auto color = CRGB::Purple; // couleur de la led qui se déplace&lt;br /&gt;
int score = 0;           // socre du joueur&lt;br /&gt;
const double coef[] = {1, 1.4, 1.7, 1.9, 2, 2.2}; // coefficient multiplicateur de point par niveau&lt;br /&gt;
int last_point = 0;     // sauvegarde de la derniere led allumée pour la rallumer après flash()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Déclarations de fonctions&lt;br /&gt;
int compute_score(int score_of_level);    // calcul du score par niveau&lt;br /&gt;
int up();           // deplacement led&lt;br /&gt;
int down();         // deplacement led dans l'autre sense&lt;br /&gt;
void level_up();    // passage de niveau&lt;br /&gt;
void flash();       // animation de victoire d'un niveau&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  FastLED.addLeds&amp;lt;NEOPIXEL, 2&amp;gt;(leds, NUM_LEDS);     // setup du ruban de led sur la sortie PIN_LEDS =&amp;gt; 2&lt;br /&gt;
  pinMode(PIN_BTN, INPUT);                          // setup du bouton dur l'entrée PIN_BTN =&amp;gt; 3&lt;br /&gt;
  Serial.begin(9600);                               // setup moniteur série pour debug&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
&lt;br /&gt;
  int score_of_level;&lt;br /&gt;
  if (score_of_level = up())              // led avance dans un sense&lt;br /&gt;
  {&lt;br /&gt;
    score += compute_score(score_of_level);       // ajout score du niveau&lt;br /&gt;
    level_up();&lt;br /&gt;
  }&lt;br /&gt;
  else if (score_of_level = down())       // led avance dans l'autre sense&lt;br /&gt;
  {&lt;br /&gt;
    score += compute_score(score_of_level);       // ajout score du niveau&lt;br /&gt;
    level_up();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int compute_score(int score_of_level)&lt;br /&gt;
{&lt;br /&gt;
  return (NUM_OF_LEDS_BY_LEVEL/2 - (int)abs((level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2) - score_of_level)) * coef[level] + 1;&lt;br /&gt;
  // On calcul le nombre de leds d'un niveau moins la différence entre la led du joueur et celle du milieu on ajoute 2 et on multiplie par le coefficient de points du level&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int up()&lt;br /&gt;
{&lt;br /&gt;
  for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++)&lt;br /&gt;
  {&lt;br /&gt;
    if (digitalRead(PIN_BTN))   // appuie sur le bouton&lt;br /&gt;
    {&lt;br /&gt;
      while (digitalRead(PIN_BTN))    // blocage du bouton tant que celui-ci n'a pas été relaché&lt;br /&gt;
      {&lt;br /&gt;
        delay(2);&lt;br /&gt;
      }&lt;br /&gt;
      last_point = i-1;     // on concerve la valeur de la led choisie pour la réafficher après le flash&lt;br /&gt;
      return i - 1;   // renvoie la position de la led au moment de l'appuie sur le bouton&lt;br /&gt;
    }&lt;br /&gt;
    leds[i - 1] = CRGB::Black;&lt;br /&gt;
    delay(3);&lt;br /&gt;
&lt;br /&gt;
    leds[level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2] = CRGB::White;&lt;br /&gt;
    leds[i] = color;&lt;br /&gt;
&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(delay_level);&lt;br /&gt;
  }&lt;br /&gt;
  leds[NUM_OF_LEDS_BY_LEVEL * level + 20] = CRGB::Black;&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
  delay(delay_level);&lt;br /&gt;
  return 0;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int down()&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  for (int i = NUM_OF_LEDS_BY_LEVEL * level +  NUM_OF_LEDS_BY_LEVEL - 1; i &amp;gt;= NUM_OF_LEDS_BY_LEVEL * level ; i--)&lt;br /&gt;
  {&lt;br /&gt;
    if (digitalRead(PIN_BTN))&lt;br /&gt;
    {&lt;br /&gt;
      while (digitalRead(PIN_BTN))&lt;br /&gt;
      {&lt;br /&gt;
        delay(2);&lt;br /&gt;
      }&lt;br /&gt;
      last_point = i+1;&lt;br /&gt;
      return i + 1;   // renvoie la position de la led au moment de l'appuie sur le bouton&lt;br /&gt;
    }&lt;br /&gt;
    leds[i + 1] = CRGB::Black;&lt;br /&gt;
    delay(3);&lt;br /&gt;
&lt;br /&gt;
    leds[level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2] = CRGB::White;&lt;br /&gt;
    leds[i] = color;&lt;br /&gt;
&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(delay_level);&lt;br /&gt;
  }&lt;br /&gt;
  leds[NUM_OF_LEDS_BY_LEVEL] = CRGB::Black;&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
  delay(delay_level);&lt;br /&gt;
  return 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
void flash()   // fonction de décoration qui fait clignoter les leds en blanc avant le passage de niveau&lt;br /&gt;
{&lt;br /&gt;
  for (int cpt = 0; cpt &amp;lt; 4; cpt++) &lt;br /&gt;
  {&lt;br /&gt;
    for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++)  // On met toute les leds du niveau en blanc&lt;br /&gt;
    {&lt;br /&gt;
      leds[i] = CRGB::White;&lt;br /&gt;
    }&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
&lt;br /&gt;
    delay(100);&lt;br /&gt;
    for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++) // On éteint toutes les leds du niveau&lt;br /&gt;
    {&lt;br /&gt;
      leds[i] = CRGB::Black;&lt;br /&gt;
    }&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(100);&lt;br /&gt;
  }&lt;br /&gt;
  leds[last_point] = CRGB::Red;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void score_leds()   // affichage du score avec les leds&lt;br /&gt;
{&lt;br /&gt;
  for (int i = 0; i &amp;lt; score; i++)&lt;br /&gt;
  {&lt;br /&gt;
    leds[i] = CRGB::Red;&lt;br /&gt;
&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(10);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void reset_leds()   // on éteint toutes les leds&lt;br /&gt;
{&lt;br /&gt;
  for (int i = 0; i &amp;lt; NUM_LEDS; i++)&lt;br /&gt;
  {&lt;br /&gt;
    leds[i] = CRGB::Black;&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void animation_attente()&lt;br /&gt;
{&lt;br /&gt;
    for(int i = 0; i &amp;lt; NUM_LEDS; i++)&lt;br /&gt;
    {&lt;br /&gt;
      leds[i].red = random(0,255);&lt;br /&gt;
      leds[i].green = random(0,255);&lt;br /&gt;
      leds[i].blue = random(0,255);&lt;br /&gt;
    }&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
void level_up()   // changement de niveau&lt;br /&gt;
{&lt;br /&gt;
  flash();  // animation&lt;br /&gt;
  level++;  // incrémentation de la variable niveau&lt;br /&gt;
  delay_level -= 4; // le jeu devient de plus en plus rapide&lt;br /&gt;
  if (level &amp;gt;= NUM_OF_LEVELS)   // fin du jeu&lt;br /&gt;
  {&lt;br /&gt;
    reset_leds();&lt;br /&gt;
    score_leds();   // affichage score&lt;br /&gt;
    delay(3000);&lt;br /&gt;
    reset_leds();&lt;br /&gt;
    while (!digitalRead(PIN_BTN))   // on attend que l'utilisateur appuie sur un bonton&lt;br /&gt;
    {&lt;br /&gt;
      animation_attente();&lt;br /&gt;
      delay(200);&lt;br /&gt;
    }&lt;br /&gt;
    while (digitalRead(PIN_BTN))  // on vérifie que le bouton n'est pas resté appuyé&lt;br /&gt;
    {&lt;br /&gt;
      delay(10);&lt;br /&gt;
    }&lt;br /&gt;
    // on réinitialise le jeu&lt;br /&gt;
    level = 0;      &lt;br /&gt;
    reset_leds();&lt;br /&gt;
    score = 0;&lt;br /&gt;
    delay_level = 30;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==étapes de fabrication==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===étape 1: câbler et souder===&lt;br /&gt;
câbler les fils entre les leds, la carte arduino et le bouton puis souder les fils si nécessaire&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Cablage.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
===étape 2: le support===&lt;br /&gt;
réaliser le support en coupant et collant les cartons&lt;br /&gt;
&lt;br /&gt;
===étape ...===&lt;br /&gt;
===troubleshouting===&lt;br /&gt;
quelles sont difficultés, les problèmes, quelles sont les solutions, les trucs et astuces pour que ça marche ?&lt;br /&gt;
&lt;br /&gt;
1er problème : le programme ne marchait pas car la LED était montée à l'envers&lt;br /&gt;
&lt;br /&gt;
==Sources et documentation complémentaire==&lt;br /&gt;
&lt;br /&gt;
==ne pas modifier sous cette ligne==&lt;br /&gt;
[[Catégorie:Enib2024]]&lt;/div&gt;</summary>
		<author><name>Arnaud...</name></author>	</entry>

	<entry>
		<id>http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2024_:_CatchTheJackpot&amp;diff=25771</id>
		<title>ENIB 2024 : CatchTheJackpot</title>
		<link rel="alternate" type="text/html" href="http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2024_:_CatchTheJackpot&amp;diff=25771"/>
				<updated>2024-01-30T13:15:12Z</updated>
		
		<summary type="html">&lt;p&gt;Arnaud... : /* fichiers à joindre */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Fichier:Ahok.jpg|vignette]]&lt;br /&gt;
Titre de la fiche expérience :&lt;br /&gt;
==description==&lt;br /&gt;
&lt;br /&gt;
Ce projet fonction grâce à une carte Arduino, des LEDs et un bouton. &lt;br /&gt;
&lt;br /&gt;
Une lumière traverse le ruban de gauche à droite et lorsqu'elle est au milieu, il faut appuyer sur le bouton au bon moment pour gagner.&lt;br /&gt;
&lt;br /&gt;
==réalisé par :==&lt;br /&gt;
 -Arnaud Genty&lt;br /&gt;
 -Maxime Bintein&lt;br /&gt;
 -Tristan Le Coz&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
éventuelle vidéo&lt;br /&gt;
&lt;br /&gt;
==Liste des composants==&lt;br /&gt;
&lt;br /&gt;
* Bouton poussoir style Arcade&lt;br /&gt;
* Arduino nano&lt;br /&gt;
* 2 rubans de LED adressable (85 LEDs pour être exacte) &lt;br /&gt;
* Carton&lt;br /&gt;
* Câbles mini-USB&lt;br /&gt;
* Câbles&lt;br /&gt;
&lt;br /&gt;
==Outils==&lt;br /&gt;
&lt;br /&gt;
* Cutter&lt;br /&gt;
* Marqueur noir&lt;br /&gt;
* Pistolet à colle&lt;br /&gt;
* Scotch&lt;br /&gt;
* Fer à souder&lt;br /&gt;
&lt;br /&gt;
* Bibliothèque Arduino FastLed &lt;br /&gt;
  https://fastled.io/&lt;br /&gt;
==fichiers à joindre==&lt;br /&gt;
code, ficher d'impression 3D, de découpe laser ou vinyle, ...&lt;br /&gt;
&lt;br /&gt;
===Code :===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Arduino&amp;quot; line&amp;gt;&lt;br /&gt;
#include &amp;quot;FastLED.h&amp;quot;                    //bibliothèque pour controler le ruban led&lt;br /&gt;
#define NUM_LEDS 86&lt;br /&gt;
#define NUM_OF_LEDS_BY_LEVEL 17         // nombre de leds par niveau&lt;br /&gt;
#define NUM_OF_LEVELS 5                  // nombre de niveaux&lt;br /&gt;
#define PIN_BTN 3                       // Entree du bouton&lt;br /&gt;
#define PIN_LEDS 2                      // Sortie du ruban led&lt;br /&gt;
&lt;br /&gt;
// Dans ce programme nous avons utilisé presque intégralement des variables globales&lt;br /&gt;
&lt;br /&gt;
CRGB leds[NUM_LEDS];&lt;br /&gt;
int level = 0;        // niveau auquel le joueur est&lt;br /&gt;
int delay_level = 30; // délai qui permet de controler la vitesse de déplacement de la led&lt;br /&gt;
auto color = CRGB::Purple; // couleur de la led qui se déplace&lt;br /&gt;
int score = 0;           // socre du joueur&lt;br /&gt;
const double coef[] = {1, 1.4, 1.7, 1.9, 2, 2.2}; // coefficient multiplicateur de point par niveau&lt;br /&gt;
int last_point = 0;     // sauvegarde de la derniere led allumée pour la rallumer après flash()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Déclarations de fonctions&lt;br /&gt;
int compute_score(int score_of_level);    // calcul du score par niveau&lt;br /&gt;
int up();           // deplacement led&lt;br /&gt;
int down();         // deplacement led dans l'autre sense&lt;br /&gt;
void level_up();    // passage de niveau&lt;br /&gt;
void flash();       // animation de victoire d'un niveau&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  FastLED.addLeds&amp;lt;NEOPIXEL, 2&amp;gt;(leds, NUM_LEDS);     // setup du ruban de led sur la sortie PIN_LEDS =&amp;gt; 2&lt;br /&gt;
  pinMode(PIN_BTN, INPUT);                          // setup du bouton dur l'entrée PIN_BTN =&amp;gt; 3&lt;br /&gt;
  Serial.begin(9600);                               // setup moniteur série pour debug&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
&lt;br /&gt;
  int score_of_level;&lt;br /&gt;
  if (score_of_level = up())              // led avance dans un sense&lt;br /&gt;
  {&lt;br /&gt;
    score += compute_score(score_of_level);       // ajout score du niveau&lt;br /&gt;
    level_up();&lt;br /&gt;
  }&lt;br /&gt;
  else if (score_of_level = down())       // led avance dans l'autre sense&lt;br /&gt;
  {&lt;br /&gt;
    score += compute_score(score_of_level);       // ajout score du niveau&lt;br /&gt;
    level_up();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int compute_score(int score_of_level)&lt;br /&gt;
{&lt;br /&gt;
  return (NUM_OF_LEDS_BY_LEVEL/2 - (int)abs((level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2) - score_of_level)) * coef[level] + 1;&lt;br /&gt;
  // On calcul le nombre de leds d'un niveau moins la différence entre la led du joueur et celle du milieu on ajoute 2 et on multiplie par le coefficient de points du level&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int up()&lt;br /&gt;
{&lt;br /&gt;
  for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++)&lt;br /&gt;
  {&lt;br /&gt;
    if (digitalRead(PIN_BTN))   // appuie sur le bouton&lt;br /&gt;
    {&lt;br /&gt;
      while (digitalRead(PIN_BTN))    // blocage du bouton tant que celui-ci n'a pas été relaché&lt;br /&gt;
      {&lt;br /&gt;
        delay(2);&lt;br /&gt;
      }&lt;br /&gt;
      last_point = i-1;     // on concerve la valeur de la led choisie pour la réafficher après le flash&lt;br /&gt;
      return i - 1;   // renvoie la position de la led au moment de l'appuie sur le bouton&lt;br /&gt;
    }&lt;br /&gt;
    leds[i - 1] = CRGB::Black;&lt;br /&gt;
    delay(3);&lt;br /&gt;
&lt;br /&gt;
    leds[level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2] = CRGB::White;&lt;br /&gt;
    leds[i] = color;&lt;br /&gt;
&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(delay_level);&lt;br /&gt;
  }&lt;br /&gt;
  leds[NUM_OF_LEDS_BY_LEVEL * level + 20] = CRGB::Black;&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
  delay(delay_level);&lt;br /&gt;
  return 0;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int down()&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  for (int i = NUM_OF_LEDS_BY_LEVEL * level +  NUM_OF_LEDS_BY_LEVEL - 1; i &amp;gt;= NUM_OF_LEDS_BY_LEVEL * level ; i--)&lt;br /&gt;
  {&lt;br /&gt;
    if (digitalRead(PIN_BTN))&lt;br /&gt;
    {&lt;br /&gt;
      while (digitalRead(PIN_BTN))&lt;br /&gt;
      {&lt;br /&gt;
        delay(2);&lt;br /&gt;
      }&lt;br /&gt;
      last_point = i+1;&lt;br /&gt;
      return i + 1;   // renvoie la position de la led au moment de l'appuie sur le bouton&lt;br /&gt;
    }&lt;br /&gt;
    leds[i + 1] = CRGB::Black;&lt;br /&gt;
    delay(3);&lt;br /&gt;
&lt;br /&gt;
    leds[level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2] = CRGB::White;&lt;br /&gt;
    leds[i] = color;&lt;br /&gt;
&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(delay_level);&lt;br /&gt;
  }&lt;br /&gt;
  leds[NUM_OF_LEDS_BY_LEVEL] = CRGB::Black;&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
  delay(delay_level);&lt;br /&gt;
  return 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
void flash()   // fonction de décoration qui fait clignoter les leds en blanc avant le passage de niveau&lt;br /&gt;
{&lt;br /&gt;
  for (int cpt = 0; cpt &amp;lt; 4; cpt++) &lt;br /&gt;
  {&lt;br /&gt;
    for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++)  // On met toute les leds du niveau en blanc&lt;br /&gt;
    {&lt;br /&gt;
      leds[i] = CRGB::White;&lt;br /&gt;
    }&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
&lt;br /&gt;
    delay(100);&lt;br /&gt;
    for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++) // On éteint toutes les leds du niveau&lt;br /&gt;
    {&lt;br /&gt;
      leds[i] = CRGB::Black;&lt;br /&gt;
    }&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(100);&lt;br /&gt;
  }&lt;br /&gt;
  leds[last_point] = CRGB::Red;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void score_leds()   // affichage du score avec les leds&lt;br /&gt;
{&lt;br /&gt;
  for (int i = 0; i &amp;lt; score; i++)&lt;br /&gt;
  {&lt;br /&gt;
    leds[i] = CRGB::Red;&lt;br /&gt;
&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(10);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void reset_leds()   // on éteint toutes les leds&lt;br /&gt;
{&lt;br /&gt;
  for (int i = 0; i &amp;lt; NUM_LEDS; i++)&lt;br /&gt;
  {&lt;br /&gt;
    leds[i] = CRGB::Black;&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void animation_attente()&lt;br /&gt;
{&lt;br /&gt;
    for(int i = 0; i &amp;lt; NUM_LEDS; i++)&lt;br /&gt;
    {&lt;br /&gt;
      leds[i].red = random(0,255);&lt;br /&gt;
      leds[i].green = random(0,255);&lt;br /&gt;
      leds[i].blue = random(0,255);&lt;br /&gt;
    }&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
void level_up()   // changement de niveau&lt;br /&gt;
{&lt;br /&gt;
  flash();  // animation&lt;br /&gt;
  level++;  // incrémentation de la variable niveau&lt;br /&gt;
  delay_level -= 4; // le jeu devient de plus en plus rapide&lt;br /&gt;
  if (level &amp;gt;= NUM_OF_LEVELS)   // fin du jeu&lt;br /&gt;
  {&lt;br /&gt;
    reset_leds();&lt;br /&gt;
    score_leds();   // affichage score&lt;br /&gt;
    delay(3000);&lt;br /&gt;
    reset_leds();&lt;br /&gt;
    while (!digitalRead(PIN_BTN))   // on attend que l'utilisateur appuie sur un bonton&lt;br /&gt;
    {&lt;br /&gt;
      animation_attente();&lt;br /&gt;
      delay(200);&lt;br /&gt;
    }&lt;br /&gt;
    while (digitalRead(PIN_BTN))  // on vérifie que le bouton n'est pas resté appuyé&lt;br /&gt;
    {&lt;br /&gt;
      delay(10);&lt;br /&gt;
    }&lt;br /&gt;
    // on réinitialise le jeu&lt;br /&gt;
    level = 0;      &lt;br /&gt;
    reset_leds();&lt;br /&gt;
    score = 0;&lt;br /&gt;
    delay_level = 30;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==étapes de fabrication==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===étape 1: câbler et souder===&lt;br /&gt;
câbler les fils entre les leds, la carte arduino et le bouton puis souder les fils si nécessaire&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Cablage.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
===étape 2: le support===&lt;br /&gt;
réaliser le support en coupant et collant les cartons&lt;br /&gt;
&lt;br /&gt;
===étape ...===&lt;br /&gt;
===troubleshouting===&lt;br /&gt;
quelles sont difficultés, les problèmes, quelles sont les solutions, les trucs et astuces pour que ça marche ?&lt;br /&gt;
&lt;br /&gt;
==Sources et documentation complémentaire==&lt;br /&gt;
&lt;br /&gt;
==ne pas modifier sous cette ligne==&lt;br /&gt;
[[Catégorie:Enib2024]]&lt;/div&gt;</summary>
		<author><name>Arnaud...</name></author>	</entry>

	<entry>
		<id>http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2024_:_CatchTheJackpot&amp;diff=25770</id>
		<title>ENIB 2024 : CatchTheJackpot</title>
		<link rel="alternate" type="text/html" href="http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2024_:_CatchTheJackpot&amp;diff=25770"/>
				<updated>2024-01-30T13:14:44Z</updated>
		
		<summary type="html">&lt;p&gt;Arnaud... : /* Code */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Fichier:Ahok.jpg|vignette]]&lt;br /&gt;
Titre de la fiche expérience :&lt;br /&gt;
==description==&lt;br /&gt;
&lt;br /&gt;
Ce projet fonction grâce à une carte Arduino, des LEDs et un bouton. &lt;br /&gt;
&lt;br /&gt;
Une lumière traverse le ruban de gauche à droite et lorsqu'elle est au milieu, il faut appuyer sur le bouton au bon moment pour gagner.&lt;br /&gt;
&lt;br /&gt;
==réalisé par :==&lt;br /&gt;
 -Arnaud Genty&lt;br /&gt;
 -Maxime Bintein&lt;br /&gt;
 -Tristan Le Coz&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
éventuelle vidéo&lt;br /&gt;
&lt;br /&gt;
==Liste des composants==&lt;br /&gt;
&lt;br /&gt;
* Bouton poussoir style Arcade&lt;br /&gt;
* Arduino nano&lt;br /&gt;
* 2 rubans de LED adressable (85 LEDs pour être exacte) &lt;br /&gt;
* Carton&lt;br /&gt;
* Câbles mini-USB&lt;br /&gt;
* Câbles&lt;br /&gt;
&lt;br /&gt;
==Outils==&lt;br /&gt;
&lt;br /&gt;
* Cutter&lt;br /&gt;
* Marqueur noir&lt;br /&gt;
* Pistolet à colle&lt;br /&gt;
* Scotch&lt;br /&gt;
* Fer à souder&lt;br /&gt;
&lt;br /&gt;
* Bibliothèque Arduino FastLed &lt;br /&gt;
  https://fastled.io/&lt;br /&gt;
==fichiers à joindre==&lt;br /&gt;
code, ficher d'impression 3D, de découpe laser ou vinyle, ...&lt;br /&gt;
&lt;br /&gt;
==étapes de fabrication==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===étape 1: câbler et souder===&lt;br /&gt;
câbler les fils entre les leds, la carte arduino et le bouton puis souder les fils si nécessaire&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Cablage.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
===étape 2: le support===&lt;br /&gt;
réaliser le support en coupant et collant les cartons&lt;br /&gt;
&lt;br /&gt;
===étape ...===&lt;br /&gt;
===troubleshouting===&lt;br /&gt;
quelles sont difficultés, les problèmes, quelles sont les solutions, les trucs et astuces pour que ça marche ?&lt;br /&gt;
&lt;br /&gt;
==Sources et documentation complémentaire==&lt;br /&gt;
&lt;br /&gt;
==ne pas modifier sous cette ligne==&lt;br /&gt;
[[Catégorie:Enib2024]]&lt;/div&gt;</summary>
		<author><name>Arnaud...</name></author>	</entry>

	<entry>
		<id>http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2024_:_CatchTheJackpot&amp;diff=25767</id>
		<title>ENIB 2024 : CatchTheJackpot</title>
		<link rel="alternate" type="text/html" href="http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2024_:_CatchTheJackpot&amp;diff=25767"/>
				<updated>2024-01-30T13:13:14Z</updated>
		
		<summary type="html">&lt;p&gt;Arnaud... : /* étapes de fabrication */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Fichier:Ahok.jpg|vignette]]&lt;br /&gt;
Titre de la fiche expérience :&lt;br /&gt;
==description==&lt;br /&gt;
&lt;br /&gt;
Ce projet fonction grâce à une carte Arduino, des LEDs et un bouton. &lt;br /&gt;
&lt;br /&gt;
Une lumière traverse le ruban de gauche à droite et lorsqu'elle est au milieu, il faut appuyer sur le bouton au bon moment pour gagner.&lt;br /&gt;
&lt;br /&gt;
==réalisé par :==&lt;br /&gt;
 -Arnaud Genty&lt;br /&gt;
 -Maxime Bintein&lt;br /&gt;
 -Tristan Le Coz&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
éventuelle vidéo&lt;br /&gt;
&lt;br /&gt;
==Liste des composants==&lt;br /&gt;
&lt;br /&gt;
* Bouton poussoir style Arcade&lt;br /&gt;
* Arduino nano&lt;br /&gt;
* 2 rubans de LED adressable (85 LEDs pour être exacte) &lt;br /&gt;
* Carton&lt;br /&gt;
* Câbles mini-USB&lt;br /&gt;
* Câbles&lt;br /&gt;
&lt;br /&gt;
==Outils==&lt;br /&gt;
&lt;br /&gt;
* Cutter&lt;br /&gt;
* Marqueur noir&lt;br /&gt;
* Pistolet à colle&lt;br /&gt;
* Scotch&lt;br /&gt;
* Fer à souder&lt;br /&gt;
&lt;br /&gt;
* Bibliothèque Arduino FastLed &lt;br /&gt;
  https://fastled.io/&lt;br /&gt;
==fichiers à joindre==&lt;br /&gt;
code, ficher d'impression 3D, de découpe laser ou vinyle, ...&lt;br /&gt;
&lt;br /&gt;
==Code==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Arduino&amp;quot; line&amp;gt;&lt;br /&gt;
#include &amp;quot;FastLED.h&amp;quot;                    //bibliothèque pour controler le ruban led&lt;br /&gt;
#define NUM_LEDS 86&lt;br /&gt;
#define NUM_OF_LEDS_BY_LEVEL 17         // nombre de leds par niveau&lt;br /&gt;
#define NUM_OF_LEVELS 5                  // nombre de niveaux&lt;br /&gt;
#define PIN_BTN 3                       // Entree du bouton&lt;br /&gt;
#define PIN_LEDS 2                      // Sortie du ruban led&lt;br /&gt;
&lt;br /&gt;
// Dans ce programme nous avons utilisé presque intégralement des variables globales&lt;br /&gt;
&lt;br /&gt;
CRGB leds[NUM_LEDS];&lt;br /&gt;
int level = 0;        // niveau auquel le joueur est&lt;br /&gt;
int delay_level = 30; // délai qui permet de controler la vitesse de déplacement de la led&lt;br /&gt;
auto color = CRGB::Purple; // couleur de la led qui se déplace&lt;br /&gt;
int score = 0;           // socre du joueur&lt;br /&gt;
const double coef[] = {1, 1.4, 1.7, 1.9, 2, 2.2}; // coefficient multiplicateur de point par niveau&lt;br /&gt;
int last_point = 0;     // sauvegarde de la derniere led allumée pour la rallumer après flash()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Déclarations de fonctions&lt;br /&gt;
int compute_score(int score_of_level);    // calcul du score par niveau&lt;br /&gt;
int up();           // deplacement led&lt;br /&gt;
int down();         // deplacement led dans l'autre sense&lt;br /&gt;
void level_up();    // passage de niveau&lt;br /&gt;
void flash();       // animation de victoire d'un niveau&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  FastLED.addLeds&amp;lt;NEOPIXEL, 2&amp;gt;(leds, NUM_LEDS);     // setup du ruban de led sur la sortie PIN_LEDS =&amp;gt; 2&lt;br /&gt;
  pinMode(PIN_BTN, INPUT);                          // setup du bouton dur l'entrée PIN_BTN =&amp;gt; 3&lt;br /&gt;
  Serial.begin(9600);                               // setup moniteur série pour debug&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
&lt;br /&gt;
  int score_of_level;&lt;br /&gt;
  if (score_of_level = up())              // led avance dans un sense&lt;br /&gt;
  {&lt;br /&gt;
    score += compute_score(score_of_level);       // ajout score du niveau&lt;br /&gt;
    level_up();&lt;br /&gt;
  }&lt;br /&gt;
  else if (score_of_level = down())       // led avance dans l'autre sense&lt;br /&gt;
  {&lt;br /&gt;
    score += compute_score(score_of_level);       // ajout score du niveau&lt;br /&gt;
    level_up();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int compute_score(int score_of_level)&lt;br /&gt;
{&lt;br /&gt;
  return (NUM_OF_LEDS_BY_LEVEL/2 - (int)abs((level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2) - score_of_level)) * coef[level] + 1;&lt;br /&gt;
  // On calcul le nombre de leds d'un niveau moins la différence entre la led du joueur et celle du milieu on ajoute 2 et on multiplie par le coefficient de points du level&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int up()&lt;br /&gt;
{&lt;br /&gt;
  for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++)&lt;br /&gt;
  {&lt;br /&gt;
    if (digitalRead(PIN_BTN))   // appuie sur le bouton&lt;br /&gt;
    {&lt;br /&gt;
      while (digitalRead(PIN_BTN))    // blocage du bouton tant que celui-ci n'a pas été relaché&lt;br /&gt;
      {&lt;br /&gt;
        delay(2);&lt;br /&gt;
      }&lt;br /&gt;
      last_point = i-1;     // on concerve la valeur de la led choisie pour la réafficher après le flash&lt;br /&gt;
      return i - 1;   // renvoie la position de la led au moment de l'appuie sur le bouton&lt;br /&gt;
    }&lt;br /&gt;
    leds[i - 1] = CRGB::Black;&lt;br /&gt;
    delay(3);&lt;br /&gt;
&lt;br /&gt;
    leds[level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2] = CRGB::White;&lt;br /&gt;
    leds[i] = color;&lt;br /&gt;
&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(delay_level);&lt;br /&gt;
  }&lt;br /&gt;
  leds[NUM_OF_LEDS_BY_LEVEL * level + 20] = CRGB::Black;&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
  delay(delay_level);&lt;br /&gt;
  return 0;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int down()&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  for (int i = NUM_OF_LEDS_BY_LEVEL * level +  NUM_OF_LEDS_BY_LEVEL - 1; i &amp;gt;= NUM_OF_LEDS_BY_LEVEL * level ; i--)&lt;br /&gt;
  {&lt;br /&gt;
    if (digitalRead(PIN_BTN))&lt;br /&gt;
    {&lt;br /&gt;
      while (digitalRead(PIN_BTN))&lt;br /&gt;
      {&lt;br /&gt;
        delay(2);&lt;br /&gt;
      }&lt;br /&gt;
      last_point = i+1;&lt;br /&gt;
      return i + 1;   // renvoie la position de la led au moment de l'appuie sur le bouton&lt;br /&gt;
    }&lt;br /&gt;
    leds[i + 1] = CRGB::Black;&lt;br /&gt;
    delay(3);&lt;br /&gt;
&lt;br /&gt;
    leds[level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2] = CRGB::White;&lt;br /&gt;
    leds[i] = color;&lt;br /&gt;
&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(delay_level);&lt;br /&gt;
  }&lt;br /&gt;
  leds[NUM_OF_LEDS_BY_LEVEL] = CRGB::Black;&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
  delay(delay_level);&lt;br /&gt;
  return 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
void flash()   // fonction de décoration qui fait clignoter les leds en blanc avant le passage de niveau&lt;br /&gt;
{&lt;br /&gt;
  for (int cpt = 0; cpt &amp;lt; 4; cpt++) &lt;br /&gt;
  {&lt;br /&gt;
    for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++)  // On met toute les leds du niveau en blanc&lt;br /&gt;
    {&lt;br /&gt;
      leds[i] = CRGB::White;&lt;br /&gt;
    }&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
&lt;br /&gt;
    delay(100);&lt;br /&gt;
    for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++) // On éteint toutes les leds du niveau&lt;br /&gt;
    {&lt;br /&gt;
      leds[i] = CRGB::Black;&lt;br /&gt;
    }&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(100);&lt;br /&gt;
  }&lt;br /&gt;
  leds[last_point] = CRGB::Red;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void score_leds()   // affichage du score avec les leds&lt;br /&gt;
{&lt;br /&gt;
  for (int i = 0; i &amp;lt; score; i++)&lt;br /&gt;
  {&lt;br /&gt;
    leds[i] = CRGB::Red;&lt;br /&gt;
&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(10);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void reset_leds()   // on éteint toutes les leds&lt;br /&gt;
{&lt;br /&gt;
  for (int i = 0; i &amp;lt; NUM_LEDS; i++)&lt;br /&gt;
  {&lt;br /&gt;
    leds[i] = CRGB::Black;&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void animation_attente()&lt;br /&gt;
{&lt;br /&gt;
    for(int i = 0; i &amp;lt; NUM_LEDS; i++)&lt;br /&gt;
    {&lt;br /&gt;
      leds[i].red = random(0,255);&lt;br /&gt;
      leds[i].green = random(0,255);&lt;br /&gt;
      leds[i].blue = random(0,255);&lt;br /&gt;
    }&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
void level_up()   // changement de niveau&lt;br /&gt;
{&lt;br /&gt;
  flash();  // animation&lt;br /&gt;
  level++;  // incrémentation de la variable niveau&lt;br /&gt;
  delay_level -= 4; // le jeu devient de plus en plus rapide&lt;br /&gt;
  if (level &amp;gt;= NUM_OF_LEVELS)   // fin du jeu&lt;br /&gt;
  {&lt;br /&gt;
    reset_leds();&lt;br /&gt;
    score_leds();   // affichage score&lt;br /&gt;
    delay(3000);&lt;br /&gt;
    reset_leds();&lt;br /&gt;
    while (!digitalRead(PIN_BTN))   // on attend que l'utilisateur appuie sur un bonton&lt;br /&gt;
    {&lt;br /&gt;
      animation_attente();&lt;br /&gt;
      delay(200);&lt;br /&gt;
    }&lt;br /&gt;
    while (digitalRead(PIN_BTN))  // on vérifie que le bouton n'est pas resté appuyé&lt;br /&gt;
    {&lt;br /&gt;
      delay(10);&lt;br /&gt;
    }&lt;br /&gt;
    // on réinitialise le jeu&lt;br /&gt;
    level = 0;      &lt;br /&gt;
    reset_leds();&lt;br /&gt;
    score = 0;&lt;br /&gt;
    delay_level = 30;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==étapes de fabrication==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===étape 1: câbler et souder===&lt;br /&gt;
câbler les fils entre les leds, la carte arduino et le bouton puis souder les fils si nécessaire&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Cablage.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
===étape 2: le support===&lt;br /&gt;
réaliser le support en coupant et collant les cartons&lt;br /&gt;
&lt;br /&gt;
===étape ...===&lt;br /&gt;
===troubleshouting===&lt;br /&gt;
quelles sont difficultés, les problèmes, quelles sont les solutions, les trucs et astuces pour que ça marche ?&lt;br /&gt;
&lt;br /&gt;
==Sources et documentation complémentaire==&lt;br /&gt;
&lt;br /&gt;
==ne pas modifier sous cette ligne==&lt;br /&gt;
[[Catégorie:Enib2024]]&lt;/div&gt;</summary>
		<author><name>Arnaud...</name></author>	</entry>

	<entry>
		<id>http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2024_:_CatchTheJackpot&amp;diff=25763</id>
		<title>ENIB 2024 : CatchTheJackpot</title>
		<link rel="alternate" type="text/html" href="http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2024_:_CatchTheJackpot&amp;diff=25763"/>
				<updated>2024-01-30T13:12:00Z</updated>
		
		<summary type="html">&lt;p&gt;Arnaud... : /* étape 2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Fichier:Ahok.jpg|vignette]]&lt;br /&gt;
Titre de la fiche expérience :&lt;br /&gt;
==description==&lt;br /&gt;
&lt;br /&gt;
Ce projet fonction grâce à une carte Arduino, des LEDs et un bouton. &lt;br /&gt;
&lt;br /&gt;
Une lumière traverse le ruban de gauche à droite et lorsqu'elle est au milieu, il faut appuyer sur le bouton au bon moment pour gagner.&lt;br /&gt;
&lt;br /&gt;
==réalisé par :==&lt;br /&gt;
 -Arnaud Genty&lt;br /&gt;
 -Maxime Bintein&lt;br /&gt;
 -Tristan Le Coz&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
éventuelle vidéo&lt;br /&gt;
&lt;br /&gt;
==Liste des composants==&lt;br /&gt;
&lt;br /&gt;
* Bouton poussoir style Arcade&lt;br /&gt;
* Arduino nano&lt;br /&gt;
* 2 rubans de LED adressable (85 LEDs pour être exacte) &lt;br /&gt;
* Carton&lt;br /&gt;
* Câbles mini-USB&lt;br /&gt;
* Câbles&lt;br /&gt;
&lt;br /&gt;
==Outils==&lt;br /&gt;
&lt;br /&gt;
* Cutter&lt;br /&gt;
* Marqueur noir&lt;br /&gt;
* Pistolet à colle&lt;br /&gt;
* Scotch&lt;br /&gt;
* Fer à souder&lt;br /&gt;
&lt;br /&gt;
* Bibliothèque Arduino FastLed &lt;br /&gt;
  https://fastled.io/&lt;br /&gt;
==fichiers à joindre==&lt;br /&gt;
code, ficher d'impression 3D, de découpe laser ou vinyle, ...&lt;br /&gt;
&lt;br /&gt;
==Code==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Arduino&amp;quot; line&amp;gt;&lt;br /&gt;
#include &amp;quot;FastLED.h&amp;quot;                    //bibliothèque pour controler le ruban led&lt;br /&gt;
#define NUM_LEDS 86&lt;br /&gt;
#define NUM_OF_LEDS_BY_LEVEL 17         // nombre de leds par niveau&lt;br /&gt;
#define NUM_OF_LEVELS 5                  // nombre de niveaux&lt;br /&gt;
#define PIN_BTN 3                       // Entree du bouton&lt;br /&gt;
#define PIN_LEDS 2                      // Sortie du ruban led&lt;br /&gt;
&lt;br /&gt;
// Dans ce programme nous avons utilisé presque intégralement des variables globales&lt;br /&gt;
&lt;br /&gt;
CRGB leds[NUM_LEDS];&lt;br /&gt;
int level = 0;        // niveau auquel le joueur est&lt;br /&gt;
int delay_level = 30; // délai qui permet de controler la vitesse de déplacement de la led&lt;br /&gt;
auto color = CRGB::Purple; // couleur de la led qui se déplace&lt;br /&gt;
int score = 0;           // socre du joueur&lt;br /&gt;
const double coef[] = {1, 1.4, 1.7, 1.9, 2, 2.2}; // coefficient multiplicateur de point par niveau&lt;br /&gt;
int last_point = 0;     // sauvegarde de la derniere led allumée pour la rallumer après flash()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Déclarations de fonctions&lt;br /&gt;
int compute_score(int score_of_level);    // calcul du score par niveau&lt;br /&gt;
int up();           // deplacement led&lt;br /&gt;
int down();         // deplacement led dans l'autre sense&lt;br /&gt;
void level_up();    // passage de niveau&lt;br /&gt;
void flash();       // animation de victoire d'un niveau&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  FastLED.addLeds&amp;lt;NEOPIXEL, 2&amp;gt;(leds, NUM_LEDS);     // setup du ruban de led sur la sortie PIN_LEDS =&amp;gt; 2&lt;br /&gt;
  pinMode(PIN_BTN, INPUT);                          // setup du bouton dur l'entrée PIN_BTN =&amp;gt; 3&lt;br /&gt;
  Serial.begin(9600);                               // setup moniteur série pour debug&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
&lt;br /&gt;
  int score_of_level;&lt;br /&gt;
  if (score_of_level = up())              // led avance dans un sense&lt;br /&gt;
  {&lt;br /&gt;
    score += compute_score(score_of_level);       // ajout score du niveau&lt;br /&gt;
    level_up();&lt;br /&gt;
  }&lt;br /&gt;
  else if (score_of_level = down())       // led avance dans l'autre sense&lt;br /&gt;
  {&lt;br /&gt;
    score += compute_score(score_of_level);       // ajout score du niveau&lt;br /&gt;
    level_up();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int compute_score(int score_of_level)&lt;br /&gt;
{&lt;br /&gt;
  return (NUM_OF_LEDS_BY_LEVEL/2 - (int)abs((level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2) - score_of_level)) * coef[level] + 1;&lt;br /&gt;
  // On calcul le nombre de leds d'un niveau moins la différence entre la led du joueur et celle du milieu on ajoute 2 et on multiplie par le coefficient de points du level&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int up()&lt;br /&gt;
{&lt;br /&gt;
  for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++)&lt;br /&gt;
  {&lt;br /&gt;
    if (digitalRead(PIN_BTN))   // appuie sur le bouton&lt;br /&gt;
    {&lt;br /&gt;
      while (digitalRead(PIN_BTN))    // blocage du bouton tant que celui-ci n'a pas été relaché&lt;br /&gt;
      {&lt;br /&gt;
        delay(2);&lt;br /&gt;
      }&lt;br /&gt;
      last_point = i-1;     // on concerve la valeur de la led choisie pour la réafficher après le flash&lt;br /&gt;
      return i - 1;   // renvoie la position de la led au moment de l'appuie sur le bouton&lt;br /&gt;
    }&lt;br /&gt;
    leds[i - 1] = CRGB::Black;&lt;br /&gt;
    delay(3);&lt;br /&gt;
&lt;br /&gt;
    leds[level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2] = CRGB::White;&lt;br /&gt;
    leds[i] = color;&lt;br /&gt;
&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(delay_level);&lt;br /&gt;
  }&lt;br /&gt;
  leds[NUM_OF_LEDS_BY_LEVEL * level + 20] = CRGB::Black;&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
  delay(delay_level);&lt;br /&gt;
  return 0;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int down()&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  for (int i = NUM_OF_LEDS_BY_LEVEL * level +  NUM_OF_LEDS_BY_LEVEL - 1; i &amp;gt;= NUM_OF_LEDS_BY_LEVEL * level ; i--)&lt;br /&gt;
  {&lt;br /&gt;
    if (digitalRead(PIN_BTN))&lt;br /&gt;
    {&lt;br /&gt;
      while (digitalRead(PIN_BTN))&lt;br /&gt;
      {&lt;br /&gt;
        delay(2);&lt;br /&gt;
      }&lt;br /&gt;
      last_point = i+1;&lt;br /&gt;
      return i + 1;   // renvoie la position de la led au moment de l'appuie sur le bouton&lt;br /&gt;
    }&lt;br /&gt;
    leds[i + 1] = CRGB::Black;&lt;br /&gt;
    delay(3);&lt;br /&gt;
&lt;br /&gt;
    leds[level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2] = CRGB::White;&lt;br /&gt;
    leds[i] = color;&lt;br /&gt;
&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(delay_level);&lt;br /&gt;
  }&lt;br /&gt;
  leds[NUM_OF_LEDS_BY_LEVEL] = CRGB::Black;&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
  delay(delay_level);&lt;br /&gt;
  return 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
void flash()   // fonction de décoration qui fait clignoter les leds en blanc avant le passage de niveau&lt;br /&gt;
{&lt;br /&gt;
  for (int cpt = 0; cpt &amp;lt; 4; cpt++) &lt;br /&gt;
  {&lt;br /&gt;
    for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++)  // On met toute les leds du niveau en blanc&lt;br /&gt;
    {&lt;br /&gt;
      leds[i] = CRGB::White;&lt;br /&gt;
    }&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
&lt;br /&gt;
    delay(100);&lt;br /&gt;
    for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++) // On éteint toutes les leds du niveau&lt;br /&gt;
    {&lt;br /&gt;
      leds[i] = CRGB::Black;&lt;br /&gt;
    }&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(100);&lt;br /&gt;
  }&lt;br /&gt;
  leds[last_point] = CRGB::Red;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void score_leds()   // affichage du score avec les leds&lt;br /&gt;
{&lt;br /&gt;
  for (int i = 0; i &amp;lt; score; i++)&lt;br /&gt;
  {&lt;br /&gt;
    leds[i] = CRGB::Red;&lt;br /&gt;
&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(10);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void reset_leds()   // on éteint toutes les leds&lt;br /&gt;
{&lt;br /&gt;
  for (int i = 0; i &amp;lt; NUM_LEDS; i++)&lt;br /&gt;
  {&lt;br /&gt;
    leds[i] = CRGB::Black;&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void animation_attente()&lt;br /&gt;
{&lt;br /&gt;
    for(int i = 0; i &amp;lt; NUM_LEDS; i++)&lt;br /&gt;
    {&lt;br /&gt;
      leds[i].red = random(0,255);&lt;br /&gt;
      leds[i].green = random(0,255);&lt;br /&gt;
      leds[i].blue = random(0,255);&lt;br /&gt;
    }&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
void level_up()   // changement de niveau&lt;br /&gt;
{&lt;br /&gt;
  flash();  // animation&lt;br /&gt;
  level++;  // incrémentation de la variable niveau&lt;br /&gt;
  delay_level -= 4; // le jeu devient de plus en plus rapide&lt;br /&gt;
  if (level &amp;gt;= NUM_OF_LEVELS)   // fin du jeu&lt;br /&gt;
  {&lt;br /&gt;
    reset_leds();&lt;br /&gt;
    score_leds();   // affichage score&lt;br /&gt;
    delay(3000);&lt;br /&gt;
    reset_leds();&lt;br /&gt;
    while (!digitalRead(PIN_BTN))   // on attend que l'utilisateur appuie sur un bonton&lt;br /&gt;
    {&lt;br /&gt;
      animation_attente();&lt;br /&gt;
      delay(200);&lt;br /&gt;
    }&lt;br /&gt;
    while (digitalRead(PIN_BTN))  // on vérifie que le bouton n'est pas resté appuyé&lt;br /&gt;
    {&lt;br /&gt;
      delay(10);&lt;br /&gt;
    }&lt;br /&gt;
    // on réinitialise le jeu&lt;br /&gt;
    level = 0;      &lt;br /&gt;
    reset_leds();&lt;br /&gt;
    score = 0;&lt;br /&gt;
    delay_level = 30;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==étapes de fabrication==&lt;br /&gt;
indiquer autant d'étape que nécessaire, chacune illustrée par des images (phot, dessins, ...)&lt;br /&gt;
&lt;br /&gt;
===étape 1: câbler et souder===&lt;br /&gt;
câbler les fils entre les leds, la carte arduino et le bouton puis souder les fils si nécessaire&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Cablage.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
===étape 2: le support===&lt;br /&gt;
réaliser le support en coupant et collant les cartons&lt;br /&gt;
&lt;br /&gt;
===étape ...===&lt;br /&gt;
===troubleshouting===&lt;br /&gt;
quelles sont difficultés, les problèmes, quelles sont les solutions, les trucs et astuces pour que ça marche ?&lt;br /&gt;
&lt;br /&gt;
==Sources et documentation complémentaire==&lt;br /&gt;
&lt;br /&gt;
==ne pas modifier sous cette ligne==&lt;br /&gt;
[[Catégorie:Enib2024]]&lt;/div&gt;</summary>
		<author><name>Arnaud...</name></author>	</entry>

	<entry>
		<id>http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2024_:_CatchTheJackpot&amp;diff=25754</id>
		<title>ENIB 2024 : CatchTheJackpot</title>
		<link rel="alternate" type="text/html" href="http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2024_:_CatchTheJackpot&amp;diff=25754"/>
				<updated>2024-01-30T13:08:57Z</updated>
		
		<summary type="html">&lt;p&gt;Arnaud... : /* étape 1: câbler et souder */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Fichier:Ahok.jpg|vignette]]&lt;br /&gt;
Titre de la fiche expérience :&lt;br /&gt;
==description==&lt;br /&gt;
&lt;br /&gt;
Ce projet fonction grâce à une carte Arduino, des LEDs et un bouton. &lt;br /&gt;
&lt;br /&gt;
Une lumière traverse le ruban de gauche à droite et lorsqu'elle est au milieu, il faut appuyer sur le bouton au bon moment pour gagner.&lt;br /&gt;
&lt;br /&gt;
==réalisé par :==&lt;br /&gt;
 -Arnaud Genty&lt;br /&gt;
 -Maxime Bintein&lt;br /&gt;
 -Tristan Le Coz&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
éventuelle vidéo&lt;br /&gt;
&lt;br /&gt;
==Liste des composants==&lt;br /&gt;
&lt;br /&gt;
* Bouton poussoir style Arcade&lt;br /&gt;
* Arduino nano&lt;br /&gt;
* 2 rubans de LED adressable (85 LEDs pour être exacte) &lt;br /&gt;
* Carton&lt;br /&gt;
* Câbles mini-USB&lt;br /&gt;
* Câbles&lt;br /&gt;
&lt;br /&gt;
==Outils==&lt;br /&gt;
&lt;br /&gt;
* Cutter&lt;br /&gt;
* Marqueur noir&lt;br /&gt;
* Pistolet à colle&lt;br /&gt;
* Scotch&lt;br /&gt;
* Fer à souder&lt;br /&gt;
&lt;br /&gt;
* Bibliothèque Arduino FastLed &lt;br /&gt;
  https://fastled.io/&lt;br /&gt;
==fichiers à joindre==&lt;br /&gt;
code, ficher d'impression 3D, de découpe laser ou vinyle, ...&lt;br /&gt;
&lt;br /&gt;
==Code==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Arduino&amp;quot; line&amp;gt;&lt;br /&gt;
#include &amp;quot;FastLED.h&amp;quot;                    //bibliothèque pour controler le ruban led&lt;br /&gt;
#define NUM_LEDS 86&lt;br /&gt;
#define NUM_OF_LEDS_BY_LEVEL 17         // nombre de leds par niveau&lt;br /&gt;
#define NUM_OF_LEVELS 5                  // nombre de niveaux&lt;br /&gt;
#define PIN_BTN 3                       // Entree du bouton&lt;br /&gt;
#define PIN_LEDS 2                      // Sortie du ruban led&lt;br /&gt;
&lt;br /&gt;
// Dans ce programme nous avons utilisé presque intégralement des variables globales&lt;br /&gt;
&lt;br /&gt;
CRGB leds[NUM_LEDS];&lt;br /&gt;
int level = 0;        // niveau auquel le joueur est&lt;br /&gt;
int delay_level = 30; // délai qui permet de controler la vitesse de déplacement de la led&lt;br /&gt;
auto color = CRGB::Purple; // couleur de la led qui se déplace&lt;br /&gt;
int score = 0;           // socre du joueur&lt;br /&gt;
const double coef[] = {1, 1.4, 1.7, 1.9, 2, 2.2}; // coefficient multiplicateur de point par niveau&lt;br /&gt;
int last_point = 0;     // sauvegarde de la derniere led allumée pour la rallumer après flash()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Déclarations de fonctions&lt;br /&gt;
int compute_score(int score_of_level);    // calcul du score par niveau&lt;br /&gt;
int up();           // deplacement led&lt;br /&gt;
int down();         // deplacement led dans l'autre sense&lt;br /&gt;
void level_up();    // passage de niveau&lt;br /&gt;
void flash();       // animation de victoire d'un niveau&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  FastLED.addLeds&amp;lt;NEOPIXEL, 2&amp;gt;(leds, NUM_LEDS);     // setup du ruban de led sur la sortie PIN_LEDS =&amp;gt; 2&lt;br /&gt;
  pinMode(PIN_BTN, INPUT);                          // setup du bouton dur l'entrée PIN_BTN =&amp;gt; 3&lt;br /&gt;
  Serial.begin(9600);                               // setup moniteur série pour debug&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
&lt;br /&gt;
  int score_of_level;&lt;br /&gt;
  if (score_of_level = up())              // led avance dans un sense&lt;br /&gt;
  {&lt;br /&gt;
    score += compute_score(score_of_level);       // ajout score du niveau&lt;br /&gt;
    level_up();&lt;br /&gt;
  }&lt;br /&gt;
  else if (score_of_level = down())       // led avance dans l'autre sense&lt;br /&gt;
  {&lt;br /&gt;
    score += compute_score(score_of_level);       // ajout score du niveau&lt;br /&gt;
    level_up();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int compute_score(int score_of_level)&lt;br /&gt;
{&lt;br /&gt;
  return (NUM_OF_LEDS_BY_LEVEL/2 - (int)abs((level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2) - score_of_level)) * coef[level] + 1;&lt;br /&gt;
  // On calcul le nombre de leds d'un niveau moins la différence entre la led du joueur et celle du milieu on ajoute 2 et on multiplie par le coefficient de points du level&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int up()&lt;br /&gt;
{&lt;br /&gt;
  for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++)&lt;br /&gt;
  {&lt;br /&gt;
    if (digitalRead(PIN_BTN))   // appuie sur le bouton&lt;br /&gt;
    {&lt;br /&gt;
      while (digitalRead(PIN_BTN))    // blocage du bouton tant que celui-ci n'a pas été relaché&lt;br /&gt;
      {&lt;br /&gt;
        delay(2);&lt;br /&gt;
      }&lt;br /&gt;
      last_point = i-1;     // on concerve la valeur de la led choisie pour la réafficher après le flash&lt;br /&gt;
      return i - 1;   // renvoie la position de la led au moment de l'appuie sur le bouton&lt;br /&gt;
    }&lt;br /&gt;
    leds[i - 1] = CRGB::Black;&lt;br /&gt;
    delay(3);&lt;br /&gt;
&lt;br /&gt;
    leds[level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2] = CRGB::White;&lt;br /&gt;
    leds[i] = color;&lt;br /&gt;
&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(delay_level);&lt;br /&gt;
  }&lt;br /&gt;
  leds[NUM_OF_LEDS_BY_LEVEL * level + 20] = CRGB::Black;&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
  delay(delay_level);&lt;br /&gt;
  return 0;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int down()&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  for (int i = NUM_OF_LEDS_BY_LEVEL * level +  NUM_OF_LEDS_BY_LEVEL - 1; i &amp;gt;= NUM_OF_LEDS_BY_LEVEL * level ; i--)&lt;br /&gt;
  {&lt;br /&gt;
    if (digitalRead(PIN_BTN))&lt;br /&gt;
    {&lt;br /&gt;
      while (digitalRead(PIN_BTN))&lt;br /&gt;
      {&lt;br /&gt;
        delay(2);&lt;br /&gt;
      }&lt;br /&gt;
      last_point = i+1;&lt;br /&gt;
      return i + 1;   // renvoie la position de la led au moment de l'appuie sur le bouton&lt;br /&gt;
    }&lt;br /&gt;
    leds[i + 1] = CRGB::Black;&lt;br /&gt;
    delay(3);&lt;br /&gt;
&lt;br /&gt;
    leds[level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2] = CRGB::White;&lt;br /&gt;
    leds[i] = color;&lt;br /&gt;
&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(delay_level);&lt;br /&gt;
  }&lt;br /&gt;
  leds[NUM_OF_LEDS_BY_LEVEL] = CRGB::Black;&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
  delay(delay_level);&lt;br /&gt;
  return 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
void flash()   // fonction de décoration qui fait clignoter les leds en blanc avant le passage de niveau&lt;br /&gt;
{&lt;br /&gt;
  for (int cpt = 0; cpt &amp;lt; 4; cpt++) &lt;br /&gt;
  {&lt;br /&gt;
    for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++)  // On met toute les leds du niveau en blanc&lt;br /&gt;
    {&lt;br /&gt;
      leds[i] = CRGB::White;&lt;br /&gt;
    }&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
&lt;br /&gt;
    delay(100);&lt;br /&gt;
    for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++) // On éteint toutes les leds du niveau&lt;br /&gt;
    {&lt;br /&gt;
      leds[i] = CRGB::Black;&lt;br /&gt;
    }&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(100);&lt;br /&gt;
  }&lt;br /&gt;
  leds[last_point] = CRGB::Red;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void score_leds()   // affichage du score avec les leds&lt;br /&gt;
{&lt;br /&gt;
  for (int i = 0; i &amp;lt; score; i++)&lt;br /&gt;
  {&lt;br /&gt;
    leds[i] = CRGB::Red;&lt;br /&gt;
&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(10);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void reset_leds()   // on éteint toutes les leds&lt;br /&gt;
{&lt;br /&gt;
  for (int i = 0; i &amp;lt; NUM_LEDS; i++)&lt;br /&gt;
  {&lt;br /&gt;
    leds[i] = CRGB::Black;&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void animation_attente()&lt;br /&gt;
{&lt;br /&gt;
    for(int i = 0; i &amp;lt; NUM_LEDS; i++)&lt;br /&gt;
    {&lt;br /&gt;
      leds[i].red = random(0,255);&lt;br /&gt;
      leds[i].green = random(0,255);&lt;br /&gt;
      leds[i].blue = random(0,255);&lt;br /&gt;
    }&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
void level_up()   // changement de niveau&lt;br /&gt;
{&lt;br /&gt;
  flash();  // animation&lt;br /&gt;
  level++;  // incrémentation de la variable niveau&lt;br /&gt;
  delay_level -= 4; // le jeu devient de plus en plus rapide&lt;br /&gt;
  if (level &amp;gt;= NUM_OF_LEVELS)   // fin du jeu&lt;br /&gt;
  {&lt;br /&gt;
    reset_leds();&lt;br /&gt;
    score_leds();   // affichage score&lt;br /&gt;
    delay(3000);&lt;br /&gt;
    reset_leds();&lt;br /&gt;
    while (!digitalRead(PIN_BTN))   // on attend que l'utilisateur appuie sur un bonton&lt;br /&gt;
    {&lt;br /&gt;
      animation_attente();&lt;br /&gt;
      delay(200);&lt;br /&gt;
    }&lt;br /&gt;
    while (digitalRead(PIN_BTN))  // on vérifie que le bouton n'est pas resté appuyé&lt;br /&gt;
    {&lt;br /&gt;
      delay(10);&lt;br /&gt;
    }&lt;br /&gt;
    // on réinitialise le jeu&lt;br /&gt;
    level = 0;      &lt;br /&gt;
    reset_leds();&lt;br /&gt;
    score = 0;&lt;br /&gt;
    delay_level = 30;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==étapes de fabrication==&lt;br /&gt;
indiquer autant d'étape que nécessaire, chacune illustrée par des images (phot, dessins, ...)&lt;br /&gt;
&lt;br /&gt;
===étape 1: câbler et souder===&lt;br /&gt;
câbler les fils entre les leds, la carte arduino et le bouton puis souder les fils si nécessaire&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Cablage.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
===étape 2===&lt;br /&gt;
===étape ...===&lt;br /&gt;
===troubleshouting===&lt;br /&gt;
quelles sont difficultés, les problèmes, quelles sont les solutions, les trucs et astuces pour que ça marche ?&lt;br /&gt;
&lt;br /&gt;
==Sources et documentation complémentaire==&lt;br /&gt;
&lt;br /&gt;
==ne pas modifier sous cette ligne==&lt;br /&gt;
[[Catégorie:Enib2024]]&lt;/div&gt;</summary>
		<author><name>Arnaud...</name></author>	</entry>

	<entry>
		<id>http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2024_:_CatchTheJackpot&amp;diff=25753</id>
		<title>ENIB 2024 : CatchTheJackpot</title>
		<link rel="alternate" type="text/html" href="http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2024_:_CatchTheJackpot&amp;diff=25753"/>
				<updated>2024-01-30T13:08:45Z</updated>
		
		<summary type="html">&lt;p&gt;Arnaud... : /* étape 1: câbler et souder */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Fichier:Ahok.jpg|vignette]]&lt;br /&gt;
Titre de la fiche expérience :&lt;br /&gt;
==description==&lt;br /&gt;
&lt;br /&gt;
Ce projet fonction grâce à une carte Arduino, des LEDs et un bouton. &lt;br /&gt;
&lt;br /&gt;
Une lumière traverse le ruban de gauche à droite et lorsqu'elle est au milieu, il faut appuyer sur le bouton au bon moment pour gagner.&lt;br /&gt;
&lt;br /&gt;
==réalisé par :==&lt;br /&gt;
 -Arnaud Genty&lt;br /&gt;
 -Maxime Bintein&lt;br /&gt;
 -Tristan Le Coz&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
éventuelle vidéo&lt;br /&gt;
&lt;br /&gt;
==Liste des composants==&lt;br /&gt;
&lt;br /&gt;
* Bouton poussoir style Arcade&lt;br /&gt;
* Arduino nano&lt;br /&gt;
* 2 rubans de LED adressable (85 LEDs pour être exacte) &lt;br /&gt;
* Carton&lt;br /&gt;
* Câbles mini-USB&lt;br /&gt;
* Câbles&lt;br /&gt;
&lt;br /&gt;
==Outils==&lt;br /&gt;
&lt;br /&gt;
* Cutter&lt;br /&gt;
* Marqueur noir&lt;br /&gt;
* Pistolet à colle&lt;br /&gt;
* Scotch&lt;br /&gt;
* Fer à souder&lt;br /&gt;
&lt;br /&gt;
* Bibliothèque Arduino FastLed &lt;br /&gt;
  https://fastled.io/&lt;br /&gt;
==fichiers à joindre==&lt;br /&gt;
code, ficher d'impression 3D, de découpe laser ou vinyle, ...&lt;br /&gt;
&lt;br /&gt;
==Code==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Arduino&amp;quot; line&amp;gt;&lt;br /&gt;
#include &amp;quot;FastLED.h&amp;quot;                    //bibliothèque pour controler le ruban led&lt;br /&gt;
#define NUM_LEDS 86&lt;br /&gt;
#define NUM_OF_LEDS_BY_LEVEL 17         // nombre de leds par niveau&lt;br /&gt;
#define NUM_OF_LEVELS 5                  // nombre de niveaux&lt;br /&gt;
#define PIN_BTN 3                       // Entree du bouton&lt;br /&gt;
#define PIN_LEDS 2                      // Sortie du ruban led&lt;br /&gt;
&lt;br /&gt;
// Dans ce programme nous avons utilisé presque intégralement des variables globales&lt;br /&gt;
&lt;br /&gt;
CRGB leds[NUM_LEDS];&lt;br /&gt;
int level = 0;        // niveau auquel le joueur est&lt;br /&gt;
int delay_level = 30; // délai qui permet de controler la vitesse de déplacement de la led&lt;br /&gt;
auto color = CRGB::Purple; // couleur de la led qui se déplace&lt;br /&gt;
int score = 0;           // socre du joueur&lt;br /&gt;
const double coef[] = {1, 1.4, 1.7, 1.9, 2, 2.2}; // coefficient multiplicateur de point par niveau&lt;br /&gt;
int last_point = 0;     // sauvegarde de la derniere led allumée pour la rallumer après flash()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Déclarations de fonctions&lt;br /&gt;
int compute_score(int score_of_level);    // calcul du score par niveau&lt;br /&gt;
int up();           // deplacement led&lt;br /&gt;
int down();         // deplacement led dans l'autre sense&lt;br /&gt;
void level_up();    // passage de niveau&lt;br /&gt;
void flash();       // animation de victoire d'un niveau&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  FastLED.addLeds&amp;lt;NEOPIXEL, 2&amp;gt;(leds, NUM_LEDS);     // setup du ruban de led sur la sortie PIN_LEDS =&amp;gt; 2&lt;br /&gt;
  pinMode(PIN_BTN, INPUT);                          // setup du bouton dur l'entrée PIN_BTN =&amp;gt; 3&lt;br /&gt;
  Serial.begin(9600);                               // setup moniteur série pour debug&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
&lt;br /&gt;
  int score_of_level;&lt;br /&gt;
  if (score_of_level = up())              // led avance dans un sense&lt;br /&gt;
  {&lt;br /&gt;
    score += compute_score(score_of_level);       // ajout score du niveau&lt;br /&gt;
    level_up();&lt;br /&gt;
  }&lt;br /&gt;
  else if (score_of_level = down())       // led avance dans l'autre sense&lt;br /&gt;
  {&lt;br /&gt;
    score += compute_score(score_of_level);       // ajout score du niveau&lt;br /&gt;
    level_up();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int compute_score(int score_of_level)&lt;br /&gt;
{&lt;br /&gt;
  return (NUM_OF_LEDS_BY_LEVEL/2 - (int)abs((level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2) - score_of_level)) * coef[level] + 1;&lt;br /&gt;
  // On calcul le nombre de leds d'un niveau moins la différence entre la led du joueur et celle du milieu on ajoute 2 et on multiplie par le coefficient de points du level&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int up()&lt;br /&gt;
{&lt;br /&gt;
  for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++)&lt;br /&gt;
  {&lt;br /&gt;
    if (digitalRead(PIN_BTN))   // appuie sur le bouton&lt;br /&gt;
    {&lt;br /&gt;
      while (digitalRead(PIN_BTN))    // blocage du bouton tant que celui-ci n'a pas été relaché&lt;br /&gt;
      {&lt;br /&gt;
        delay(2);&lt;br /&gt;
      }&lt;br /&gt;
      last_point = i-1;     // on concerve la valeur de la led choisie pour la réafficher après le flash&lt;br /&gt;
      return i - 1;   // renvoie la position de la led au moment de l'appuie sur le bouton&lt;br /&gt;
    }&lt;br /&gt;
    leds[i - 1] = CRGB::Black;&lt;br /&gt;
    delay(3);&lt;br /&gt;
&lt;br /&gt;
    leds[level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2] = CRGB::White;&lt;br /&gt;
    leds[i] = color;&lt;br /&gt;
&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(delay_level);&lt;br /&gt;
  }&lt;br /&gt;
  leds[NUM_OF_LEDS_BY_LEVEL * level + 20] = CRGB::Black;&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
  delay(delay_level);&lt;br /&gt;
  return 0;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int down()&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  for (int i = NUM_OF_LEDS_BY_LEVEL * level +  NUM_OF_LEDS_BY_LEVEL - 1; i &amp;gt;= NUM_OF_LEDS_BY_LEVEL * level ; i--)&lt;br /&gt;
  {&lt;br /&gt;
    if (digitalRead(PIN_BTN))&lt;br /&gt;
    {&lt;br /&gt;
      while (digitalRead(PIN_BTN))&lt;br /&gt;
      {&lt;br /&gt;
        delay(2);&lt;br /&gt;
      }&lt;br /&gt;
      last_point = i+1;&lt;br /&gt;
      return i + 1;   // renvoie la position de la led au moment de l'appuie sur le bouton&lt;br /&gt;
    }&lt;br /&gt;
    leds[i + 1] = CRGB::Black;&lt;br /&gt;
    delay(3);&lt;br /&gt;
&lt;br /&gt;
    leds[level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2] = CRGB::White;&lt;br /&gt;
    leds[i] = color;&lt;br /&gt;
&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(delay_level);&lt;br /&gt;
  }&lt;br /&gt;
  leds[NUM_OF_LEDS_BY_LEVEL] = CRGB::Black;&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
  delay(delay_level);&lt;br /&gt;
  return 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
void flash()   // fonction de décoration qui fait clignoter les leds en blanc avant le passage de niveau&lt;br /&gt;
{&lt;br /&gt;
  for (int cpt = 0; cpt &amp;lt; 4; cpt++) &lt;br /&gt;
  {&lt;br /&gt;
    for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++)  // On met toute les leds du niveau en blanc&lt;br /&gt;
    {&lt;br /&gt;
      leds[i] = CRGB::White;&lt;br /&gt;
    }&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
&lt;br /&gt;
    delay(100);&lt;br /&gt;
    for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++) // On éteint toutes les leds du niveau&lt;br /&gt;
    {&lt;br /&gt;
      leds[i] = CRGB::Black;&lt;br /&gt;
    }&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(100);&lt;br /&gt;
  }&lt;br /&gt;
  leds[last_point] = CRGB::Red;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void score_leds()   // affichage du score avec les leds&lt;br /&gt;
{&lt;br /&gt;
  for (int i = 0; i &amp;lt; score; i++)&lt;br /&gt;
  {&lt;br /&gt;
    leds[i] = CRGB::Red;&lt;br /&gt;
&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(10);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void reset_leds()   // on éteint toutes les leds&lt;br /&gt;
{&lt;br /&gt;
  for (int i = 0; i &amp;lt; NUM_LEDS; i++)&lt;br /&gt;
  {&lt;br /&gt;
    leds[i] = CRGB::Black;&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void animation_attente()&lt;br /&gt;
{&lt;br /&gt;
    for(int i = 0; i &amp;lt; NUM_LEDS; i++)&lt;br /&gt;
    {&lt;br /&gt;
      leds[i].red = random(0,255);&lt;br /&gt;
      leds[i].green = random(0,255);&lt;br /&gt;
      leds[i].blue = random(0,255);&lt;br /&gt;
    }&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
void level_up()   // changement de niveau&lt;br /&gt;
{&lt;br /&gt;
  flash();  // animation&lt;br /&gt;
  level++;  // incrémentation de la variable niveau&lt;br /&gt;
  delay_level -= 4; // le jeu devient de plus en plus rapide&lt;br /&gt;
  if (level &amp;gt;= NUM_OF_LEVELS)   // fin du jeu&lt;br /&gt;
  {&lt;br /&gt;
    reset_leds();&lt;br /&gt;
    score_leds();   // affichage score&lt;br /&gt;
    delay(3000);&lt;br /&gt;
    reset_leds();&lt;br /&gt;
    while (!digitalRead(PIN_BTN))   // on attend que l'utilisateur appuie sur un bonton&lt;br /&gt;
    {&lt;br /&gt;
      animation_attente();&lt;br /&gt;
      delay(200);&lt;br /&gt;
    }&lt;br /&gt;
    while (digitalRead(PIN_BTN))  // on vérifie que le bouton n'est pas resté appuyé&lt;br /&gt;
    {&lt;br /&gt;
      delay(10);&lt;br /&gt;
    }&lt;br /&gt;
    // on réinitialise le jeu&lt;br /&gt;
    level = 0;      &lt;br /&gt;
    reset_leds();&lt;br /&gt;
    score = 0;&lt;br /&gt;
    delay_level = 30;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==étapes de fabrication==&lt;br /&gt;
indiquer autant d'étape que nécessaire, chacune illustrée par des images (phot, dessins, ...)&lt;br /&gt;
&lt;br /&gt;
===étape 1: câbler et souder===&lt;br /&gt;
câbler les fils entre les leds, la carte arduino et le bouton puis souder les fils si nécessaire&lt;br /&gt;
[[Fichier:Cablage.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
===étape 2===&lt;br /&gt;
===étape ...===&lt;br /&gt;
===troubleshouting===&lt;br /&gt;
quelles sont difficultés, les problèmes, quelles sont les solutions, les trucs et astuces pour que ça marche ?&lt;br /&gt;
&lt;br /&gt;
==Sources et documentation complémentaire==&lt;br /&gt;
&lt;br /&gt;
==ne pas modifier sous cette ligne==&lt;br /&gt;
[[Catégorie:Enib2024]]&lt;/div&gt;</summary>
		<author><name>Arnaud...</name></author>	</entry>

	<entry>
		<id>http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2024_:_CatchTheJackpot&amp;diff=25723</id>
		<title>ENIB 2024 : CatchTheJackpot</title>
		<link rel="alternate" type="text/html" href="http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2024_:_CatchTheJackpot&amp;diff=25723"/>
				<updated>2024-01-30T11:28:15Z</updated>
		
		<summary type="html">&lt;p&gt;Arnaud... : /* étapes de fabrication */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Fichier:Ahok.jpg|vignette]]&lt;br /&gt;
Titre de la fiche expérience :&lt;br /&gt;
==description==&lt;br /&gt;
&lt;br /&gt;
Ce projet fonction grâce à une carte Arduino, des LEDs et un bouton. &lt;br /&gt;
&lt;br /&gt;
Une lumière traverse le ruban de gauche à droite et lorsqu'elle est au milieu, il faut appuyer sur le bouton au bon moment pour gagner.&lt;br /&gt;
&lt;br /&gt;
==réalisé par :==&lt;br /&gt;
 -Arnaud Genty&lt;br /&gt;
 -Maxime Bintein&lt;br /&gt;
 -Tristan Le Coz&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
éventuelle vidéo&lt;br /&gt;
&lt;br /&gt;
==Liste des composants==&lt;br /&gt;
&lt;br /&gt;
* Bouton poussoir style Arcade&lt;br /&gt;
* Arduino nano&lt;br /&gt;
* 2 rubans de LED adressable (85 LEDs pour être exacte) &lt;br /&gt;
* Carton&lt;br /&gt;
* Câbles mini-USB&lt;br /&gt;
* Câbles&lt;br /&gt;
&lt;br /&gt;
==Outils==&lt;br /&gt;
&lt;br /&gt;
* Cutter&lt;br /&gt;
* Marqueur noir&lt;br /&gt;
* Pistolet à colle&lt;br /&gt;
* Scotch&lt;br /&gt;
* Fer à souder&lt;br /&gt;
&lt;br /&gt;
* Bibliothèque Arduino FastLed &lt;br /&gt;
  https://fastled.io/&lt;br /&gt;
==fichiers à joindre==&lt;br /&gt;
code, ficher d'impression 3D, de découpe laser ou vinyle, ...&lt;br /&gt;
&lt;br /&gt;
==Code==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Arduino&amp;quot; line&amp;gt;&lt;br /&gt;
#include &amp;quot;FastLED.h&amp;quot;                    //bibliothèque pour controler le ruban led&lt;br /&gt;
#define NUM_LEDS 86&lt;br /&gt;
#define NUM_OF_LEDS_BY_LEVEL 17         // nombre de leds par niveau&lt;br /&gt;
#define NUM_OF_LEVELS 5                  // nombre de niveaux&lt;br /&gt;
#define PIN_BTN 3                       // Entree du bouton&lt;br /&gt;
#define PIN_LEDS 2                      // Sortie du ruban led&lt;br /&gt;
&lt;br /&gt;
// Dans ce programme nous avons utilisé presque intégralement des variables globales&lt;br /&gt;
&lt;br /&gt;
CRGB leds[NUM_LEDS];&lt;br /&gt;
int level = 0;        // niveau auquel le joueur est&lt;br /&gt;
int delay_level = 30; // délai qui permet de controler la vitesse de déplacement de la led&lt;br /&gt;
auto color = CRGB::Purple; // couleur de la led qui se déplace&lt;br /&gt;
int score = 0;           // socre du joueur&lt;br /&gt;
const double coef[] = {1, 1.4, 1.7, 1.9, 2, 2.2}; // coefficient multiplicateur de point par niveau&lt;br /&gt;
int last_point = 0;     // sauvegarde de la derniere led allumée pour la rallumer après flash()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Déclarations de fonctions&lt;br /&gt;
int compute_score(int score_of_level);    // calcul du score par niveau&lt;br /&gt;
int up();           // deplacement led&lt;br /&gt;
int down();         // deplacement led dans l'autre sense&lt;br /&gt;
void level_up();    // passage de niveau&lt;br /&gt;
void flash();       // animation de victoire d'un niveau&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  FastLED.addLeds&amp;lt;NEOPIXEL, 2&amp;gt;(leds, NUM_LEDS);     // setup du ruban de led sur la sortie PIN_LEDS =&amp;gt; 2&lt;br /&gt;
  pinMode(PIN_BTN, INPUT);                          // setup du bouton dur l'entrée PIN_BTN =&amp;gt; 3&lt;br /&gt;
  Serial.begin(9600);                               // setup moniteur série pour debug&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
&lt;br /&gt;
  int score_of_level;&lt;br /&gt;
  if (score_of_level = up())              // led avance dans un sense&lt;br /&gt;
  {&lt;br /&gt;
    score += compute_score(score_of_level);       // ajout score du niveau&lt;br /&gt;
    level_up();&lt;br /&gt;
  }&lt;br /&gt;
  else if (score_of_level = down())       // led avance dans l'autre sense&lt;br /&gt;
  {&lt;br /&gt;
    score += compute_score(score_of_level);       // ajout score du niveau&lt;br /&gt;
    level_up();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int compute_score(int score_of_level)&lt;br /&gt;
{&lt;br /&gt;
  return (NUM_OF_LEDS_BY_LEVEL/2 - (int)abs((level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2) - score_of_level)) * coef[level] + 1;&lt;br /&gt;
  // On calcul le nombre de leds d'un niveau moins la différence entre la led du joueur et celle du milieu on ajoute 2 et on multiplie par le coefficient de points du level&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int up()&lt;br /&gt;
{&lt;br /&gt;
  for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++)&lt;br /&gt;
  {&lt;br /&gt;
    if (digitalRead(PIN_BTN))   // appuie sur le bouton&lt;br /&gt;
    {&lt;br /&gt;
      while (digitalRead(PIN_BTN))    // blocage du bouton tant que celui-ci n'a pas été relaché&lt;br /&gt;
      {&lt;br /&gt;
        delay(2);&lt;br /&gt;
      }&lt;br /&gt;
      last_point = i-1;     // on concerve la valeur de la led choisie pour la réafficher après le flash&lt;br /&gt;
      return i - 1;   // renvoie la position de la led au moment de l'appuie sur le bouton&lt;br /&gt;
    }&lt;br /&gt;
    leds[i - 1] = CRGB::Black;&lt;br /&gt;
    delay(3);&lt;br /&gt;
&lt;br /&gt;
    leds[level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2] = CRGB::White;&lt;br /&gt;
    leds[i] = color;&lt;br /&gt;
&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(delay_level);&lt;br /&gt;
  }&lt;br /&gt;
  leds[NUM_OF_LEDS_BY_LEVEL * level + 20] = CRGB::Black;&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
  delay(delay_level);&lt;br /&gt;
  return 0;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int down()&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  for (int i = NUM_OF_LEDS_BY_LEVEL * level +  NUM_OF_LEDS_BY_LEVEL - 1; i &amp;gt;= NUM_OF_LEDS_BY_LEVEL * level ; i--)&lt;br /&gt;
  {&lt;br /&gt;
    if (digitalRead(PIN_BTN))&lt;br /&gt;
    {&lt;br /&gt;
      while (digitalRead(PIN_BTN))&lt;br /&gt;
      {&lt;br /&gt;
        delay(2);&lt;br /&gt;
      }&lt;br /&gt;
      last_point = i+1;&lt;br /&gt;
      return i + 1;   // renvoie la position de la led au moment de l'appuie sur le bouton&lt;br /&gt;
    }&lt;br /&gt;
    leds[i + 1] = CRGB::Black;&lt;br /&gt;
    delay(3);&lt;br /&gt;
&lt;br /&gt;
    leds[level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2] = CRGB::White;&lt;br /&gt;
    leds[i] = color;&lt;br /&gt;
&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(delay_level);&lt;br /&gt;
  }&lt;br /&gt;
  leds[NUM_OF_LEDS_BY_LEVEL] = CRGB::Black;&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
  delay(delay_level);&lt;br /&gt;
  return 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
void flash()   // fonction de décoration qui fait clignoter les leds en blanc avant le passage de niveau&lt;br /&gt;
{&lt;br /&gt;
  for (int cpt = 0; cpt &amp;lt; 4; cpt++) &lt;br /&gt;
  {&lt;br /&gt;
    for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++)  // On met toute les leds du niveau en blanc&lt;br /&gt;
    {&lt;br /&gt;
      leds[i] = CRGB::White;&lt;br /&gt;
    }&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
&lt;br /&gt;
    delay(100);&lt;br /&gt;
    for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++) // On éteint toutes les leds du niveau&lt;br /&gt;
    {&lt;br /&gt;
      leds[i] = CRGB::Black;&lt;br /&gt;
    }&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(100);&lt;br /&gt;
  }&lt;br /&gt;
  leds[last_point] = CRGB::Red;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void score_leds()   // affichage du score avec les leds&lt;br /&gt;
{&lt;br /&gt;
  for (int i = 0; i &amp;lt; score; i++)&lt;br /&gt;
  {&lt;br /&gt;
    leds[i] = CRGB::Red;&lt;br /&gt;
&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(10);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void reset_leds()   // on éteint toutes les leds&lt;br /&gt;
{&lt;br /&gt;
  for (int i = 0; i &amp;lt; NUM_LEDS; i++)&lt;br /&gt;
  {&lt;br /&gt;
    leds[i] = CRGB::Black;&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void animation_attente()&lt;br /&gt;
{&lt;br /&gt;
    for(int i = 0; i &amp;lt; NUM_LEDS; i++)&lt;br /&gt;
    {&lt;br /&gt;
      leds[i].red = random(0,255);&lt;br /&gt;
      leds[i].green = random(0,255);&lt;br /&gt;
      leds[i].blue = random(0,255);&lt;br /&gt;
    }&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
void level_up()   // changement de niveau&lt;br /&gt;
{&lt;br /&gt;
  flash();  // animation&lt;br /&gt;
  level++;  // incrémentation de la variable niveau&lt;br /&gt;
  delay_level -= 4; // le jeu devient de plus en plus rapide&lt;br /&gt;
  if (level &amp;gt;= NUM_OF_LEVELS)   // fin du jeu&lt;br /&gt;
  {&lt;br /&gt;
    reset_leds();&lt;br /&gt;
    score_leds();   // affichage score&lt;br /&gt;
    delay(3000);&lt;br /&gt;
    reset_leds();&lt;br /&gt;
    while (!digitalRead(PIN_BTN))   // on attend que l'utilisateur appuie sur un bonton&lt;br /&gt;
    {&lt;br /&gt;
      animation_attente();&lt;br /&gt;
      delay(200);&lt;br /&gt;
    }&lt;br /&gt;
    while (digitalRead(PIN_BTN))  // on vérifie que le bouton n'est pas resté appuyé&lt;br /&gt;
    {&lt;br /&gt;
      delay(10);&lt;br /&gt;
    }&lt;br /&gt;
    // on réinitialise le jeu&lt;br /&gt;
    level = 0;      &lt;br /&gt;
    reset_leds();&lt;br /&gt;
    score = 0;&lt;br /&gt;
    delay_level = 30;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==étapes de fabrication==&lt;br /&gt;
indiquer autant d'étape que nécessaire, chacune illustrée par des images (phot, dessins, ...)&lt;br /&gt;
&lt;br /&gt;
===étape 1: câbler et souder===&lt;br /&gt;
câbler les fils entre les leds, la carte arduino et le bouton puis souder les fils si nécessaire&lt;br /&gt;
===étape 2===&lt;br /&gt;
===étape ...===&lt;br /&gt;
===troubleshouting===&lt;br /&gt;
quelles sont difficultés, les problèmes, quelles sont les solutions, les trucs et astuces pour que ça marche ?&lt;br /&gt;
&lt;br /&gt;
==Sources et documentation complémentaire==&lt;br /&gt;
&lt;br /&gt;
==ne pas modifier sous cette ligne==&lt;br /&gt;
[[Catégorie:Enib2024]]&lt;/div&gt;</summary>
		<author><name>Arnaud...</name></author>	</entry>

	<entry>
		<id>http://wiki.lesfabriquesduponant.net/index.php?title=Fichier:Cablage.jpg&amp;diff=25712</id>
		<title>Fichier:Cablage.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.lesfabriquesduponant.net/index.php?title=Fichier:Cablage.jpg&amp;diff=25712"/>
				<updated>2024-01-30T11:20:25Z</updated>
		
		<summary type="html">&lt;p&gt;Arnaud... : Arnaud... a téléversé une nouvelle version de Fichier:Cablage.jpg&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Arnaud...</name></author>	</entry>

	<entry>
		<id>http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2024_:_CatchTheJackpot&amp;diff=25705</id>
		<title>ENIB 2024 : CatchTheJackpot</title>
		<link rel="alternate" type="text/html" href="http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2024_:_CatchTheJackpot&amp;diff=25705"/>
				<updated>2024-01-30T11:13:05Z</updated>
		
		<summary type="html">&lt;p&gt;Arnaud... : /* description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Fichier:Ahok.jpg|vignette]]&lt;br /&gt;
Titre de la fiche expérience :&lt;br /&gt;
==description==&lt;br /&gt;
&lt;br /&gt;
Ce projet fonction grâce à une carte Arduino, des LEDs et un bouton. &lt;br /&gt;
&lt;br /&gt;
Une lumière traverse le ruban de gauche à droite et lorsqu'elle est au milieu, il faut appuyer sur le bouton au bon moment pour gagner.&lt;br /&gt;
&lt;br /&gt;
==réalisé par :==&lt;br /&gt;
 -Arnaud Genty&lt;br /&gt;
 -Maxime Bintein&lt;br /&gt;
 -Tristan Le Coz&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
éventuelle vidéo&lt;br /&gt;
&lt;br /&gt;
==Liste des composants==&lt;br /&gt;
&lt;br /&gt;
* Bouton poussoir style Arcade&lt;br /&gt;
* Arduino nano&lt;br /&gt;
* 2 rubans de LED adressable (85 LEDs pour être exacte) &lt;br /&gt;
* Carton&lt;br /&gt;
* Câbles mini-USB&lt;br /&gt;
* Câbles&lt;br /&gt;
&lt;br /&gt;
==Outils==&lt;br /&gt;
&lt;br /&gt;
* Cutter&lt;br /&gt;
* Marqueur noir&lt;br /&gt;
* Pistolet à colle&lt;br /&gt;
* Scotch&lt;br /&gt;
* Fer à souder&lt;br /&gt;
&lt;br /&gt;
* Bibliothèque Arduino FastLed &lt;br /&gt;
  https://fastled.io/&lt;br /&gt;
==fichiers à joindre==&lt;br /&gt;
code, ficher d'impression 3D, de découpe laser ou vinyle, ...&lt;br /&gt;
&lt;br /&gt;
==Code==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Arduino&amp;quot; line&amp;gt;&lt;br /&gt;
#include &amp;quot;FastLED.h&amp;quot;                    //bibliothèque pour controler le ruban led&lt;br /&gt;
#define NUM_LEDS 86&lt;br /&gt;
#define NUM_OF_LEDS_BY_LEVEL 17         // nombre de leds par niveau&lt;br /&gt;
#define NUM_OF_LEVELS 5                  // nombre de niveaux&lt;br /&gt;
#define PIN_BTN 3                       // Entree du bouton&lt;br /&gt;
#define PIN_LEDS 2                      // Sortie du ruban led&lt;br /&gt;
&lt;br /&gt;
// Dans ce programme nous avons utilisé presque intégralement des variables globales&lt;br /&gt;
&lt;br /&gt;
CRGB leds[NUM_LEDS];&lt;br /&gt;
int level = 0;        // niveau auquel le joueur est&lt;br /&gt;
int delay_level = 30; // délai qui permet de controler la vitesse de déplacement de la led&lt;br /&gt;
auto color = CRGB::Purple; // couleur de la led qui se déplace&lt;br /&gt;
int score = 0;           // socre du joueur&lt;br /&gt;
const double coef[] = {1, 1.4, 1.7, 1.9, 2, 2.2}; // coefficient multiplicateur de point par niveau&lt;br /&gt;
int last_point = 0;     // sauvegarde de la derniere led allumée pour la rallumer après flash()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Déclarations de fonctions&lt;br /&gt;
int compute_score(int score_of_level);    // calcul du score par niveau&lt;br /&gt;
int up();           // deplacement led&lt;br /&gt;
int down();         // deplacement led dans l'autre sense&lt;br /&gt;
void level_up();    // passage de niveau&lt;br /&gt;
void flash();       // animation de victoire d'un niveau&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  FastLED.addLeds&amp;lt;NEOPIXEL, 2&amp;gt;(leds, NUM_LEDS);     // setup du ruban de led sur la sortie PIN_LEDS =&amp;gt; 2&lt;br /&gt;
  pinMode(PIN_BTN, INPUT);                          // setup du bouton dur l'entrée PIN_BTN =&amp;gt; 3&lt;br /&gt;
  Serial.begin(9600);                               // setup moniteur série pour debug&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
&lt;br /&gt;
  int score_of_level;&lt;br /&gt;
  if (score_of_level = up())              // led avance dans un sense&lt;br /&gt;
  {&lt;br /&gt;
    score += compute_score(score_of_level);       // ajout score du niveau&lt;br /&gt;
    level_up();&lt;br /&gt;
  }&lt;br /&gt;
  else if (score_of_level = down())       // led avance dans l'autre sense&lt;br /&gt;
  {&lt;br /&gt;
    score += compute_score(score_of_level);       // ajout score du niveau&lt;br /&gt;
    level_up();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int compute_score(int score_of_level)&lt;br /&gt;
{&lt;br /&gt;
  return (NUM_OF_LEDS_BY_LEVEL/2 - (int)abs((level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2) - score_of_level)) * coef[level] + 1;&lt;br /&gt;
  // On calcul le nombre de leds d'un niveau moins la différence entre la led du joueur et celle du milieu on ajoute 2 et on multiplie par le coefficient de points du level&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int up()&lt;br /&gt;
{&lt;br /&gt;
  for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++)&lt;br /&gt;
  {&lt;br /&gt;
    if (digitalRead(PIN_BTN))   // appuie sur le bouton&lt;br /&gt;
    {&lt;br /&gt;
      while (digitalRead(PIN_BTN))    // blocage du bouton tant que celui-ci n'a pas été relaché&lt;br /&gt;
      {&lt;br /&gt;
        delay(2);&lt;br /&gt;
      }&lt;br /&gt;
      last_point = i-1;     // on concerve la valeur de la led choisie pour la réafficher après le flash&lt;br /&gt;
      return i - 1;   // renvoie la position de la led au moment de l'appuie sur le bouton&lt;br /&gt;
    }&lt;br /&gt;
    leds[i - 1] = CRGB::Black;&lt;br /&gt;
    delay(3);&lt;br /&gt;
&lt;br /&gt;
    leds[level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2] = CRGB::White;&lt;br /&gt;
    leds[i] = color;&lt;br /&gt;
&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(delay_level);&lt;br /&gt;
  }&lt;br /&gt;
  leds[NUM_OF_LEDS_BY_LEVEL * level + 20] = CRGB::Black;&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
  delay(delay_level);&lt;br /&gt;
  return 0;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int down()&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  for (int i = NUM_OF_LEDS_BY_LEVEL * level +  NUM_OF_LEDS_BY_LEVEL - 1; i &amp;gt;= NUM_OF_LEDS_BY_LEVEL * level ; i--)&lt;br /&gt;
  {&lt;br /&gt;
    if (digitalRead(PIN_BTN))&lt;br /&gt;
    {&lt;br /&gt;
      while (digitalRead(PIN_BTN))&lt;br /&gt;
      {&lt;br /&gt;
        delay(2);&lt;br /&gt;
      }&lt;br /&gt;
      last_point = i+1;&lt;br /&gt;
      return i + 1;   // renvoie la position de la led au moment de l'appuie sur le bouton&lt;br /&gt;
    }&lt;br /&gt;
    leds[i + 1] = CRGB::Black;&lt;br /&gt;
    delay(3);&lt;br /&gt;
&lt;br /&gt;
    leds[level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2] = CRGB::White;&lt;br /&gt;
    leds[i] = color;&lt;br /&gt;
&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(delay_level);&lt;br /&gt;
  }&lt;br /&gt;
  leds[NUM_OF_LEDS_BY_LEVEL] = CRGB::Black;&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
  delay(delay_level);&lt;br /&gt;
  return 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
void flash()   // fonction de décoration qui fait clignoter les leds en blanc avant le passage de niveau&lt;br /&gt;
{&lt;br /&gt;
  for (int cpt = 0; cpt &amp;lt; 4; cpt++) &lt;br /&gt;
  {&lt;br /&gt;
    for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++)  // On met toute les leds du niveau en blanc&lt;br /&gt;
    {&lt;br /&gt;
      leds[i] = CRGB::White;&lt;br /&gt;
    }&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
&lt;br /&gt;
    delay(100);&lt;br /&gt;
    for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++) // On éteint toutes les leds du niveau&lt;br /&gt;
    {&lt;br /&gt;
      leds[i] = CRGB::Black;&lt;br /&gt;
    }&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(100);&lt;br /&gt;
  }&lt;br /&gt;
  leds[last_point] = CRGB::Red;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void score_leds()   // affichage du score avec les leds&lt;br /&gt;
{&lt;br /&gt;
  for (int i = 0; i &amp;lt; score; i++)&lt;br /&gt;
  {&lt;br /&gt;
    leds[i] = CRGB::Red;&lt;br /&gt;
&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(10);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void reset_leds()   // on éteint toutes les leds&lt;br /&gt;
{&lt;br /&gt;
  for (int i = 0; i &amp;lt; NUM_LEDS; i++)&lt;br /&gt;
  {&lt;br /&gt;
    leds[i] = CRGB::Black;&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void animation_attente()&lt;br /&gt;
{&lt;br /&gt;
    for(int i = 0; i &amp;lt; NUM_LEDS; i++)&lt;br /&gt;
    {&lt;br /&gt;
      leds[i].red = random(0,255);&lt;br /&gt;
      leds[i].green = random(0,255);&lt;br /&gt;
      leds[i].blue = random(0,255);&lt;br /&gt;
    }&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
void level_up()   // changement de niveau&lt;br /&gt;
{&lt;br /&gt;
  flash();  // animation&lt;br /&gt;
  level++;  // incrémentation de la variable niveau&lt;br /&gt;
  delay_level -= 4; // le jeu devient de plus en plus rapide&lt;br /&gt;
  if (level &amp;gt;= NUM_OF_LEVELS)   // fin du jeu&lt;br /&gt;
  {&lt;br /&gt;
    reset_leds();&lt;br /&gt;
    score_leds();   // affichage score&lt;br /&gt;
    delay(3000);&lt;br /&gt;
    reset_leds();&lt;br /&gt;
    while (!digitalRead(PIN_BTN))   // on attend que l'utilisateur appuie sur un bonton&lt;br /&gt;
    {&lt;br /&gt;
      animation_attente();&lt;br /&gt;
      delay(200);&lt;br /&gt;
    }&lt;br /&gt;
    while (digitalRead(PIN_BTN))  // on vérifie que le bouton n'est pas resté appuyé&lt;br /&gt;
    {&lt;br /&gt;
      delay(10);&lt;br /&gt;
    }&lt;br /&gt;
    // on réinitialise le jeu&lt;br /&gt;
    level = 0;      &lt;br /&gt;
    reset_leds();&lt;br /&gt;
    score = 0;&lt;br /&gt;
    delay_level = 30;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==étapes de fabrication==&lt;br /&gt;
indiquer autant d'étape que nécessaire, chacune illustrée par des images (phot, dessins, ...)&lt;br /&gt;
&lt;br /&gt;
===étape 1===&lt;br /&gt;
===étape 2===&lt;br /&gt;
===étape ...===&lt;br /&gt;
===troubleshouting===&lt;br /&gt;
quelles sont difficultés, les problèmes, quelles sont les solutions, les trucs et astuces pour que ça marche ?&lt;br /&gt;
&lt;br /&gt;
==Sources et documentation complémentaire==&lt;br /&gt;
&lt;br /&gt;
==ne pas modifier sous cette ligne==&lt;br /&gt;
[[Catégorie:Enib2024]]&lt;/div&gt;</summary>
		<author><name>Arnaud...</name></author>	</entry>

	<entry>
		<id>http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2024_:_CatchTheJackpot&amp;diff=25704</id>
		<title>ENIB 2024 : CatchTheJackpot</title>
		<link rel="alternate" type="text/html" href="http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2024_:_CatchTheJackpot&amp;diff=25704"/>
				<updated>2024-01-30T11:12:49Z</updated>
		
		<summary type="html">&lt;p&gt;Arnaud... : /* description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Fichier:Ahok.jpg|vignette]]&lt;br /&gt;
Titre de la fiche expérience :&lt;br /&gt;
==description==&lt;br /&gt;
&lt;br /&gt;
Ce projet fonction grâce à une carte Arduino, des LEDs et un bouton. &lt;br /&gt;
Une lumière traverse le ruban de gauche à droite et lorsqu'elle est au milieu, il faut appuyer sur le bouton au bon moment pour gagner.&lt;br /&gt;
&lt;br /&gt;
==réalisé par :==&lt;br /&gt;
 -Arnaud Genty&lt;br /&gt;
 -Maxime Bintein&lt;br /&gt;
 -Tristan Le Coz&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
éventuelle vidéo&lt;br /&gt;
&lt;br /&gt;
==Liste des composants==&lt;br /&gt;
&lt;br /&gt;
* Bouton poussoir style Arcade&lt;br /&gt;
* Arduino nano&lt;br /&gt;
* 2 rubans de LED adressable (85 LEDs pour être exacte) &lt;br /&gt;
* Carton&lt;br /&gt;
* Câbles mini-USB&lt;br /&gt;
* Câbles&lt;br /&gt;
&lt;br /&gt;
==Outils==&lt;br /&gt;
&lt;br /&gt;
* Cutter&lt;br /&gt;
* Marqueur noir&lt;br /&gt;
* Pistolet à colle&lt;br /&gt;
* Scotch&lt;br /&gt;
* Fer à souder&lt;br /&gt;
&lt;br /&gt;
* Bibliothèque Arduino FastLed &lt;br /&gt;
  https://fastled.io/&lt;br /&gt;
==fichiers à joindre==&lt;br /&gt;
code, ficher d'impression 3D, de découpe laser ou vinyle, ...&lt;br /&gt;
&lt;br /&gt;
==Code==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Arduino&amp;quot; line&amp;gt;&lt;br /&gt;
#include &amp;quot;FastLED.h&amp;quot;                    //bibliothèque pour controler le ruban led&lt;br /&gt;
#define NUM_LEDS 86&lt;br /&gt;
#define NUM_OF_LEDS_BY_LEVEL 17         // nombre de leds par niveau&lt;br /&gt;
#define NUM_OF_LEVELS 5                  // nombre de niveaux&lt;br /&gt;
#define PIN_BTN 3                       // Entree du bouton&lt;br /&gt;
#define PIN_LEDS 2                      // Sortie du ruban led&lt;br /&gt;
&lt;br /&gt;
// Dans ce programme nous avons utilisé presque intégralement des variables globales&lt;br /&gt;
&lt;br /&gt;
CRGB leds[NUM_LEDS];&lt;br /&gt;
int level = 0;        // niveau auquel le joueur est&lt;br /&gt;
int delay_level = 30; // délai qui permet de controler la vitesse de déplacement de la led&lt;br /&gt;
auto color = CRGB::Purple; // couleur de la led qui se déplace&lt;br /&gt;
int score = 0;           // socre du joueur&lt;br /&gt;
const double coef[] = {1, 1.4, 1.7, 1.9, 2, 2.2}; // coefficient multiplicateur de point par niveau&lt;br /&gt;
int last_point = 0;     // sauvegarde de la derniere led allumée pour la rallumer après flash()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Déclarations de fonctions&lt;br /&gt;
int compute_score(int score_of_level);    // calcul du score par niveau&lt;br /&gt;
int up();           // deplacement led&lt;br /&gt;
int down();         // deplacement led dans l'autre sense&lt;br /&gt;
void level_up();    // passage de niveau&lt;br /&gt;
void flash();       // animation de victoire d'un niveau&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  FastLED.addLeds&amp;lt;NEOPIXEL, 2&amp;gt;(leds, NUM_LEDS);     // setup du ruban de led sur la sortie PIN_LEDS =&amp;gt; 2&lt;br /&gt;
  pinMode(PIN_BTN, INPUT);                          // setup du bouton dur l'entrée PIN_BTN =&amp;gt; 3&lt;br /&gt;
  Serial.begin(9600);                               // setup moniteur série pour debug&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
&lt;br /&gt;
  int score_of_level;&lt;br /&gt;
  if (score_of_level = up())              // led avance dans un sense&lt;br /&gt;
  {&lt;br /&gt;
    score += compute_score(score_of_level);       // ajout score du niveau&lt;br /&gt;
    level_up();&lt;br /&gt;
  }&lt;br /&gt;
  else if (score_of_level = down())       // led avance dans l'autre sense&lt;br /&gt;
  {&lt;br /&gt;
    score += compute_score(score_of_level);       // ajout score du niveau&lt;br /&gt;
    level_up();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int compute_score(int score_of_level)&lt;br /&gt;
{&lt;br /&gt;
  return (NUM_OF_LEDS_BY_LEVEL/2 - (int)abs((level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2) - score_of_level)) * coef[level] + 1;&lt;br /&gt;
  // On calcul le nombre de leds d'un niveau moins la différence entre la led du joueur et celle du milieu on ajoute 2 et on multiplie par le coefficient de points du level&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int up()&lt;br /&gt;
{&lt;br /&gt;
  for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++)&lt;br /&gt;
  {&lt;br /&gt;
    if (digitalRead(PIN_BTN))   // appuie sur le bouton&lt;br /&gt;
    {&lt;br /&gt;
      while (digitalRead(PIN_BTN))    // blocage du bouton tant que celui-ci n'a pas été relaché&lt;br /&gt;
      {&lt;br /&gt;
        delay(2);&lt;br /&gt;
      }&lt;br /&gt;
      last_point = i-1;     // on concerve la valeur de la led choisie pour la réafficher après le flash&lt;br /&gt;
      return i - 1;   // renvoie la position de la led au moment de l'appuie sur le bouton&lt;br /&gt;
    }&lt;br /&gt;
    leds[i - 1] = CRGB::Black;&lt;br /&gt;
    delay(3);&lt;br /&gt;
&lt;br /&gt;
    leds[level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2] = CRGB::White;&lt;br /&gt;
    leds[i] = color;&lt;br /&gt;
&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(delay_level);&lt;br /&gt;
  }&lt;br /&gt;
  leds[NUM_OF_LEDS_BY_LEVEL * level + 20] = CRGB::Black;&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
  delay(delay_level);&lt;br /&gt;
  return 0;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int down()&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  for (int i = NUM_OF_LEDS_BY_LEVEL * level +  NUM_OF_LEDS_BY_LEVEL - 1; i &amp;gt;= NUM_OF_LEDS_BY_LEVEL * level ; i--)&lt;br /&gt;
  {&lt;br /&gt;
    if (digitalRead(PIN_BTN))&lt;br /&gt;
    {&lt;br /&gt;
      while (digitalRead(PIN_BTN))&lt;br /&gt;
      {&lt;br /&gt;
        delay(2);&lt;br /&gt;
      }&lt;br /&gt;
      last_point = i+1;&lt;br /&gt;
      return i + 1;   // renvoie la position de la led au moment de l'appuie sur le bouton&lt;br /&gt;
    }&lt;br /&gt;
    leds[i + 1] = CRGB::Black;&lt;br /&gt;
    delay(3);&lt;br /&gt;
&lt;br /&gt;
    leds[level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2] = CRGB::White;&lt;br /&gt;
    leds[i] = color;&lt;br /&gt;
&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(delay_level);&lt;br /&gt;
  }&lt;br /&gt;
  leds[NUM_OF_LEDS_BY_LEVEL] = CRGB::Black;&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
  delay(delay_level);&lt;br /&gt;
  return 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
void flash()   // fonction de décoration qui fait clignoter les leds en blanc avant le passage de niveau&lt;br /&gt;
{&lt;br /&gt;
  for (int cpt = 0; cpt &amp;lt; 4; cpt++) &lt;br /&gt;
  {&lt;br /&gt;
    for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++)  // On met toute les leds du niveau en blanc&lt;br /&gt;
    {&lt;br /&gt;
      leds[i] = CRGB::White;&lt;br /&gt;
    }&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
&lt;br /&gt;
    delay(100);&lt;br /&gt;
    for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++) // On éteint toutes les leds du niveau&lt;br /&gt;
    {&lt;br /&gt;
      leds[i] = CRGB::Black;&lt;br /&gt;
    }&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(100);&lt;br /&gt;
  }&lt;br /&gt;
  leds[last_point] = CRGB::Red;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void score_leds()   // affichage du score avec les leds&lt;br /&gt;
{&lt;br /&gt;
  for (int i = 0; i &amp;lt; score; i++)&lt;br /&gt;
  {&lt;br /&gt;
    leds[i] = CRGB::Red;&lt;br /&gt;
&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(10);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void reset_leds()   // on éteint toutes les leds&lt;br /&gt;
{&lt;br /&gt;
  for (int i = 0; i &amp;lt; NUM_LEDS; i++)&lt;br /&gt;
  {&lt;br /&gt;
    leds[i] = CRGB::Black;&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void animation_attente()&lt;br /&gt;
{&lt;br /&gt;
    for(int i = 0; i &amp;lt; NUM_LEDS; i++)&lt;br /&gt;
    {&lt;br /&gt;
      leds[i].red = random(0,255);&lt;br /&gt;
      leds[i].green = random(0,255);&lt;br /&gt;
      leds[i].blue = random(0,255);&lt;br /&gt;
    }&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
void level_up()   // changement de niveau&lt;br /&gt;
{&lt;br /&gt;
  flash();  // animation&lt;br /&gt;
  level++;  // incrémentation de la variable niveau&lt;br /&gt;
  delay_level -= 4; // le jeu devient de plus en plus rapide&lt;br /&gt;
  if (level &amp;gt;= NUM_OF_LEVELS)   // fin du jeu&lt;br /&gt;
  {&lt;br /&gt;
    reset_leds();&lt;br /&gt;
    score_leds();   // affichage score&lt;br /&gt;
    delay(3000);&lt;br /&gt;
    reset_leds();&lt;br /&gt;
    while (!digitalRead(PIN_BTN))   // on attend que l'utilisateur appuie sur un bonton&lt;br /&gt;
    {&lt;br /&gt;
      animation_attente();&lt;br /&gt;
      delay(200);&lt;br /&gt;
    }&lt;br /&gt;
    while (digitalRead(PIN_BTN))  // on vérifie que le bouton n'est pas resté appuyé&lt;br /&gt;
    {&lt;br /&gt;
      delay(10);&lt;br /&gt;
    }&lt;br /&gt;
    // on réinitialise le jeu&lt;br /&gt;
    level = 0;      &lt;br /&gt;
    reset_leds();&lt;br /&gt;
    score = 0;&lt;br /&gt;
    delay_level = 30;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==étapes de fabrication==&lt;br /&gt;
indiquer autant d'étape que nécessaire, chacune illustrée par des images (phot, dessins, ...)&lt;br /&gt;
&lt;br /&gt;
===étape 1===&lt;br /&gt;
===étape 2===&lt;br /&gt;
===étape ...===&lt;br /&gt;
===troubleshouting===&lt;br /&gt;
quelles sont difficultés, les problèmes, quelles sont les solutions, les trucs et astuces pour que ça marche ?&lt;br /&gt;
&lt;br /&gt;
==Sources et documentation complémentaire==&lt;br /&gt;
&lt;br /&gt;
==ne pas modifier sous cette ligne==&lt;br /&gt;
[[Catégorie:Enib2024]]&lt;/div&gt;</summary>
		<author><name>Arnaud...</name></author>	</entry>

	<entry>
		<id>http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2024_:_CatchTheJackpot&amp;diff=25701</id>
		<title>ENIB 2024 : CatchTheJackpot</title>
		<link rel="alternate" type="text/html" href="http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2024_:_CatchTheJackpot&amp;diff=25701"/>
				<updated>2024-01-30T11:09:37Z</updated>
		
		<summary type="html">&lt;p&gt;Arnaud... : /* description (résumé) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Fichier:Ahok.jpg|vignette]]&lt;br /&gt;
Titre de la fiche expérience :&lt;br /&gt;
==description==&lt;br /&gt;
==réalisé par :==&lt;br /&gt;
 -Arnaud Genty&lt;br /&gt;
 -Maxime Bintein&lt;br /&gt;
 -Tristan Le Coz&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
éventuelle vidéo&lt;br /&gt;
&lt;br /&gt;
==Liste des composants==&lt;br /&gt;
&lt;br /&gt;
* Bouton poussoir style Arcade&lt;br /&gt;
* Arduino nano&lt;br /&gt;
* 2 rubans de LED adressable (85 LEDs pour être exacte) &lt;br /&gt;
* Carton&lt;br /&gt;
* Câbles mini-USB&lt;br /&gt;
* Câbles&lt;br /&gt;
&lt;br /&gt;
==Outils==&lt;br /&gt;
&lt;br /&gt;
* Cutter&lt;br /&gt;
* Marqueur noir&lt;br /&gt;
* Pistolet à colle&lt;br /&gt;
* Scotch&lt;br /&gt;
* Fer à souder&lt;br /&gt;
&lt;br /&gt;
* Bibliothèque Arduino FastLed &lt;br /&gt;
  https://fastled.io/&lt;br /&gt;
==fichiers à joindre==&lt;br /&gt;
code, ficher d'impression 3D, de découpe laser ou vinyle, ...&lt;br /&gt;
&lt;br /&gt;
==Code==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Arduino&amp;quot; line&amp;gt;&lt;br /&gt;
#include &amp;quot;FastLED.h&amp;quot;                    //bibliothèque pour controler le ruban led&lt;br /&gt;
#define NUM_LEDS 86&lt;br /&gt;
#define NUM_OF_LEDS_BY_LEVEL 17         // nombre de leds par niveau&lt;br /&gt;
#define NUM_OF_LEVELS 5                  // nombre de niveaux&lt;br /&gt;
#define PIN_BTN 3                       // Entree du bouton&lt;br /&gt;
#define PIN_LEDS 2                      // Sortie du ruban led&lt;br /&gt;
&lt;br /&gt;
// Dans ce programme nous avons utilisé presque intégralement des variables globales&lt;br /&gt;
&lt;br /&gt;
CRGB leds[NUM_LEDS];&lt;br /&gt;
int level = 0;        // niveau auquel le joueur est&lt;br /&gt;
int delay_level = 30; // délai qui permet de controler la vitesse de déplacement de la led&lt;br /&gt;
auto color = CRGB::Purple; // couleur de la led qui se déplace&lt;br /&gt;
int score = 0;           // socre du joueur&lt;br /&gt;
const double coef[] = {1, 1.4, 1.7, 1.9, 2, 2.2}; // coefficient multiplicateur de point par niveau&lt;br /&gt;
int last_point = 0;     // sauvegarde de la derniere led allumée pour la rallumer après flash()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Déclarations de fonctions&lt;br /&gt;
int compute_score(int score_of_level);    // calcul du score par niveau&lt;br /&gt;
int up();           // deplacement led&lt;br /&gt;
int down();         // deplacement led dans l'autre sense&lt;br /&gt;
void level_up();    // passage de niveau&lt;br /&gt;
void flash();       // animation de victoire d'un niveau&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  FastLED.addLeds&amp;lt;NEOPIXEL, 2&amp;gt;(leds, NUM_LEDS);     // setup du ruban de led sur la sortie PIN_LEDS =&amp;gt; 2&lt;br /&gt;
  pinMode(PIN_BTN, INPUT);                          // setup du bouton dur l'entrée PIN_BTN =&amp;gt; 3&lt;br /&gt;
  Serial.begin(9600);                               // setup moniteur série pour debug&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
&lt;br /&gt;
  int score_of_level;&lt;br /&gt;
  if (score_of_level = up())              // led avance dans un sense&lt;br /&gt;
  {&lt;br /&gt;
    score += compute_score(score_of_level);       // ajout score du niveau&lt;br /&gt;
    level_up();&lt;br /&gt;
  }&lt;br /&gt;
  else if (score_of_level = down())       // led avance dans l'autre sense&lt;br /&gt;
  {&lt;br /&gt;
    score += compute_score(score_of_level);       // ajout score du niveau&lt;br /&gt;
    level_up();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int compute_score(int score_of_level)&lt;br /&gt;
{&lt;br /&gt;
  return (NUM_OF_LEDS_BY_LEVEL/2 - (int)abs((level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2) - score_of_level)) * coef[level] + 1;&lt;br /&gt;
  // On calcul le nombre de leds d'un niveau moins la différence entre la led du joueur et celle du milieu on ajoute 2 et on multiplie par le coefficient de points du level&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int up()&lt;br /&gt;
{&lt;br /&gt;
  for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++)&lt;br /&gt;
  {&lt;br /&gt;
    if (digitalRead(PIN_BTN))   // appuie sur le bouton&lt;br /&gt;
    {&lt;br /&gt;
      while (digitalRead(PIN_BTN))    // blocage du bouton tant que celui-ci n'a pas été relaché&lt;br /&gt;
      {&lt;br /&gt;
        delay(2);&lt;br /&gt;
      }&lt;br /&gt;
      last_point = i-1;     // on concerve la valeur de la led choisie pour la réafficher après le flash&lt;br /&gt;
      return i - 1;   // renvoie la position de la led au moment de l'appuie sur le bouton&lt;br /&gt;
    }&lt;br /&gt;
    leds[i - 1] = CRGB::Black;&lt;br /&gt;
    delay(3);&lt;br /&gt;
&lt;br /&gt;
    leds[level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2] = CRGB::White;&lt;br /&gt;
    leds[i] = color;&lt;br /&gt;
&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(delay_level);&lt;br /&gt;
  }&lt;br /&gt;
  leds[NUM_OF_LEDS_BY_LEVEL * level + 20] = CRGB::Black;&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
  delay(delay_level);&lt;br /&gt;
  return 0;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int down()&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  for (int i = NUM_OF_LEDS_BY_LEVEL * level +  NUM_OF_LEDS_BY_LEVEL - 1; i &amp;gt;= NUM_OF_LEDS_BY_LEVEL * level ; i--)&lt;br /&gt;
  {&lt;br /&gt;
    if (digitalRead(PIN_BTN))&lt;br /&gt;
    {&lt;br /&gt;
      while (digitalRead(PIN_BTN))&lt;br /&gt;
      {&lt;br /&gt;
        delay(2);&lt;br /&gt;
      }&lt;br /&gt;
      last_point = i+1;&lt;br /&gt;
      return i + 1;   // renvoie la position de la led au moment de l'appuie sur le bouton&lt;br /&gt;
    }&lt;br /&gt;
    leds[i + 1] = CRGB::Black;&lt;br /&gt;
    delay(3);&lt;br /&gt;
&lt;br /&gt;
    leds[level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2] = CRGB::White;&lt;br /&gt;
    leds[i] = color;&lt;br /&gt;
&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(delay_level);&lt;br /&gt;
  }&lt;br /&gt;
  leds[NUM_OF_LEDS_BY_LEVEL] = CRGB::Black;&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
  delay(delay_level);&lt;br /&gt;
  return 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
void flash()   // fonction de décoration qui fait clignoter les leds en blanc avant le passage de niveau&lt;br /&gt;
{&lt;br /&gt;
  for (int cpt = 0; cpt &amp;lt; 4; cpt++) &lt;br /&gt;
  {&lt;br /&gt;
    for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++)  // On met toute les leds du niveau en blanc&lt;br /&gt;
    {&lt;br /&gt;
      leds[i] = CRGB::White;&lt;br /&gt;
    }&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
&lt;br /&gt;
    delay(100);&lt;br /&gt;
    for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++) // On éteint toutes les leds du niveau&lt;br /&gt;
    {&lt;br /&gt;
      leds[i] = CRGB::Black;&lt;br /&gt;
    }&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(100);&lt;br /&gt;
  }&lt;br /&gt;
  leds[last_point] = CRGB::Red;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void score_leds()   // affichage du score avec les leds&lt;br /&gt;
{&lt;br /&gt;
  for (int i = 0; i &amp;lt; score; i++)&lt;br /&gt;
  {&lt;br /&gt;
    leds[i] = CRGB::Red;&lt;br /&gt;
&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(10);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void reset_leds()   // on éteint toutes les leds&lt;br /&gt;
{&lt;br /&gt;
  for (int i = 0; i &amp;lt; NUM_LEDS; i++)&lt;br /&gt;
  {&lt;br /&gt;
    leds[i] = CRGB::Black;&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void animation_attente()&lt;br /&gt;
{&lt;br /&gt;
    for(int i = 0; i &amp;lt; NUM_LEDS; i++)&lt;br /&gt;
    {&lt;br /&gt;
      leds[i].red = random(0,255);&lt;br /&gt;
      leds[i].green = random(0,255);&lt;br /&gt;
      leds[i].blue = random(0,255);&lt;br /&gt;
    }&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
void level_up()   // changement de niveau&lt;br /&gt;
{&lt;br /&gt;
  flash();  // animation&lt;br /&gt;
  level++;  // incrémentation de la variable niveau&lt;br /&gt;
  delay_level -= 4; // le jeu devient de plus en plus rapide&lt;br /&gt;
  if (level &amp;gt;= NUM_OF_LEVELS)   // fin du jeu&lt;br /&gt;
  {&lt;br /&gt;
    reset_leds();&lt;br /&gt;
    score_leds();   // affichage score&lt;br /&gt;
    delay(3000);&lt;br /&gt;
    reset_leds();&lt;br /&gt;
    while (!digitalRead(PIN_BTN))   // on attend que l'utilisateur appuie sur un bonton&lt;br /&gt;
    {&lt;br /&gt;
      animation_attente();&lt;br /&gt;
      delay(200);&lt;br /&gt;
    }&lt;br /&gt;
    while (digitalRead(PIN_BTN))  // on vérifie que le bouton n'est pas resté appuyé&lt;br /&gt;
    {&lt;br /&gt;
      delay(10);&lt;br /&gt;
    }&lt;br /&gt;
    // on réinitialise le jeu&lt;br /&gt;
    level = 0;      &lt;br /&gt;
    reset_leds();&lt;br /&gt;
    score = 0;&lt;br /&gt;
    delay_level = 30;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==étapes de fabrication==&lt;br /&gt;
indiquer autant d'étape que nécessaire, chacune illustrée par des images (phot, dessins, ...)&lt;br /&gt;
&lt;br /&gt;
===étape 1===&lt;br /&gt;
===étape 2===&lt;br /&gt;
===étape ...===&lt;br /&gt;
===troubleshouting===&lt;br /&gt;
quelles sont difficultés, les problèmes, quelles sont les solutions, les trucs et astuces pour que ça marche ?&lt;br /&gt;
&lt;br /&gt;
==Sources et documentation complémentaire==&lt;br /&gt;
&lt;br /&gt;
==ne pas modifier sous cette ligne==&lt;br /&gt;
[[Catégorie:Enib2024]]&lt;/div&gt;</summary>
		<author><name>Arnaud...</name></author>	</entry>

	<entry>
		<id>http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2024_:_CatchTheJackpot&amp;diff=25699</id>
		<title>ENIB 2024 : CatchTheJackpot</title>
		<link rel="alternate" type="text/html" href="http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2024_:_CatchTheJackpot&amp;diff=25699"/>
				<updated>2024-01-30T11:06:47Z</updated>
		
		<summary type="html">&lt;p&gt;Arnaud... : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Fichier:Ahok.jpg|vignette]]&lt;br /&gt;
Titre de la fiche expérience :&lt;br /&gt;
==description (résumé)==&lt;br /&gt;
éventuelle photo de l'équipe &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Totem-maisonsDesMinerauxCrozon.JPG|200px]]&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
éventuelle vidéo&lt;br /&gt;
&lt;br /&gt;
==Liste des composants==&lt;br /&gt;
&lt;br /&gt;
* Bouton poussoir style Arcade&lt;br /&gt;
* Arduino nano&lt;br /&gt;
* 2 rubans de LED adressable (85 LEDs pour être exacte) &lt;br /&gt;
* Carton&lt;br /&gt;
* Câbles mini-USB&lt;br /&gt;
* Câbles&lt;br /&gt;
&lt;br /&gt;
==Outils==&lt;br /&gt;
&lt;br /&gt;
* Cutter&lt;br /&gt;
* Marqueur noir&lt;br /&gt;
* Pistolet à colle&lt;br /&gt;
* Scotch&lt;br /&gt;
* Fer à souder&lt;br /&gt;
&lt;br /&gt;
* Bibliothèque Arduino FastLed &lt;br /&gt;
  https://fastled.io/&lt;br /&gt;
==fichiers à joindre==&lt;br /&gt;
code, ficher d'impression 3D, de découpe laser ou vinyle, ...&lt;br /&gt;
&lt;br /&gt;
==Code==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Arduino&amp;quot; line&amp;gt;&lt;br /&gt;
#include &amp;quot;FastLED.h&amp;quot;                    //bibliothèque pour controler le ruban led&lt;br /&gt;
#define NUM_LEDS 86&lt;br /&gt;
#define NUM_OF_LEDS_BY_LEVEL 17         // nombre de leds par niveau&lt;br /&gt;
#define NUM_OF_LEVELS 5                  // nombre de niveaux&lt;br /&gt;
#define PIN_BTN 3                       // Entree du bouton&lt;br /&gt;
#define PIN_LEDS 2                      // Sortie du ruban led&lt;br /&gt;
&lt;br /&gt;
// Dans ce programme nous avons utilisé presque intégralement des variables globales&lt;br /&gt;
&lt;br /&gt;
CRGB leds[NUM_LEDS];&lt;br /&gt;
int level = 0;        // niveau auquel le joueur est&lt;br /&gt;
int delay_level = 30; // délai qui permet de controler la vitesse de déplacement de la led&lt;br /&gt;
auto color = CRGB::Purple; // couleur de la led qui se déplace&lt;br /&gt;
int score = 0;           // socre du joueur&lt;br /&gt;
const double coef[] = {1, 1.4, 1.7, 1.9, 2, 2.2}; // coefficient multiplicateur de point par niveau&lt;br /&gt;
int last_point = 0;     // sauvegarde de la derniere led allumée pour la rallumer après flash()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Déclarations de fonctions&lt;br /&gt;
int compute_score(int score_of_level);    // calcul du score par niveau&lt;br /&gt;
int up();           // deplacement led&lt;br /&gt;
int down();         // deplacement led dans l'autre sense&lt;br /&gt;
void level_up();    // passage de niveau&lt;br /&gt;
void flash();       // animation de victoire d'un niveau&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  FastLED.addLeds&amp;lt;NEOPIXEL, 2&amp;gt;(leds, NUM_LEDS);     // setup du ruban de led sur la sortie PIN_LEDS =&amp;gt; 2&lt;br /&gt;
  pinMode(PIN_BTN, INPUT);                          // setup du bouton dur l'entrée PIN_BTN =&amp;gt; 3&lt;br /&gt;
  Serial.begin(9600);                               // setup moniteur série pour debug&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
&lt;br /&gt;
  int score_of_level;&lt;br /&gt;
  if (score_of_level = up())              // led avance dans un sense&lt;br /&gt;
  {&lt;br /&gt;
    score += compute_score(score_of_level);       // ajout score du niveau&lt;br /&gt;
    level_up();&lt;br /&gt;
  }&lt;br /&gt;
  else if (score_of_level = down())       // led avance dans l'autre sense&lt;br /&gt;
  {&lt;br /&gt;
    score += compute_score(score_of_level);       // ajout score du niveau&lt;br /&gt;
    level_up();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int compute_score(int score_of_level)&lt;br /&gt;
{&lt;br /&gt;
  return (NUM_OF_LEDS_BY_LEVEL/2 - (int)abs((level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2) - score_of_level)) * coef[level] + 1;&lt;br /&gt;
  // On calcul le nombre de leds d'un niveau moins la différence entre la led du joueur et celle du milieu on ajoute 2 et on multiplie par le coefficient de points du level&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int up()&lt;br /&gt;
{&lt;br /&gt;
  for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++)&lt;br /&gt;
  {&lt;br /&gt;
    if (digitalRead(PIN_BTN))   // appuie sur le bouton&lt;br /&gt;
    {&lt;br /&gt;
      while (digitalRead(PIN_BTN))    // blocage du bouton tant que celui-ci n'a pas été relaché&lt;br /&gt;
      {&lt;br /&gt;
        delay(2);&lt;br /&gt;
      }&lt;br /&gt;
      last_point = i-1;     // on concerve la valeur de la led choisie pour la réafficher après le flash&lt;br /&gt;
      return i - 1;   // renvoie la position de la led au moment de l'appuie sur le bouton&lt;br /&gt;
    }&lt;br /&gt;
    leds[i - 1] = CRGB::Black;&lt;br /&gt;
    delay(3);&lt;br /&gt;
&lt;br /&gt;
    leds[level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2] = CRGB::White;&lt;br /&gt;
    leds[i] = color;&lt;br /&gt;
&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(delay_level);&lt;br /&gt;
  }&lt;br /&gt;
  leds[NUM_OF_LEDS_BY_LEVEL * level + 20] = CRGB::Black;&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
  delay(delay_level);&lt;br /&gt;
  return 0;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int down()&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  for (int i = NUM_OF_LEDS_BY_LEVEL * level +  NUM_OF_LEDS_BY_LEVEL - 1; i &amp;gt;= NUM_OF_LEDS_BY_LEVEL * level ; i--)&lt;br /&gt;
  {&lt;br /&gt;
    if (digitalRead(PIN_BTN))&lt;br /&gt;
    {&lt;br /&gt;
      while (digitalRead(PIN_BTN))&lt;br /&gt;
      {&lt;br /&gt;
        delay(2);&lt;br /&gt;
      }&lt;br /&gt;
      last_point = i+1;&lt;br /&gt;
      return i + 1;   // renvoie la position de la led au moment de l'appuie sur le bouton&lt;br /&gt;
    }&lt;br /&gt;
    leds[i + 1] = CRGB::Black;&lt;br /&gt;
    delay(3);&lt;br /&gt;
&lt;br /&gt;
    leds[level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2] = CRGB::White;&lt;br /&gt;
    leds[i] = color;&lt;br /&gt;
&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(delay_level);&lt;br /&gt;
  }&lt;br /&gt;
  leds[NUM_OF_LEDS_BY_LEVEL] = CRGB::Black;&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
  delay(delay_level);&lt;br /&gt;
  return 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
void flash()   // fonction de décoration qui fait clignoter les leds en blanc avant le passage de niveau&lt;br /&gt;
{&lt;br /&gt;
  for (int cpt = 0; cpt &amp;lt; 4; cpt++) &lt;br /&gt;
  {&lt;br /&gt;
    for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++)  // On met toute les leds du niveau en blanc&lt;br /&gt;
    {&lt;br /&gt;
      leds[i] = CRGB::White;&lt;br /&gt;
    }&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
&lt;br /&gt;
    delay(100);&lt;br /&gt;
    for (int i = NUM_OF_LEDS_BY_LEVEL * level; i &amp;lt;= (NUM_OF_LEDS_BY_LEVEL * level + NUM_OF_LEDS_BY_LEVEL - 1); i++) // On éteint toutes les leds du niveau&lt;br /&gt;
    {&lt;br /&gt;
      leds[i] = CRGB::Black;&lt;br /&gt;
    }&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(100);&lt;br /&gt;
  }&lt;br /&gt;
  leds[last_point] = CRGB::Red;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void score_leds()   // affichage du score avec les leds&lt;br /&gt;
{&lt;br /&gt;
  for (int i = 0; i &amp;lt; score; i++)&lt;br /&gt;
  {&lt;br /&gt;
    leds[i] = CRGB::Red;&lt;br /&gt;
&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
    delay(10);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void reset_leds()   // on éteint toutes les leds&lt;br /&gt;
{&lt;br /&gt;
  for (int i = 0; i &amp;lt; NUM_LEDS; i++)&lt;br /&gt;
  {&lt;br /&gt;
    leds[i] = CRGB::Black;&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void animation_attente()&lt;br /&gt;
{&lt;br /&gt;
    for(int i = 0; i &amp;lt; NUM_LEDS; i++)&lt;br /&gt;
    {&lt;br /&gt;
      leds[i].red = random(0,255);&lt;br /&gt;
      leds[i].green = random(0,255);&lt;br /&gt;
      leds[i].blue = random(0,255);&lt;br /&gt;
    }&lt;br /&gt;
    FastLED.show();&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
void level_up()   // changement de niveau&lt;br /&gt;
{&lt;br /&gt;
  flash();  // animation&lt;br /&gt;
  level++;  // incrémentation de la variable niveau&lt;br /&gt;
  delay_level -= 4; // le jeu devient de plus en plus rapide&lt;br /&gt;
  if (level &amp;gt;= NUM_OF_LEVELS)   // fin du jeu&lt;br /&gt;
  {&lt;br /&gt;
    reset_leds();&lt;br /&gt;
    score_leds();   // affichage score&lt;br /&gt;
    delay(3000);&lt;br /&gt;
    reset_leds();&lt;br /&gt;
    while (!digitalRead(PIN_BTN))   // on attend que l'utilisateur appuie sur un bonton&lt;br /&gt;
    {&lt;br /&gt;
      animation_attente();&lt;br /&gt;
      delay(200);&lt;br /&gt;
    }&lt;br /&gt;
    while (digitalRead(PIN_BTN))  // on vérifie que le bouton n'est pas resté appuyé&lt;br /&gt;
    {&lt;br /&gt;
      delay(10);&lt;br /&gt;
    }&lt;br /&gt;
    // on réinitialise le jeu&lt;br /&gt;
    level = 0;      &lt;br /&gt;
    reset_leds();&lt;br /&gt;
    score = 0;&lt;br /&gt;
    delay_level = 30;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==étapes de fabrication==&lt;br /&gt;
indiquer autant d'étape que nécessaire, chacune illustrée par des images (phot, dessins, ...)&lt;br /&gt;
&lt;br /&gt;
===étape 1===&lt;br /&gt;
===étape 2===&lt;br /&gt;
===étape ...===&lt;br /&gt;
===troubleshouting===&lt;br /&gt;
quelles sont difficultés, les problèmes, quelles sont les solutions, les trucs et astuces pour que ça marche ?&lt;br /&gt;
&lt;br /&gt;
==Sources et documentation complémentaire==&lt;br /&gt;
&lt;br /&gt;
==ne pas modifier sous cette ligne==&lt;br /&gt;
[[Catégorie:Enib2024]]&lt;/div&gt;</summary>
		<author><name>Arnaud...</name></author>	</entry>

	<entry>
		<id>http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2024_:_CatchTheJackpot&amp;diff=25691</id>
		<title>ENIB 2024 : CatchTheJackpot</title>
		<link rel="alternate" type="text/html" href="http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2024_:_CatchTheJackpot&amp;diff=25691"/>
				<updated>2024-01-30T11:04:19Z</updated>
		
		<summary type="html">&lt;p&gt;Arnaud... : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Fichier:Ahok.jpg|vignette]]&lt;br /&gt;
Titre de la fiche expérience :&lt;br /&gt;
==description (résumé)==&lt;br /&gt;
éventuelle photo de l'équipe &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Totem-maisonsDesMinerauxCrozon.JPG|200px]]&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
éventuelle vidéo&lt;br /&gt;
&lt;br /&gt;
==Liste des composants==&lt;br /&gt;
&lt;br /&gt;
* Bouton poussoir style Arcade&lt;br /&gt;
* Arduino nano&lt;br /&gt;
* 2 rubans de LED adressable (85 LEDs pour être exacte) &lt;br /&gt;
* Carton&lt;br /&gt;
* Câbles mini-USB&lt;br /&gt;
* Câbles&lt;br /&gt;
&lt;br /&gt;
==Outils==&lt;br /&gt;
&lt;br /&gt;
* Cutter&lt;br /&gt;
* Marqueur noir&lt;br /&gt;
* Pistolet à colle&lt;br /&gt;
* Scotch&lt;br /&gt;
* Fer à souder&lt;br /&gt;
&lt;br /&gt;
* Bibliothèque Arduino FastLed &lt;br /&gt;
  https://fastled.io/&lt;br /&gt;
==fichiers à joindre==&lt;br /&gt;
code, ficher d'impression 3D, de découpe laser ou vinyle, ...&lt;br /&gt;
===Mettre du code Arduino===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Arduino&amp;quot; line&amp;gt; &lt;br /&gt;
#define PIN 9&lt;br /&gt;
#include &amp;lt;Arduino_GFX_Library.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  // put your setup code here, to run once:&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  // put your main code here, to run repeatedly:&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==étapes de fabrication==&lt;br /&gt;
indiquer autant d'étape que nécessaire, chacune illustrée par des images (phot, dessins, ...)&lt;br /&gt;
&lt;br /&gt;
===étape 1===&lt;br /&gt;
===étape 2===&lt;br /&gt;
===étape ...===&lt;br /&gt;
===troubleshouting===&lt;br /&gt;
quelles sont difficultés, les problèmes, quelles sont les solutions, les trucs et astuces pour que ça marche ?&lt;br /&gt;
&lt;br /&gt;
==Sources et documentation complémentaire==&lt;br /&gt;
&lt;br /&gt;
==ne pas modifier sous cette ligne==&lt;br /&gt;
[[Catégorie:Enib2024]]&lt;/div&gt;</summary>
		<author><name>Arnaud...</name></author>	</entry>

	<entry>
		<id>http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2024_:_CatchTheJackpot&amp;diff=25664</id>
		<title>ENIB 2024 : CatchTheJackpot</title>
		<link rel="alternate" type="text/html" href="http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2024_:_CatchTheJackpot&amp;diff=25664"/>
				<updated>2024-01-30T10:55:05Z</updated>
		
		<summary type="html">&lt;p&gt;Arnaud... : Page créée avec « vignette Titre de la fiche expérience : ==description (résumé)== éventuelle photo de l'équipe   Fichier:Totem-maisonsDesMinerauxCrozon.JPG|200p... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Fichier:Ahok.jpg|vignette]]&lt;br /&gt;
Titre de la fiche expérience :&lt;br /&gt;
==description (résumé)==&lt;br /&gt;
éventuelle photo de l'équipe &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Totem-maisonsDesMinerauxCrozon.JPG|200px]]&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
éventuelle vidéo&lt;br /&gt;
==outil et matériel==&lt;br /&gt;
&lt;br /&gt;
==fichiers à joindre==&lt;br /&gt;
code, ficher d'impression 3D, de découpe laser ou vinyle, ...&lt;br /&gt;
===Mettre du code Arduino===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Arduino&amp;quot; line&amp;gt; &lt;br /&gt;
#define PIN 9&lt;br /&gt;
#include &amp;lt;Arduino_GFX_Library.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  // put your setup code here, to run once:&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  // put your main code here, to run repeatedly:&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==étapes de fabrication==&lt;br /&gt;
indiquer autant d'étape que nécessaire, chacune illustrée par des images (phot, dessins, ...)&lt;br /&gt;
&lt;br /&gt;
===étape 1===&lt;br /&gt;
===étape 2===&lt;br /&gt;
===étape ...===&lt;br /&gt;
===troubleshouting===&lt;br /&gt;
quelles sont difficultés, les problèmes, quelles sont les solutions, les trucs et astuces pour que ça marche ?&lt;br /&gt;
&lt;br /&gt;
==Sources et documentation complémentaire==&lt;br /&gt;
&lt;br /&gt;
==ne pas modifier sous cette ligne==&lt;br /&gt;
[[Catégorie:Enib2024]]&lt;/div&gt;</summary>
		<author><name>Arnaud...</name></author>	</entry>

	<entry>
		<id>http://wiki.lesfabriquesduponant.net/index.php?title=Fichier:Ahok.jpg&amp;diff=25647</id>
		<title>Fichier:Ahok.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.lesfabriquesduponant.net/index.php?title=Fichier:Ahok.jpg&amp;diff=25647"/>
				<updated>2024-01-30T10:51:15Z</updated>
		
		<summary type="html">&lt;p&gt;Arnaud... : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Arnaud...</name></author>	</entry>

	<entry>
		<id>http://wiki.lesfabriquesduponant.net/index.php?title=Utilisateur:Arnaud...&amp;diff=25601</id>
		<title>Utilisateur:Arnaud...</title>
		<link rel="alternate" type="text/html" href="http://wiki.lesfabriquesduponant.net/index.php?title=Utilisateur:Arnaud...&amp;diff=25601"/>
				<updated>2024-01-30T10:36:32Z</updated>
		
		<summary type="html">&lt;p&gt;Arnaud... : Page créée avec « ?????? »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;??????&lt;/div&gt;</summary>
		<author><name>Arnaud...</name></author>	</entry>

	</feed>