<?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=Emmanuel</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=Emmanuel"/>
		<link rel="alternate" type="text/html" href="http://wiki.lesfabriquesduponant.net/index.php?title=Sp%C3%A9cial:Contributions/Emmanuel"/>
		<updated>2026-04-30T13:06:56Z</updated>
		<subtitle>Contributions de l’utilisateur</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2022_:_Catch_the_middle&amp;diff=18990</id>
		<title>ENIB 2022 : Catch the middle</title>
		<link rel="alternate" type="text/html" href="http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2022_:_Catch_the_middle&amp;diff=18990"/>
				<updated>2022-01-17T15:09:23Z</updated>
		
		<summary type="html">&lt;p&gt;Emmanuel : /* projet réalisé par : */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Photo du projet==&lt;br /&gt;
[[Fichier:Catch the middle IS3.jpg|600px]]&lt;br /&gt;
&lt;br /&gt;
==Projet réalisé par :==&lt;br /&gt;
 -Yann Le Masson&lt;br /&gt;
 -Hugo Boulouard&lt;br /&gt;
 -Malo Cadier&lt;br /&gt;
 -Léo Orveillon&lt;br /&gt;
&lt;br /&gt;
==Que fait ce projet ? ==&lt;br /&gt;
&lt;br /&gt;
Jeux ludique dans lequel la réactivité prime.&lt;br /&gt;
&lt;br /&gt;
Une lumière se balade le long du ruban,&lt;br /&gt;
le joueur doit appuyer sur le bouton dès que la lumière arrive au centre.&lt;br /&gt;
&lt;br /&gt;
La lumière accélère au fil du temps&lt;br /&gt;
&lt;br /&gt;
Le projet fonctionne autour d'une carte arduino sur laquelle on branche un bouton et un ruban de leds&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;
==Réalisation==&lt;br /&gt;
&lt;br /&gt;
Branchez tous les rubans de LEDs en série&lt;br /&gt;
&lt;br /&gt;
Ensuite, suivez le schéma ci-dessous :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schema elec catch the middle.jpg|600px]]&lt;br /&gt;
&lt;br /&gt;
==Code==&lt;br /&gt;
&amp;lt;pre&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;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Catégories==&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Enib2022]]&lt;/div&gt;</summary>
		<author><name>Emmanuel</name></author>	</entry>

	<entry>
		<id>http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2022_:_Catch_the_middle&amp;diff=18989</id>
		<title>ENIB 2022 : Catch the middle</title>
		<link rel="alternate" type="text/html" href="http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2022_:_Catch_the_middle&amp;diff=18989"/>
				<updated>2022-01-17T15:09:11Z</updated>
		
		<summary type="html">&lt;p&gt;Emmanuel : /* photo du projet */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Photo du projet==&lt;br /&gt;
[[Fichier:Catch the middle IS3.jpg|600px]]&lt;br /&gt;
&lt;br /&gt;
==projet réalisé par :==&lt;br /&gt;
 -Yann Le Masson&lt;br /&gt;
 -Hugo Boulouard&lt;br /&gt;
 -Malo Cadier&lt;br /&gt;
 -Léo Orveillon&lt;br /&gt;
&lt;br /&gt;
==Que fait ce projet ? ==&lt;br /&gt;
&lt;br /&gt;
Jeux ludique dans lequel la réactivité prime.&lt;br /&gt;
&lt;br /&gt;
Une lumière se balade le long du ruban,&lt;br /&gt;
le joueur doit appuyer sur le bouton dès que la lumière arrive au centre.&lt;br /&gt;
&lt;br /&gt;
La lumière accélère au fil du temps&lt;br /&gt;
&lt;br /&gt;
Le projet fonctionne autour d'une carte arduino sur laquelle on branche un bouton et un ruban de leds&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;
==Réalisation==&lt;br /&gt;
&lt;br /&gt;
Branchez tous les rubans de LEDs en série&lt;br /&gt;
&lt;br /&gt;
Ensuite, suivez le schéma ci-dessous :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schema elec catch the middle.jpg|600px]]&lt;br /&gt;
&lt;br /&gt;
==Code==&lt;br /&gt;
&amp;lt;pre&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;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Catégories==&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Enib2022]]&lt;/div&gt;</summary>
		<author><name>Emmanuel</name></author>	</entry>

	<entry>
		<id>http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2022_:_Catch_the_middle&amp;diff=18988</id>
		<title>ENIB 2022 : Catch the middle</title>
		<link rel="alternate" type="text/html" href="http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2022_:_Catch_the_middle&amp;diff=18988"/>
				<updated>2022-01-17T15:08:51Z</updated>
		
		<summary type="html">&lt;p&gt;Emmanuel : /* Réalisation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==photo du projet==&lt;br /&gt;
[[Fichier:Catch the middle IS3.jpg|600px]]&lt;br /&gt;
&lt;br /&gt;
==projet réalisé par :==&lt;br /&gt;
 -Yann Le Masson&lt;br /&gt;
 -Hugo Boulouard&lt;br /&gt;
 -Malo Cadier&lt;br /&gt;
 -Léo Orveillon&lt;br /&gt;
&lt;br /&gt;
==Que fait ce projet ? ==&lt;br /&gt;
&lt;br /&gt;
Jeux ludique dans lequel la réactivité prime.&lt;br /&gt;
&lt;br /&gt;
Une lumière se balade le long du ruban,&lt;br /&gt;
le joueur doit appuyer sur le bouton dès que la lumière arrive au centre.&lt;br /&gt;
&lt;br /&gt;
La lumière accélère au fil du temps&lt;br /&gt;
&lt;br /&gt;
Le projet fonctionne autour d'une carte arduino sur laquelle on branche un bouton et un ruban de leds&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;
==Réalisation==&lt;br /&gt;
&lt;br /&gt;
Branchez tous les rubans de LEDs en série&lt;br /&gt;
&lt;br /&gt;
Ensuite, suivez le schéma ci-dessous :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schema elec catch the middle.jpg|600px]]&lt;br /&gt;
&lt;br /&gt;
==Code==&lt;br /&gt;
&amp;lt;pre&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;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Catégories==&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Enib2022]]&lt;/div&gt;</summary>
		<author><name>Emmanuel</name></author>	</entry>

	<entry>
		<id>http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2022_:_Catch_the_middle&amp;diff=18986</id>
		<title>ENIB 2022 : Catch the middle</title>
		<link rel="alternate" type="text/html" href="http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2022_:_Catch_the_middle&amp;diff=18986"/>
				<updated>2022-01-17T15:08:29Z</updated>
		
		<summary type="html">&lt;p&gt;Emmanuel : /* Outils */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==photo du projet==&lt;br /&gt;
[[Fichier:Catch the middle IS3.jpg|600px]]&lt;br /&gt;
&lt;br /&gt;
==projet réalisé par :==&lt;br /&gt;
 -Yann Le Masson&lt;br /&gt;
 -Hugo Boulouard&lt;br /&gt;
 -Malo Cadier&lt;br /&gt;
 -Léo Orveillon&lt;br /&gt;
&lt;br /&gt;
==Que fait ce projet ? ==&lt;br /&gt;
&lt;br /&gt;
Jeux ludique dans lequel la réactivité prime.&lt;br /&gt;
&lt;br /&gt;
Une lumière se balade le long du ruban,&lt;br /&gt;
le joueur doit appuyer sur le bouton dès que la lumière arrive au centre.&lt;br /&gt;
&lt;br /&gt;
La lumière accélère au fil du temps&lt;br /&gt;
&lt;br /&gt;
Le projet fonctionne autour d'une carte arduino sur laquelle on branche un bouton et un ruban de leds&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;
==Réalisation==&lt;br /&gt;
&lt;br /&gt;
Branchez tous les rubans de LEDs en série&lt;br /&gt;
&lt;br /&gt;
Ensuite, suivez le schéma ci-dessous :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schema elec catch the middle.jpg]]&lt;br /&gt;
&lt;br /&gt;
==Code==&lt;br /&gt;
&amp;lt;pre&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;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Catégories==&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Enib2022]]&lt;/div&gt;</summary>
		<author><name>Emmanuel</name></author>	</entry>

	<entry>
		<id>http://wiki.lesfabriquesduponant.net/index.php?title=Fichier:Schema_elec_catch_the_middle.jpg&amp;diff=18985</id>
		<title>Fichier:Schema elec catch the middle.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.lesfabriquesduponant.net/index.php?title=Fichier:Schema_elec_catch_the_middle.jpg&amp;diff=18985"/>
				<updated>2022-01-17T15:07:45Z</updated>
		
		<summary type="html">&lt;p&gt;Emmanuel : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Emmanuel</name></author>	</entry>

	<entry>
		<id>http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2022_:_Catch_the_middle&amp;diff=18971</id>
		<title>ENIB 2022 : Catch the middle</title>
		<link rel="alternate" type="text/html" href="http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2022_:_Catch_the_middle&amp;diff=18971"/>
				<updated>2022-01-17T14:58:06Z</updated>
		
		<summary type="html">&lt;p&gt;Emmanuel : /* projet réalisé par : */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==photo du projet==&lt;br /&gt;
[[Fichier:Catch the middle IS3.jpg|600px]]&lt;br /&gt;
&lt;br /&gt;
==projet réalisé par :==&lt;br /&gt;
 -Yann Le Masson&lt;br /&gt;
 -Hugo Boulouard&lt;br /&gt;
 -Malo Cadier&lt;br /&gt;
 -Léo Orveillon&lt;br /&gt;
&lt;br /&gt;
==Que fait ce projet ? ==&lt;br /&gt;
&lt;br /&gt;
Jeux ludique dans lequel la réactivité prime.&lt;br /&gt;
&lt;br /&gt;
Une lumière se balade le long du ruban,&lt;br /&gt;
le joueur doit appuyer sur le bouton dès que la lumière arrive au centre.&lt;br /&gt;
&lt;br /&gt;
La lumière accélère au fil du temps&lt;br /&gt;
&lt;br /&gt;
Le projet fonctionne autour d'une carte arduino sur laquelle on branche un bouton et un ruban de leds&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;
==Code==&lt;br /&gt;
&amp;lt;pre&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;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Catégories==&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Enib2022]]&lt;/div&gt;</summary>
		<author><name>Emmanuel</name></author>	</entry>

	<entry>
		<id>http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2022_:_Catch_the_middle&amp;diff=18969</id>
		<title>ENIB 2022 : Catch the middle</title>
		<link rel="alternate" type="text/html" href="http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2022_:_Catch_the_middle&amp;diff=18969"/>
				<updated>2022-01-17T14:57:57Z</updated>
		
		<summary type="html">&lt;p&gt;Emmanuel : /* photo du projet */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==photo du projet==&lt;br /&gt;
[[Fichier:Catch the middle IS3.jpg|600px]]&lt;br /&gt;
&lt;br /&gt;
==projet réalisé par :==&lt;br /&gt;
&lt;br /&gt;
 -Yann Le Masson&lt;br /&gt;
 -Hugo Boulouard&lt;br /&gt;
 -Malo Cadier&lt;br /&gt;
 -Léo Orveillon&lt;br /&gt;
&lt;br /&gt;
==Que fait ce projet ? ==&lt;br /&gt;
&lt;br /&gt;
Jeux ludique dans lequel la réactivité prime.&lt;br /&gt;
&lt;br /&gt;
Une lumière se balade le long du ruban,&lt;br /&gt;
le joueur doit appuyer sur le bouton dès que la lumière arrive au centre.&lt;br /&gt;
&lt;br /&gt;
La lumière accélère au fil du temps&lt;br /&gt;
&lt;br /&gt;
Le projet fonctionne autour d'une carte arduino sur laquelle on branche un bouton et un ruban de leds&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;
==Code==&lt;br /&gt;
&amp;lt;pre&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;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Catégories==&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Enib2022]]&lt;/div&gt;</summary>
		<author><name>Emmanuel</name></author>	</entry>

	<entry>
		<id>http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2022_:_Catch_the_middle&amp;diff=18965</id>
		<title>ENIB 2022 : Catch the middle</title>
		<link rel="alternate" type="text/html" href="http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2022_:_Catch_the_middle&amp;diff=18965"/>
				<updated>2022-01-17T14:56:52Z</updated>
		
		<summary type="html">&lt;p&gt;Emmanuel : /* photo du projet */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==photo du projet==&lt;br /&gt;
[[Fichier:Catch the middle IS3.jpg|600px]]&lt;br /&gt;
&lt;br /&gt;
Yann Le Masson&lt;br /&gt;
Hugo Boulouard&lt;br /&gt;
Malo Cadier&lt;br /&gt;
Léo Orveillon&lt;br /&gt;
&lt;br /&gt;
==Que fait ce projet ? ==&lt;br /&gt;
&lt;br /&gt;
Jeux ludique dans lequel la réactivité prime.&lt;br /&gt;
&lt;br /&gt;
Une lumière se balade le long du ruban,&lt;br /&gt;
le joueur doit appuyer sur le bouton dès que la lumière arrive au centre.&lt;br /&gt;
&lt;br /&gt;
La lumière accélère au fil du temps&lt;br /&gt;
&lt;br /&gt;
Le projet fonctionne autour d'une carte arduino sur laquelle on branche un bouton et un ruban de leds&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;
==Code==&lt;br /&gt;
&amp;lt;pre&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;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Catégories==&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Enib2022]]&lt;/div&gt;</summary>
		<author><name>Emmanuel</name></author>	</entry>

	<entry>
		<id>http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2022_:_Catch_the_middle&amp;diff=18963</id>
		<title>ENIB 2022 : Catch the middle</title>
		<link rel="alternate" type="text/html" href="http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2022_:_Catch_the_middle&amp;diff=18963"/>
				<updated>2022-01-17T14:56:23Z</updated>
		
		<summary type="html">&lt;p&gt;Emmanuel : /* photo de l'équipe */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==photo de l'équipe==&lt;br /&gt;
[[Fichier:Catch the middle IS3.jpg|600px]]&lt;br /&gt;
&lt;br /&gt;
Yann Le Masson&lt;br /&gt;
Hugo Boulouard&lt;br /&gt;
Malo Cadier&lt;br /&gt;
Léo Orveillon&lt;br /&gt;
&lt;br /&gt;
==Que fait ce projet ? ==&lt;br /&gt;
&lt;br /&gt;
Jeux ludique dans lequel la réactivité prime.&lt;br /&gt;
&lt;br /&gt;
Une lumière se balade le long du ruban,&lt;br /&gt;
le joueur doit appuyer sur le bouton dès que la lumière arrive au centre.&lt;br /&gt;
&lt;br /&gt;
La lumière accélère au fil du temps&lt;br /&gt;
&lt;br /&gt;
Le projet fonctionne autour d'une carte arduino sur laquelle on branche un bouton et un ruban de leds&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;
==Code==&lt;br /&gt;
&amp;lt;pre&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;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Catégories==&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Enib2022]]&lt;/div&gt;</summary>
		<author><name>Emmanuel</name></author>	</entry>

	<entry>
		<id>http://wiki.lesfabriquesduponant.net/index.php?title=Fichier:Catch_the_middle_IS3.jpg&amp;diff=18960</id>
		<title>Fichier:Catch the middle IS3.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.lesfabriquesduponant.net/index.php?title=Fichier:Catch_the_middle_IS3.jpg&amp;diff=18960"/>
				<updated>2022-01-17T14:55:02Z</updated>
		
		<summary type="html">&lt;p&gt;Emmanuel : Photo du projet catch the middle du Hackaton Fêtes foraines de Janvier 2022&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Photo du projet catch the middle du Hackaton Fêtes foraines de Janvier 2022&lt;/div&gt;</summary>
		<author><name>Emmanuel</name></author>	</entry>

	<entry>
		<id>http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2022_:_Catch_the_middle&amp;diff=18949</id>
		<title>ENIB 2022 : Catch the middle</title>
		<link rel="alternate" type="text/html" href="http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2022_:_Catch_the_middle&amp;diff=18949"/>
				<updated>2022-01-17T14:48:30Z</updated>
		
		<summary type="html">&lt;p&gt;Emmanuel : /* Liste des composants */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==photo de l'équipe==&lt;br /&gt;
[[Fichier:Photoenib2018.jpg|600px]]&lt;br /&gt;
&lt;br /&gt;
Yann Le Masson&lt;br /&gt;
Hugo Boulouard&lt;br /&gt;
Malo Cadier&lt;br /&gt;
Léo Orveillon&lt;br /&gt;
==Que fait ce projet ? ==&lt;br /&gt;
&lt;br /&gt;
Jeux ludique dans lequel la réactivité prime.&lt;br /&gt;
&lt;br /&gt;
Une lumière se balade le long du ruban,&lt;br /&gt;
le joueur doit appuyer sur le bouton dès que la lumière arrive au centre.&lt;br /&gt;
&lt;br /&gt;
La lumière accélère au fil du temps&lt;br /&gt;
&lt;br /&gt;
Le projet fonctionne autour d'une carte arduino sur laquelle on branche un bouton et un ruban de leds&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;
==Code==&lt;br /&gt;
&amp;lt;pre&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 63&lt;br /&gt;
#define NUM_OF_LEDS_BY_LEVEL 17         // nombre de leds par niveau&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 par manque de temps 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::Blue; // 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.2, 1.5, 1.7, 1.9, 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 - (int)abs((level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2 + 1) - score_of_level) * (level * coef[level]);&lt;br /&gt;
  Serial.println(NUM_OF_LEDS_BY_LEVEL/2);&lt;br /&gt;
  Serial.println((int)abs((level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2) - score_of_level));&lt;br /&gt;
  Serial.println(NUM_OF_LEDS_BY_LEVEL/2 - (int)abs((level * NUM_OF_LEDS_BY_LEVEL + NUM_OF_LEDS_BY_LEVEL / 2 - score_of_level)) + 1);&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 level_up()&lt;br /&gt;
{&lt;br /&gt;
  flash();&lt;br /&gt;
  level++;&lt;br /&gt;
  delay_level -= 4;&lt;br /&gt;
  if (level &amp;gt;= 3)&lt;br /&gt;
  {&lt;br /&gt;
    reset_leds();&lt;br /&gt;
    score_leds();&lt;br /&gt;
    delay(2000);&lt;br /&gt;
    while (!digitalRead(PIN_BTN))&lt;br /&gt;
    {&lt;br /&gt;
      delay(2);&lt;br /&gt;
    }&lt;br /&gt;
    while (digitalRead(PIN_BTN))&lt;br /&gt;
    {&lt;br /&gt;
      delay(10);&lt;br /&gt;
    }&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;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Catégories==&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Enib2022]]&lt;/div&gt;</summary>
		<author><name>Emmanuel</name></author>	</entry>

	<entry>
		<id>http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2022_:_Catch_the_middle&amp;diff=18304</id>
		<title>ENIB 2022 : Catch the middle</title>
		<link rel="alternate" type="text/html" href="http://wiki.lesfabriquesduponant.net/index.php?title=ENIB_2022_:_Catch_the_middle&amp;diff=18304"/>
				<updated>2022-01-06T15:11:36Z</updated>
		
		<summary type="html">&lt;p&gt;Emmanuel : Page créée avec « ==photo de l'équipe== 600px  Yann Le Masson Hugo Boulouard Malo Cadier Léo Orveillon ==Que fait ce projet ? ==  Jeux ludique dans lequel la... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==photo de l'équipe==&lt;br /&gt;
[[Fichier:Photoenib2018.jpg|600px]]&lt;br /&gt;
&lt;br /&gt;
Yann Le Masson&lt;br /&gt;
Hugo Boulouard&lt;br /&gt;
Malo Cadier&lt;br /&gt;
Léo Orveillon&lt;br /&gt;
==Que fait ce projet ? ==&lt;br /&gt;
&lt;br /&gt;
Jeux ludique dans lequel la réactivité prime.&lt;br /&gt;
&lt;br /&gt;
Une lumière se balade le long du ruban,&lt;br /&gt;
le joueur doit appuyer sur le bouton dès que la lumière arrive au centre.&lt;br /&gt;
&lt;br /&gt;
La lumière accélère au fil du temps&lt;br /&gt;
&lt;br /&gt;
==Liste des composants==&lt;br /&gt;
&lt;br /&gt;
* Bouton poussoir style Arcade&lt;br /&gt;
* D1 Mini&lt;br /&gt;
* 3 rubans de LED adressable &lt;br /&gt;
* Un écran LCD&lt;br /&gt;
* Carton&lt;br /&gt;
&lt;br /&gt;
==Code==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ici je pose mon code documenté !&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Catégories==&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Enib2022]]&lt;/div&gt;</summary>
		<author><name>Emmanuel</name></author>	</entry>

	</feed>