<?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=Emma</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=Emma"/>
		<link rel="alternate" type="text/html" href="http://wiki.lesfabriquesduponant.net/index.php?title=Sp%C3%A9cial:Contributions/Emma"/>
		<updated>2026-05-21T05:47:38Z</updated>
		<subtitle>Contributions de l’utilisateur</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://wiki.lesfabriquesduponant.net/index.php?title=Super_Brest_2025_:_L%27%C3%A9trange_no%C3%ABl_de_monsieur_Simon&amp;diff=35394</id>
		<title>Super Brest 2025 : L'étrange noël de monsieur Simon</title>
		<link rel="alternate" type="text/html" href="http://wiki.lesfabriquesduponant.net/index.php?title=Super_Brest_2025_:_L%27%C3%A9trange_no%C3%ABl_de_monsieur_Simon&amp;diff=35394"/>
				<updated>2025-11-30T11:27:36Z</updated>
		
		<summary type="html">&lt;p&gt;Emma : /* Conception des boutons  */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Fichier:SuperBrest2025-BADGE.png|200px]]&lt;br /&gt;
&lt;br /&gt;
==résumé du projet==&lt;br /&gt;
Ce hackathon a pour objectif d'adapter le jeu Simon (mémoire des couleurs/sons) en l'adaptant spécifiquement pour la fête de Noël de l'école.&lt;br /&gt;
&lt;br /&gt;
Le projet consiste à :&lt;br /&gt;
&lt;br /&gt;
Utiliser une cheminée existante pour le jeu.&lt;br /&gt;
&lt;br /&gt;
Programmer l'électronique Arduino pour simuler les lumières et les sons de Simon.&lt;br /&gt;
&lt;br /&gt;
Intégrer une thématique Noël (couleurs/sons festifs) pour créer une animation ludique et éducative qui met en avant la créativité.&lt;br /&gt;
&lt;br /&gt;
==membres du projet==&lt;br /&gt;
&lt;br /&gt;
Audrey : Ailée créature &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Emma : Magique arc en ciel &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ewen: Magic flocon &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Syrielle: Espiegle corne &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nadia : Divinité flamboyante &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Bibliographie et webographie sur le projet==&lt;br /&gt;
[[https://www.wiki.lesfabriquesduponant.net/index.php?title=ENIB_2022_-_groupe_A_:_Simon]]&lt;br /&gt;
https://fr.wikipedia.org/wiki/Simon_(jeu)&lt;br /&gt;
==banque d'images==&lt;br /&gt;
[[Fichier:E3F3D4A8-ECC8-40C8-9B21-032B27D7E458 2.jpg|200Pxpx|vignette|centré]]&lt;br /&gt;
&lt;br /&gt;
==prototype qu'on souhaite réaliser ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Prototype simon.jpg|vignette|centré]]&lt;br /&gt;
&lt;br /&gt;
==Schema de cablage==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capture d’écran 2025-11-29 à 15.42.22.png|vignette|centré|schema de cablage]]&lt;br /&gt;
&lt;br /&gt;
==Programme arduino==&lt;br /&gt;
&lt;br /&gt;
Le code à ete crée par l'IA claude , voici le prompt : &amp;lt;br&amp;gt;&lt;br /&gt;
Crée un jeu Simon pour ESP32 avec :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- 4 boutons/LEDs (Rouge/GPIO12-25, Jaune/GPIO13-26, Vert/GPIO14-27, Bleu/GPIO15-33)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- DFPlayer Mini sur GPIO16-17 avec 6 sons Noël (0001-0006.mp3)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Ruban LED WS2812B 144 LEDs sur GPIO32 avec effet feu continu&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Potentiomètre GPIO34 pour 3 difficultés (3/4/6 niveaux)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Son 0005.mp3 pour victoire totale, 0006.mp3 pour échec immédiat&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Bibliothèques : DFRobotDFPlayerMini + FastLED&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Arduino&amp;quot; line&amp;gt;/*&lt;br /&gt;
 * JEU SIMON COMPLET - ESP32 + DFPlayer Mini + Ruban LED Feu&lt;br /&gt;
 * &lt;br /&gt;
 * Câblage:&lt;br /&gt;
 * ─────────────────────────────────────────────&lt;br /&gt;
 * DFPlayer Mini:&lt;br /&gt;
 *   - RX      → GPIO 17 (TX ESP32) + résistance 1kΩ&lt;br /&gt;
 *   - TX      → GPIO 16 (RX ESP32)&lt;br /&gt;
 *   - VCC     → 5V&lt;br /&gt;
 *   - GND     → GND&lt;br /&gt;
 *   - SPK_1/2 → Haut-parleur 3W (4-8Ω)&lt;br /&gt;
 * &lt;br /&gt;
 * 4 Boutons (avec pull-up interne):&lt;br /&gt;
 *   - Bouton ROUGE  → GPIO 12 → GND&lt;br /&gt;
 *   - Bouton VERT   → GPIO 13 → GND&lt;br /&gt;
 *   - Bouton BLEU   → GPIO 14 → GND&lt;br /&gt;
 *   - Bouton JAUNE  → GPIO 15 → GND&lt;br /&gt;
 * &lt;br /&gt;
 * 4 LEDs (avec résistances 220Ω):&lt;br /&gt;
 *   - LED ROUGE  → GPIO 25 → Résistance → GND&lt;br /&gt;
 *   - LED VERTE  → GPIO 26 → Résistance → GND&lt;br /&gt;
 *   - LED BLEUE  → GPIO 27 → Résistance → GND&lt;br /&gt;
 *   - LED JAUNE  → GPIO 33 → Résistance → GND&lt;br /&gt;
 * &lt;br /&gt;
 * Ruban LED (WS2812B - 144 LEDs):&lt;br /&gt;
 *   - DATA → GPIO 32&lt;br /&gt;
 *   - VCC  → 5V (alimentation externe recommandée si &amp;gt;30 LEDs)&lt;br /&gt;
 *   - GND  → GND (commun avec ESP32)&lt;br /&gt;
 * &lt;br /&gt;
 * Potentiomètre (sélection difficulté):&lt;br /&gt;
 *   - Broche gauche  → GND&lt;br /&gt;
 *   - Broche centrale → GPIO 34 (ADC)&lt;br /&gt;
 *   - Broche droite   → 3.3V&lt;br /&gt;
 * &lt;br /&gt;
 * Fichiers MP3 sur carte SD (FAT32):&lt;br /&gt;
 *   - 0001.mp3 : Son bouton ROUGE&lt;br /&gt;
 *   - 0002.mp3 : Son bouton JAUNE&lt;br /&gt;
 *   - 0003.mp3 : Son bouton VERT&lt;br /&gt;
 *   - 0004.mp3 : Son bouton BLEU&lt;br /&gt;
 *   - 0005.mp3 : Son VICTOIRE (après 5 niveaux réussis)&lt;br /&gt;
 *   - 0006.mp3 : Son ÉCHEC (erreur dans la séquence)&lt;br /&gt;
 * &lt;br /&gt;
 * IMPORTANT: Installez la bibliothèque FastLED&lt;br /&gt;
 * (Croquis → Inclure une bibliothèque → Gérer les bibliothèques → FastLED)&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;DFRobotDFPlayerMini.h&amp;gt;&lt;br /&gt;
#include &amp;lt;FastLED.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// Configuration DFPlayer&lt;br /&gt;
HardwareSerial mySoftwareSerial(2);&lt;br /&gt;
DFRobotDFPlayerMini myDFPlayer;&lt;br /&gt;
&lt;br /&gt;
// Configuration Ruban LED&lt;br /&gt;
#define LED_STRIP_PIN 32&lt;br /&gt;
#define NUM_LEDS 144&lt;br /&gt;
#define LED_TYPE WS2812B&lt;br /&gt;
#define COLOR_ORDER GRB&lt;br /&gt;
CRGB leds[NUM_LEDS];&lt;br /&gt;
&lt;br /&gt;
// Configuration Potentiomètre (sélection difficulté)&lt;br /&gt;
#define POTENTIOMETER_PIN 34  // GPIO 34 (ADC1_CH6)&lt;br /&gt;
&lt;br /&gt;
// Niveaux de difficulté&lt;br /&gt;
enum Difficulty {&lt;br /&gt;
  EASY = 0,    // 3 niveaux&lt;br /&gt;
  MEDIUM = 1,  // 4 niveaux&lt;br /&gt;
  HARD = 2     // 6 niveaux&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Difficulty currentDifficulty = MEDIUM;&lt;br /&gt;
int maxLevels = 4;  // Par défaut moyen&lt;br /&gt;
&lt;br /&gt;
// Configuration des pins boutons et LEDs&lt;br /&gt;
const int BUTTON_PINS[4] = {12, 13, 14, 15};  // Rouge, Jaune, Vert, Bleu&lt;br /&gt;
const int LED_PINS[4] = {25, 26, 27, 33};     // Rouge, Jaune, Vert, Bleu&lt;br /&gt;
&lt;br /&gt;
// Noms des couleurs pour l'affichage&lt;br /&gt;
const char* COLOR_NAMES[4] = {&amp;quot;ROUGE&amp;quot;, &amp;quot;JAUNE&amp;quot;, &amp;quot;VERT&amp;quot;, &amp;quot;BLEU&amp;quot;};&lt;br /&gt;
&lt;br /&gt;
// Correspondance couleur -&amp;gt; numéro de son&lt;br /&gt;
const int COLOR_TO_SOUND[4] = {1, 2, 3, 4};  // Rouge=1, Jaune=2, Vert=3, Bleu=4&lt;br /&gt;
&lt;br /&gt;
// Variables du jeu&lt;br /&gt;
int sequence[100];              // Séquence à mémoriser (max 100 niveaux)&lt;br /&gt;
int sequenceLength = 0;         // Longueur actuelle de la séquence&lt;br /&gt;
int playerInput[100];           // Saisie du joueur&lt;br /&gt;
int playerIndex = 0;            // Position dans la saisie&lt;br /&gt;
int level = 1;                  // Niveau actuel&lt;br /&gt;
bool gameActive = false;        // Jeu en cours&lt;br /&gt;
bool waitingForInput = false;   // En attente de la saisie du joueur&lt;br /&gt;
&lt;br /&gt;
// Débounce des boutons&lt;br /&gt;
unsigned long lastButtonPress[4] = {0, 0, 0, 0};&lt;br /&gt;
const unsigned long DEBOUNCE_DELAY = 250;&lt;br /&gt;
&lt;br /&gt;
// Timings du jeu (en millisecondes)&lt;br /&gt;
const int FLASH_DURATION = 500;      // Durée d'allumage d'une LED&lt;br /&gt;
const int PAUSE_BETWEEN_FLASH = 200; // Pause entre deux LEDs&lt;br /&gt;
const int DELAY_AFTER_SEQUENCE = 500;// Délai avant que le joueur joue&lt;br /&gt;
&lt;br /&gt;
// Variables pour l'effet feu&lt;br /&gt;
byte heat[NUM_LEDS];&lt;br /&gt;
unsigned long lastFireUpdate = 0;&lt;br /&gt;
const int FIRE_UPDATE_INTERVAL = 50; // Mise à jour toutes les 50ms&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(115200);&lt;br /&gt;
  delay(1000);&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\n╔═══════════════════════════════════╗&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;║      JEU SIMON - ESP32            ║&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;╚═══════════════════════════════════╝\n&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Configuration des boutons&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    pinMode(BUTTON_PINS[i], INPUT_PULLUP);&lt;br /&gt;
  }&lt;br /&gt;
  Serial.println(&amp;quot;✓ Boutons configurés&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Configuration des LEDs&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    pinMode(LED_PINS[i], OUTPUT);&lt;br /&gt;
    digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
  }&lt;br /&gt;
  Serial.println(&amp;quot;✓ LEDs configurées&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Configuration du ruban LED&lt;br /&gt;
  FastLED.addLeds&amp;lt;LED_TYPE, LED_STRIP_PIN, COLOR_ORDER&amp;gt;(leds, NUM_LEDS);&lt;br /&gt;
  FastLED.setBrightness(100); // Luminosité (0-255)&lt;br /&gt;
  FastLED.clear();&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
  Serial.println(&amp;quot;✓ Ruban LED configuré (144 LEDs)&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Configuration du potentiomètre&lt;br /&gt;
  pinMode(POTENTIOMETER_PIN, INPUT);&lt;br /&gt;
  Serial.println(&amp;quot;✓ Potentiomètre configuré sur GPIO 34&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Lire la difficulté initiale&lt;br /&gt;
  readDifficulty();&lt;br /&gt;
  &lt;br /&gt;
  // Configuration DFPlayer&lt;br /&gt;
  mySoftwareSerial.begin(9600, SERIAL_8N1, 16, 17);&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\nInitialisation du DFPlayer...&amp;quot;);&lt;br /&gt;
  if (!myDFPlayer.begin(mySoftwareSerial)) {&lt;br /&gt;
    Serial.println(&amp;quot;\n✗ ERREUR DFPlayer!&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;Vérifiez:&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;  - Carte SD insérée (FAT32)&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;  - Fichiers 0001.mp3 à 0006.mp3&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;  - Connexions RX/TX&amp;quot;);&lt;br /&gt;
    while(true) { delay(1000); }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;✓ DFPlayer OK!&amp;quot;);&lt;br /&gt;
  myDFPlayer.volume(25);  // Volume (0-30)&lt;br /&gt;
  delay(100);&lt;br /&gt;
  &lt;br /&gt;
  // Animation de démarrage&lt;br /&gt;
  startupAnimation();&lt;br /&gt;
  &lt;br /&gt;
  // Initialiser le générateur aléatoire&lt;br /&gt;
  randomSeed(analogRead(0));&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\n═══════════════════════════════════&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;  DIFFICULTÉ SÉLECTIONNÉE:&amp;quot;);&lt;br /&gt;
  printDifficulty();&lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;   Appuyez sur un bouton pour&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;        commencer le jeu!&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  // Mettre à jour l'effet feu en continu&lt;br /&gt;
  updateFireEffect();&lt;br /&gt;
  &lt;br /&gt;
  if (!gameActive) {&lt;br /&gt;
    // Attendre qu'un bouton soit pressé pour démarrer&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      if (digitalRead(BUTTON_PINS[i]) == LOW) {&lt;br /&gt;
        delay(300);&lt;br /&gt;
        startNewGame();&lt;br /&gt;
        break;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  } else if (waitingForInput) {&lt;br /&gt;
    checkPlayerInput();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void startNewGame() {&lt;br /&gt;
  // Lire la difficulté au début de chaque partie&lt;br /&gt;
  readDifficulty();&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\n╔═══════════════════════════════════╗&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;║      NOUVELLE PARTIE              ║&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;╚═══════════════════════════════════╝&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;\n  Difficulté: &amp;quot;);&lt;br /&gt;
  printDifficulty();&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  &lt;br /&gt;
  gameActive = true;&lt;br /&gt;
  level = 1;&lt;br /&gt;
  sequenceLength = 0;&lt;br /&gt;
  &lt;br /&gt;
  delay(1000);&lt;br /&gt;
  nextLevel();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void nextLevel() {&lt;br /&gt;
  Serial.println(&amp;quot;─────────────────────────────────────&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;         NIVEAU &amp;quot;);&lt;br /&gt;
  Serial.print(level);&lt;br /&gt;
  Serial.print(&amp;quot; / &amp;quot;);&lt;br /&gt;
  Serial.println(maxLevels);&lt;br /&gt;
  Serial.println(&amp;quot;─────────────────────────────────────\n&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Ajouter une couleur aléatoire à la séquence&lt;br /&gt;
  sequence[sequenceLength] = random(0, 4);&lt;br /&gt;
  sequenceLength++;&lt;br /&gt;
  &lt;br /&gt;
  delay(1000);&lt;br /&gt;
  &lt;br /&gt;
  // Afficher la séquence au joueur&lt;br /&gt;
  playSequence();&lt;br /&gt;
  &lt;br /&gt;
  // Attendre la saisie du joueur&lt;br /&gt;
  playerIndex = 0;&lt;br /&gt;
  waitingForInput = true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void playSequence() {&lt;br /&gt;
  Serial.println(&amp;quot;👀 Mémorisez la séquence:\n&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  for (int i = 0; i &amp;lt; sequenceLength; i++) {&lt;br /&gt;
    int color = sequence[i];&lt;br /&gt;
    &lt;br /&gt;
    Serial.print(&amp;quot;   &amp;quot;);&lt;br /&gt;
    Serial.print(i + 1);&lt;br /&gt;
    Serial.print(&amp;quot;. &amp;quot;);&lt;br /&gt;
    Serial.println(COLOR_NAMES[color]);&lt;br /&gt;
    &lt;br /&gt;
    // Allumer la LED et jouer le son&lt;br /&gt;
    digitalWrite(LED_PINS[color], HIGH);&lt;br /&gt;
    myDFPlayer.play(COLOR_TO_SOUND[color]);  // Rouge=1, Jaune=2, Vert=3, Bleu=4&lt;br /&gt;
    &lt;br /&gt;
    delay(FLASH_DURATION);&lt;br /&gt;
    &lt;br /&gt;
    // Éteindre la LED&lt;br /&gt;
    digitalWrite(LED_PINS[color], LOW);&lt;br /&gt;
    &lt;br /&gt;
    // Pause entre les flashs&lt;br /&gt;
    if (i &amp;lt; sequenceLength - 1) {&lt;br /&gt;
      delay(PAUSE_BETWEEN_FLASH);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  delay(DELAY_AFTER_SEQUENCE);&lt;br /&gt;
  Serial.println(&amp;quot;\n🎮 À vous de jouer!\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void checkPlayerInput() {&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    if (digitalRead(BUTTON_PINS[i]) == LOW) {&lt;br /&gt;
      unsigned long currentTime = millis();&lt;br /&gt;
      &lt;br /&gt;
      // Débounce&lt;br /&gt;
      if (currentTime - lastButtonPress[i] &amp;gt; DEBOUNCE_DELAY) {&lt;br /&gt;
        lastButtonPress[i] = currentTime;&lt;br /&gt;
        &lt;br /&gt;
        // Feedback visuel et sonore&lt;br /&gt;
        digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
        myDFPlayer.play(COLOR_TO_SOUND[i]);  // Jouer le son correspondant&lt;br /&gt;
        &lt;br /&gt;
        Serial.print(&amp;quot;   → &amp;quot;);&lt;br /&gt;
        Serial.println(COLOR_NAMES[i]);&lt;br /&gt;
        &lt;br /&gt;
        // Enregistrer la saisie&lt;br /&gt;
        playerInput[playerIndex] = i;&lt;br /&gt;
        &lt;br /&gt;
        delay(300);&lt;br /&gt;
        digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
        &lt;br /&gt;
        // Vérifier si c'est correct&lt;br /&gt;
        if (playerInput[playerIndex] != sequence[playerIndex]) {&lt;br /&gt;
          gameLost();&lt;br /&gt;
          return;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        playerIndex++;&lt;br /&gt;
        &lt;br /&gt;
        // Vérifier si la séquence complète est correcte&lt;br /&gt;
        if (playerIndex &amp;gt;= sequenceLength) {&lt;br /&gt;
          sequenceComplete();&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void sequenceComplete() {&lt;br /&gt;
  Serial.println(&amp;quot;\n✅ Séquence correcte!\n&amp;quot;);&lt;br /&gt;
  waitingForInput = false;&lt;br /&gt;
  &lt;br /&gt;
  level++;&lt;br /&gt;
  &lt;br /&gt;
  // Vérifier si on a atteint le niveau maximum selon la difficulté&lt;br /&gt;
  if (level &amp;gt; maxLevels) {&lt;br /&gt;
    gameWon();&lt;br /&gt;
  } else {&lt;br /&gt;
    delay(500);&lt;br /&gt;
    &lt;br /&gt;
    // Animation de succès (rapide entre chaque niveau)&lt;br /&gt;
    for (int j = 0; j &amp;lt; 2; j++) {&lt;br /&gt;
      for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
        digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
      }&lt;br /&gt;
      delay(100);&lt;br /&gt;
      for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
        digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
      }&lt;br /&gt;
      delay(100);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    delay(1000);&lt;br /&gt;
    nextLevel();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void gameLost() {&lt;br /&gt;
  Serial.println(&amp;quot;\n╔═══════════════════════════════════╗&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;║          ❌ ERREUR!               ║&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;╚═══════════════════════════════════╝&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;\n   Vous étiez au niveau &amp;quot;);&lt;br /&gt;
  Serial.println(level);&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  &lt;br /&gt;
  waitingForInput = false;&lt;br /&gt;
  gameActive = false;&lt;br /&gt;
  &lt;br /&gt;
  // Son d'échec (0006.mp3)&lt;br /&gt;
  myDFPlayer.play(6);&lt;br /&gt;
  &lt;br /&gt;
  // Animation d'échec (clignotement rapide)&lt;br /&gt;
  for (int j = 0; j &amp;lt; 5; j++) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
    }&lt;br /&gt;
    delay(150);&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
    }&lt;br /&gt;
    delay(150);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot; Appuyez sur un bouton pour rejouer&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void gameWon() {&lt;br /&gt;
  Serial.println(&amp;quot;\n╔═══════════════════════════════════╗&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;║      🎉 VICTOIRE! 🎉              ║&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;╚═══════════════════════════════════╝&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;\n  Vous avez réussi les &amp;quot;);&lt;br /&gt;
  Serial.print(maxLevels);&lt;br /&gt;
  Serial.println(&amp;quot; niveaux!&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;  Difficulté: &amp;quot;);&lt;br /&gt;
  printDifficulty();&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  &lt;br /&gt;
  gameActive = false;&lt;br /&gt;
  &lt;br /&gt;
  // Son de victoire (0005.mp3)&lt;br /&gt;
  myDFPlayer.play(5);&lt;br /&gt;
  &lt;br /&gt;
  // Animation de victoire spectaculaire&lt;br /&gt;
  // Vague de lumière rapide&lt;br /&gt;
  for (int j = 0; j &amp;lt; 8; j++) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
      delay(60);&lt;br /&gt;
      digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Clignotement final toutes ensemble&lt;br /&gt;
  for (int j = 0; j &amp;lt; 4; j++) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
    }&lt;br /&gt;
    delay(200);&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
    }&lt;br /&gt;
    delay(200);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\n═══════════════════════════════════&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot; Ajustez le potentiomètre pour&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot; changer de difficulté&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot; Appuyez sur un bouton pour rejouer&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void startupAnimation() {&lt;br /&gt;
  Serial.println(&amp;quot;\nAnimation de démarrage...\n&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Allumage séquentiel&lt;br /&gt;
  for (int j = 0; j &amp;lt; 2; j++) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
      delay(100);&lt;br /&gt;
    }&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
      delay(100);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Flash final&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
  }&lt;br /&gt;
  delay(300);&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Effet feu de bois pour le ruban LED&lt;br /&gt;
void updateFireEffect() {&lt;br /&gt;
  unsigned long currentTime = millis();&lt;br /&gt;
  &lt;br /&gt;
  // Mettre à jour seulement toutes les FIRE_UPDATE_INTERVAL ms&lt;br /&gt;
  if (currentTime - lastFireUpdate &amp;lt; FIRE_UPDATE_INTERVAL) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  lastFireUpdate = currentTime;&lt;br /&gt;
  &lt;br /&gt;
  // Refroidissement: chaque cellule perd un peu de chaleur&lt;br /&gt;
  for (int i = 0; i &amp;lt; NUM_LEDS; i++) {&lt;br /&gt;
    int cooldown = random(0, ((55 * 10) / NUM_LEDS) + 2);&lt;br /&gt;
    if (cooldown &amp;gt;= heat[i]) {&lt;br /&gt;
      heat[i] = 0;&lt;br /&gt;
    } else {&lt;br /&gt;
      heat[i] = heat[i] - cooldown;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Diffusion de chaleur vers le haut&lt;br /&gt;
  for (int k = NUM_LEDS - 1; k &amp;gt;= 2; k--) {&lt;br /&gt;
    heat[k] = (heat[k - 1] + heat[k - 2] + heat[k - 2]) / 3;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Ajout de nouvelles étincelles aléatoires en bas&lt;br /&gt;
  if (random(255) &amp;lt; 120) {&lt;br /&gt;
    int y = random(7);&lt;br /&gt;
    heat[y] = heat[y] + random(160, 255);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Conversion de la chaleur en couleurs&lt;br /&gt;
  for (int j = 0; j &amp;lt; NUM_LEDS; j++) {&lt;br /&gt;
    // Palette de couleurs feu: noir → rouge → orange → jaune → blanc&lt;br /&gt;
    byte temperature = heat[j];&lt;br /&gt;
    &lt;br /&gt;
    // Noir → Rouge foncé&lt;br /&gt;
    byte t192 = scale8_video(temperature, 191);&lt;br /&gt;
    byte heatramp = t192 &amp;amp; 0x3F; // 0..63&lt;br /&gt;
    heatramp &amp;lt;&amp;lt;= 2; // 0..252&lt;br /&gt;
    &lt;br /&gt;
    if (t192 &amp;amp; 0x80) {&lt;br /&gt;
      // Partie la plus chaude - jaune vers blanc&lt;br /&gt;
      leds[j].r = 255;&lt;br /&gt;
      leds[j].g = 255;&lt;br /&gt;
      leds[j].b = heatramp;&lt;br /&gt;
    } else if (t192 &amp;amp; 0x40) {&lt;br /&gt;
      // Partie chaude - rouge vers jaune&lt;br /&gt;
      leds[j].r = 255;&lt;br /&gt;
      leds[j].g = heatramp;&lt;br /&gt;
      leds[j].b = 0;&lt;br /&gt;
    } else {&lt;br /&gt;
      // Partie froide - noir vers rouge&lt;br /&gt;
      leds[j].r = heatramp;&lt;br /&gt;
      leds[j].g = 0;&lt;br /&gt;
      leds[j].b = 0;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  FastLED.show();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Lire le potentiomètre et déterminer la difficulté&lt;br /&gt;
void readDifficulty() {&lt;br /&gt;
  int potValue = analogRead(POTENTIOMETER_PIN);  // 0-4095 sur ESP32&lt;br /&gt;
  &lt;br /&gt;
  // Diviser en 3 zones&lt;br /&gt;
  if (potValue &amp;lt; 1365) {&lt;br /&gt;
    // Zone 1: FACILE (0-1365)&lt;br /&gt;
    currentDifficulty = EASY;&lt;br /&gt;
    maxLevels = 3;&lt;br /&gt;
  } else if (potValue &amp;lt; 2730) {&lt;br /&gt;
    // Zone 2: MOYEN (1365-2730)&lt;br /&gt;
    currentDifficulty = MEDIUM;&lt;br /&gt;
    maxLevels = 4;&lt;br /&gt;
  } else {&lt;br /&gt;
    // Zone 3: DIFFICILE (2730-4095)&lt;br /&gt;
    currentDifficulty = HARD;&lt;br /&gt;
    maxLevels = 6;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Afficher la difficulté actuelle&lt;br /&gt;
void printDifficulty() {&lt;br /&gt;
  switch(currentDifficulty) {&lt;br /&gt;
    case EASY:&lt;br /&gt;
      Serial.print(&amp;quot;FACILE (3 niveaux)&amp;quot;);&lt;br /&gt;
      break;&lt;br /&gt;
    case MEDIUM:&lt;br /&gt;
      Serial.print(&amp;quot;MOYEN (4 niveaux)&amp;quot;);&lt;br /&gt;
      break;&lt;br /&gt;
    case HARD:&lt;br /&gt;
      Serial.print(&amp;quot;DIFFICILE (6 niveaux)&amp;quot;);&lt;br /&gt;
      break;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Conception des boutons &amp;lt;br&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
- Au départ : Bouton lumineux rouge à disposition, le problème est qu'il faut plusieurs couleurs. Alors nous changeons de couleur de la led et voulons remplacer l'opercule rouge par du plexiglass, cependant cela ne se colle pas au bouton. &amp;lt;br&amp;gt;&lt;br /&gt;
- Alors : Nous avons pris des boutons plus petit de plusieurs couleur (rouge, bleu, vert et jaune). Pour les rendre plus grands, nous avons décider de couper du plexiglass en plusieurs formes : bonhomme de neige, sapin, renne, et pain d'épice, nous avons laissé un trou (de 27mm de diamètre) dans chacune des formes afin de mettre les boutons dedans. Le fichier prototype a été réalisé avec inkscape et la découpe avec une découpeuse laser. &amp;lt;br&amp;gt;&lt;br /&gt;
- Ensuite, nous avons rajouté du vinyl de la même couleur que les boutons pour les rendre plus visible sur la cheminée.&amp;lt;br&amp;gt;&lt;br /&gt;
- Pour finir, nous allons les pencher à un angle de 45° pour que ce soit plus visible pour les enfants.&lt;br /&gt;
&lt;br /&gt;
==Prototype design bouton &amp;lt;br&amp;gt; ==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Fichier:Prototypes Boutons .pdf&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Galère &amp;lt;br&amp;gt;== &lt;br /&gt;
&lt;br /&gt;
11h50, jeu de lumiere marche pas, on retourne à l'ancienne version&lt;br /&gt;
&lt;br /&gt;
==premier diaporama : Alors ? Comment ça se passe ?==&lt;br /&gt;
Diaporama type '''Alors ?''': [[media:DiaporamaSuperBrest2024-Alors.odp|Téléchargez et adaptez-le !]]&lt;br /&gt;
&lt;br /&gt;
==second diaporama : Et voilà !==&lt;br /&gt;
Diaporama type '''Et Voilà !''' : [[media:DiaporamaSuperBrest2024-EtVoila.odp|Téléchargez et adaptez-le !]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Sciencehackdaybrest]]&lt;br /&gt;
[[Catégorie:Super Brest]]&lt;br /&gt;
[[Catégorie:Super Brest 2025]]&lt;/div&gt;</summary>
		<author><name>Emma</name></author>	</entry>

	<entry>
		<id>http://wiki.lesfabriquesduponant.net/index.php?title=Super_Brest_2025_:_L%27%C3%A9trange_no%C3%ABl_de_monsieur_Simon&amp;diff=35388</id>
		<title>Super Brest 2025 : L'étrange noël de monsieur Simon</title>
		<link rel="alternate" type="text/html" href="http://wiki.lesfabriquesduponant.net/index.php?title=Super_Brest_2025_:_L%27%C3%A9trange_no%C3%ABl_de_monsieur_Simon&amp;diff=35388"/>
				<updated>2025-11-30T11:14:03Z</updated>
		
		<summary type="html">&lt;p&gt;Emma : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Fichier:SuperBrest2025-BADGE.png|200px]]&lt;br /&gt;
&lt;br /&gt;
==résumé du projet==&lt;br /&gt;
Ce hackathon a pour objectif d'adapter le jeu Simon (mémoire des couleurs/sons) en l'adaptant spécifiquement pour la fête de Noël de l'école.&lt;br /&gt;
&lt;br /&gt;
Le projet consiste à :&lt;br /&gt;
&lt;br /&gt;
Utiliser une cheminée existante pour le jeu.&lt;br /&gt;
&lt;br /&gt;
Programmer l'électronique Arduino pour simuler les lumières et les sons de Simon.&lt;br /&gt;
&lt;br /&gt;
Intégrer une thématique Noël (couleurs/sons festifs) pour créer une animation ludique et éducative qui met en avant la créativité.&lt;br /&gt;
&lt;br /&gt;
==membres du projet==&lt;br /&gt;
&lt;br /&gt;
Audrey : Ailée créature &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Emma : Magique arc en ciel &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ewen: Magic flocon &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Syrielle: Espiegle corne &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nadia : Divinité flamboyante &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Bibliographie et webographie sur le projet==&lt;br /&gt;
[[https://www.wiki.lesfabriquesduponant.net/index.php?title=ENIB_2022_-_groupe_A_:_Simon]]&lt;br /&gt;
https://fr.wikipedia.org/wiki/Simon_(jeu)&lt;br /&gt;
==banque d'images==&lt;br /&gt;
[[Fichier:E3F3D4A8-ECC8-40C8-9B21-032B27D7E458 2.jpg|200Pxpx|vignette|centré]]&lt;br /&gt;
&lt;br /&gt;
==prototype qu'on souhaite réaliser ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Prototype simon.jpg|vignette|centré]]&lt;br /&gt;
&lt;br /&gt;
==Schema de cablage==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capture d’écran 2025-11-29 à 15.42.22.png|vignette|centré|schema de cablage]]&lt;br /&gt;
&lt;br /&gt;
==Programme arduino==&lt;br /&gt;
&lt;br /&gt;
Le code à ete crée par l'IA claude , voici le prompt : &amp;lt;br&amp;gt;&lt;br /&gt;
Crée un jeu Simon pour ESP32 avec :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- 4 boutons/LEDs (Rouge/GPIO12-25, Jaune/GPIO13-26, Vert/GPIO14-27, Bleu/GPIO15-33)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- DFPlayer Mini sur GPIO16-17 avec 6 sons Noël (0001-0006.mp3)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Ruban LED WS2812B 144 LEDs sur GPIO32 avec effet feu continu&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Potentiomètre GPIO34 pour 3 difficultés (3/4/6 niveaux)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Son 0005.mp3 pour victoire totale, 0006.mp3 pour échec immédiat&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Bibliothèques : DFRobotDFPlayerMini + FastLED&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Arduino&amp;quot; line&amp;gt;/*&lt;br /&gt;
 * JEU SIMON COMPLET - ESP32 + DFPlayer Mini + Ruban LED Feu&lt;br /&gt;
 * &lt;br /&gt;
 * Câblage:&lt;br /&gt;
 * ─────────────────────────────────────────────&lt;br /&gt;
 * DFPlayer Mini:&lt;br /&gt;
 *   - RX      → GPIO 17 (TX ESP32) + résistance 1kΩ&lt;br /&gt;
 *   - TX      → GPIO 16 (RX ESP32)&lt;br /&gt;
 *   - VCC     → 5V&lt;br /&gt;
 *   - GND     → GND&lt;br /&gt;
 *   - SPK_1/2 → Haut-parleur 3W (4-8Ω)&lt;br /&gt;
 * &lt;br /&gt;
 * 4 Boutons (avec pull-up interne):&lt;br /&gt;
 *   - Bouton ROUGE  → GPIO 12 → GND&lt;br /&gt;
 *   - Bouton VERT   → GPIO 13 → GND&lt;br /&gt;
 *   - Bouton BLEU   → GPIO 14 → GND&lt;br /&gt;
 *   - Bouton JAUNE  → GPIO 15 → GND&lt;br /&gt;
 * &lt;br /&gt;
 * 4 LEDs (avec résistances 220Ω):&lt;br /&gt;
 *   - LED ROUGE  → GPIO 25 → Résistance → GND&lt;br /&gt;
 *   - LED VERTE  → GPIO 26 → Résistance → GND&lt;br /&gt;
 *   - LED BLEUE  → GPIO 27 → Résistance → GND&lt;br /&gt;
 *   - LED JAUNE  → GPIO 33 → Résistance → GND&lt;br /&gt;
 * &lt;br /&gt;
 * Ruban LED (WS2812B - 144 LEDs):&lt;br /&gt;
 *   - DATA → GPIO 32&lt;br /&gt;
 *   - VCC  → 5V (alimentation externe recommandée si &amp;gt;30 LEDs)&lt;br /&gt;
 *   - GND  → GND (commun avec ESP32)&lt;br /&gt;
 * &lt;br /&gt;
 * Potentiomètre (sélection difficulté):&lt;br /&gt;
 *   - Broche gauche  → GND&lt;br /&gt;
 *   - Broche centrale → GPIO 34 (ADC)&lt;br /&gt;
 *   - Broche droite   → 3.3V&lt;br /&gt;
 * &lt;br /&gt;
 * Fichiers MP3 sur carte SD (FAT32):&lt;br /&gt;
 *   - 0001.mp3 : Son bouton ROUGE&lt;br /&gt;
 *   - 0002.mp3 : Son bouton JAUNE&lt;br /&gt;
 *   - 0003.mp3 : Son bouton VERT&lt;br /&gt;
 *   - 0004.mp3 : Son bouton BLEU&lt;br /&gt;
 *   - 0005.mp3 : Son VICTOIRE (après 5 niveaux réussis)&lt;br /&gt;
 *   - 0006.mp3 : Son ÉCHEC (erreur dans la séquence)&lt;br /&gt;
 * &lt;br /&gt;
 * IMPORTANT: Installez la bibliothèque FastLED&lt;br /&gt;
 * (Croquis → Inclure une bibliothèque → Gérer les bibliothèques → FastLED)&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;DFRobotDFPlayerMini.h&amp;gt;&lt;br /&gt;
#include &amp;lt;FastLED.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// Configuration DFPlayer&lt;br /&gt;
HardwareSerial mySoftwareSerial(2);&lt;br /&gt;
DFRobotDFPlayerMini myDFPlayer;&lt;br /&gt;
&lt;br /&gt;
// Configuration Ruban LED&lt;br /&gt;
#define LED_STRIP_PIN 32&lt;br /&gt;
#define NUM_LEDS 144&lt;br /&gt;
#define LED_TYPE WS2812B&lt;br /&gt;
#define COLOR_ORDER GRB&lt;br /&gt;
CRGB leds[NUM_LEDS];&lt;br /&gt;
&lt;br /&gt;
// Configuration Potentiomètre (sélection difficulté)&lt;br /&gt;
#define POTENTIOMETER_PIN 34  // GPIO 34 (ADC1_CH6)&lt;br /&gt;
&lt;br /&gt;
// Niveaux de difficulté&lt;br /&gt;
enum Difficulty {&lt;br /&gt;
  EASY = 0,    // 3 niveaux&lt;br /&gt;
  MEDIUM = 1,  // 4 niveaux&lt;br /&gt;
  HARD = 2     // 6 niveaux&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Difficulty currentDifficulty = MEDIUM;&lt;br /&gt;
int maxLevels = 4;  // Par défaut moyen&lt;br /&gt;
&lt;br /&gt;
// Configuration des pins boutons et LEDs&lt;br /&gt;
const int BUTTON_PINS[4] = {12, 13, 14, 15};  // Rouge, Jaune, Vert, Bleu&lt;br /&gt;
const int LED_PINS[4] = {25, 26, 27, 33};     // Rouge, Jaune, Vert, Bleu&lt;br /&gt;
&lt;br /&gt;
// Noms des couleurs pour l'affichage&lt;br /&gt;
const char* COLOR_NAMES[4] = {&amp;quot;ROUGE&amp;quot;, &amp;quot;JAUNE&amp;quot;, &amp;quot;VERT&amp;quot;, &amp;quot;BLEU&amp;quot;};&lt;br /&gt;
&lt;br /&gt;
// Correspondance couleur -&amp;gt; numéro de son&lt;br /&gt;
const int COLOR_TO_SOUND[4] = {1, 2, 3, 4};  // Rouge=1, Jaune=2, Vert=3, Bleu=4&lt;br /&gt;
&lt;br /&gt;
// Variables du jeu&lt;br /&gt;
int sequence[100];              // Séquence à mémoriser (max 100 niveaux)&lt;br /&gt;
int sequenceLength = 0;         // Longueur actuelle de la séquence&lt;br /&gt;
int playerInput[100];           // Saisie du joueur&lt;br /&gt;
int playerIndex = 0;            // Position dans la saisie&lt;br /&gt;
int level = 1;                  // Niveau actuel&lt;br /&gt;
bool gameActive = false;        // Jeu en cours&lt;br /&gt;
bool waitingForInput = false;   // En attente de la saisie du joueur&lt;br /&gt;
&lt;br /&gt;
// Débounce des boutons&lt;br /&gt;
unsigned long lastButtonPress[4] = {0, 0, 0, 0};&lt;br /&gt;
const unsigned long DEBOUNCE_DELAY = 250;&lt;br /&gt;
&lt;br /&gt;
// Timings du jeu (en millisecondes)&lt;br /&gt;
const int FLASH_DURATION = 500;      // Durée d'allumage d'une LED&lt;br /&gt;
const int PAUSE_BETWEEN_FLASH = 200; // Pause entre deux LEDs&lt;br /&gt;
const int DELAY_AFTER_SEQUENCE = 500;// Délai avant que le joueur joue&lt;br /&gt;
&lt;br /&gt;
// Variables pour l'effet feu&lt;br /&gt;
byte heat[NUM_LEDS];&lt;br /&gt;
unsigned long lastFireUpdate = 0;&lt;br /&gt;
const int FIRE_UPDATE_INTERVAL = 50; // Mise à jour toutes les 50ms&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(115200);&lt;br /&gt;
  delay(1000);&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\n╔═══════════════════════════════════╗&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;║      JEU SIMON - ESP32            ║&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;╚═══════════════════════════════════╝\n&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Configuration des boutons&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    pinMode(BUTTON_PINS[i], INPUT_PULLUP);&lt;br /&gt;
  }&lt;br /&gt;
  Serial.println(&amp;quot;✓ Boutons configurés&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Configuration des LEDs&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    pinMode(LED_PINS[i], OUTPUT);&lt;br /&gt;
    digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
  }&lt;br /&gt;
  Serial.println(&amp;quot;✓ LEDs configurées&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Configuration du ruban LED&lt;br /&gt;
  FastLED.addLeds&amp;lt;LED_TYPE, LED_STRIP_PIN, COLOR_ORDER&amp;gt;(leds, NUM_LEDS);&lt;br /&gt;
  FastLED.setBrightness(100); // Luminosité (0-255)&lt;br /&gt;
  FastLED.clear();&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
  Serial.println(&amp;quot;✓ Ruban LED configuré (144 LEDs)&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Configuration du potentiomètre&lt;br /&gt;
  pinMode(POTENTIOMETER_PIN, INPUT);&lt;br /&gt;
  Serial.println(&amp;quot;✓ Potentiomètre configuré sur GPIO 34&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Lire la difficulté initiale&lt;br /&gt;
  readDifficulty();&lt;br /&gt;
  &lt;br /&gt;
  // Configuration DFPlayer&lt;br /&gt;
  mySoftwareSerial.begin(9600, SERIAL_8N1, 16, 17);&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\nInitialisation du DFPlayer...&amp;quot;);&lt;br /&gt;
  if (!myDFPlayer.begin(mySoftwareSerial)) {&lt;br /&gt;
    Serial.println(&amp;quot;\n✗ ERREUR DFPlayer!&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;Vérifiez:&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;  - Carte SD insérée (FAT32)&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;  - Fichiers 0001.mp3 à 0006.mp3&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;  - Connexions RX/TX&amp;quot;);&lt;br /&gt;
    while(true) { delay(1000); }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;✓ DFPlayer OK!&amp;quot;);&lt;br /&gt;
  myDFPlayer.volume(25);  // Volume (0-30)&lt;br /&gt;
  delay(100);&lt;br /&gt;
  &lt;br /&gt;
  // Animation de démarrage&lt;br /&gt;
  startupAnimation();&lt;br /&gt;
  &lt;br /&gt;
  // Initialiser le générateur aléatoire&lt;br /&gt;
  randomSeed(analogRead(0));&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\n═══════════════════════════════════&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;  DIFFICULTÉ SÉLECTIONNÉE:&amp;quot;);&lt;br /&gt;
  printDifficulty();&lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;   Appuyez sur un bouton pour&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;        commencer le jeu!&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  // Mettre à jour l'effet feu en continu&lt;br /&gt;
  updateFireEffect();&lt;br /&gt;
  &lt;br /&gt;
  if (!gameActive) {&lt;br /&gt;
    // Attendre qu'un bouton soit pressé pour démarrer&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      if (digitalRead(BUTTON_PINS[i]) == LOW) {&lt;br /&gt;
        delay(300);&lt;br /&gt;
        startNewGame();&lt;br /&gt;
        break;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  } else if (waitingForInput) {&lt;br /&gt;
    checkPlayerInput();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void startNewGame() {&lt;br /&gt;
  // Lire la difficulté au début de chaque partie&lt;br /&gt;
  readDifficulty();&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\n╔═══════════════════════════════════╗&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;║      NOUVELLE PARTIE              ║&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;╚═══════════════════════════════════╝&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;\n  Difficulté: &amp;quot;);&lt;br /&gt;
  printDifficulty();&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  &lt;br /&gt;
  gameActive = true;&lt;br /&gt;
  level = 1;&lt;br /&gt;
  sequenceLength = 0;&lt;br /&gt;
  &lt;br /&gt;
  delay(1000);&lt;br /&gt;
  nextLevel();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void nextLevel() {&lt;br /&gt;
  Serial.println(&amp;quot;─────────────────────────────────────&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;         NIVEAU &amp;quot;);&lt;br /&gt;
  Serial.print(level);&lt;br /&gt;
  Serial.print(&amp;quot; / &amp;quot;);&lt;br /&gt;
  Serial.println(maxLevels);&lt;br /&gt;
  Serial.println(&amp;quot;─────────────────────────────────────\n&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Ajouter une couleur aléatoire à la séquence&lt;br /&gt;
  sequence[sequenceLength] = random(0, 4);&lt;br /&gt;
  sequenceLength++;&lt;br /&gt;
  &lt;br /&gt;
  delay(1000);&lt;br /&gt;
  &lt;br /&gt;
  // Afficher la séquence au joueur&lt;br /&gt;
  playSequence();&lt;br /&gt;
  &lt;br /&gt;
  // Attendre la saisie du joueur&lt;br /&gt;
  playerIndex = 0;&lt;br /&gt;
  waitingForInput = true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void playSequence() {&lt;br /&gt;
  Serial.println(&amp;quot;👀 Mémorisez la séquence:\n&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  for (int i = 0; i &amp;lt; sequenceLength; i++) {&lt;br /&gt;
    int color = sequence[i];&lt;br /&gt;
    &lt;br /&gt;
    Serial.print(&amp;quot;   &amp;quot;);&lt;br /&gt;
    Serial.print(i + 1);&lt;br /&gt;
    Serial.print(&amp;quot;. &amp;quot;);&lt;br /&gt;
    Serial.println(COLOR_NAMES[color]);&lt;br /&gt;
    &lt;br /&gt;
    // Allumer la LED et jouer le son&lt;br /&gt;
    digitalWrite(LED_PINS[color], HIGH);&lt;br /&gt;
    myDFPlayer.play(COLOR_TO_SOUND[color]);  // Rouge=1, Jaune=2, Vert=3, Bleu=4&lt;br /&gt;
    &lt;br /&gt;
    delay(FLASH_DURATION);&lt;br /&gt;
    &lt;br /&gt;
    // Éteindre la LED&lt;br /&gt;
    digitalWrite(LED_PINS[color], LOW);&lt;br /&gt;
    &lt;br /&gt;
    // Pause entre les flashs&lt;br /&gt;
    if (i &amp;lt; sequenceLength - 1) {&lt;br /&gt;
      delay(PAUSE_BETWEEN_FLASH);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  delay(DELAY_AFTER_SEQUENCE);&lt;br /&gt;
  Serial.println(&amp;quot;\n🎮 À vous de jouer!\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void checkPlayerInput() {&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    if (digitalRead(BUTTON_PINS[i]) == LOW) {&lt;br /&gt;
      unsigned long currentTime = millis();&lt;br /&gt;
      &lt;br /&gt;
      // Débounce&lt;br /&gt;
      if (currentTime - lastButtonPress[i] &amp;gt; DEBOUNCE_DELAY) {&lt;br /&gt;
        lastButtonPress[i] = currentTime;&lt;br /&gt;
        &lt;br /&gt;
        // Feedback visuel et sonore&lt;br /&gt;
        digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
        myDFPlayer.play(COLOR_TO_SOUND[i]);  // Jouer le son correspondant&lt;br /&gt;
        &lt;br /&gt;
        Serial.print(&amp;quot;   → &amp;quot;);&lt;br /&gt;
        Serial.println(COLOR_NAMES[i]);&lt;br /&gt;
        &lt;br /&gt;
        // Enregistrer la saisie&lt;br /&gt;
        playerInput[playerIndex] = i;&lt;br /&gt;
        &lt;br /&gt;
        delay(300);&lt;br /&gt;
        digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
        &lt;br /&gt;
        // Vérifier si c'est correct&lt;br /&gt;
        if (playerInput[playerIndex] != sequence[playerIndex]) {&lt;br /&gt;
          gameLost();&lt;br /&gt;
          return;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        playerIndex++;&lt;br /&gt;
        &lt;br /&gt;
        // Vérifier si la séquence complète est correcte&lt;br /&gt;
        if (playerIndex &amp;gt;= sequenceLength) {&lt;br /&gt;
          sequenceComplete();&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void sequenceComplete() {&lt;br /&gt;
  Serial.println(&amp;quot;\n✅ Séquence correcte!\n&amp;quot;);&lt;br /&gt;
  waitingForInput = false;&lt;br /&gt;
  &lt;br /&gt;
  level++;&lt;br /&gt;
  &lt;br /&gt;
  // Vérifier si on a atteint le niveau maximum selon la difficulté&lt;br /&gt;
  if (level &amp;gt; maxLevels) {&lt;br /&gt;
    gameWon();&lt;br /&gt;
  } else {&lt;br /&gt;
    delay(500);&lt;br /&gt;
    &lt;br /&gt;
    // Animation de succès (rapide entre chaque niveau)&lt;br /&gt;
    for (int j = 0; j &amp;lt; 2; j++) {&lt;br /&gt;
      for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
        digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
      }&lt;br /&gt;
      delay(100);&lt;br /&gt;
      for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
        digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
      }&lt;br /&gt;
      delay(100);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    delay(1000);&lt;br /&gt;
    nextLevel();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void gameLost() {&lt;br /&gt;
  Serial.println(&amp;quot;\n╔═══════════════════════════════════╗&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;║          ❌ ERREUR!               ║&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;╚═══════════════════════════════════╝&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;\n   Vous étiez au niveau &amp;quot;);&lt;br /&gt;
  Serial.println(level);&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  &lt;br /&gt;
  waitingForInput = false;&lt;br /&gt;
  gameActive = false;&lt;br /&gt;
  &lt;br /&gt;
  // Son d'échec (0006.mp3)&lt;br /&gt;
  myDFPlayer.play(6);&lt;br /&gt;
  &lt;br /&gt;
  // Animation d'échec (clignotement rapide)&lt;br /&gt;
  for (int j = 0; j &amp;lt; 5; j++) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
    }&lt;br /&gt;
    delay(150);&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
    }&lt;br /&gt;
    delay(150);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot; Appuyez sur un bouton pour rejouer&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void gameWon() {&lt;br /&gt;
  Serial.println(&amp;quot;\n╔═══════════════════════════════════╗&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;║      🎉 VICTOIRE! 🎉              ║&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;╚═══════════════════════════════════╝&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;\n  Vous avez réussi les &amp;quot;);&lt;br /&gt;
  Serial.print(maxLevels);&lt;br /&gt;
  Serial.println(&amp;quot; niveaux!&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;  Difficulté: &amp;quot;);&lt;br /&gt;
  printDifficulty();&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  &lt;br /&gt;
  gameActive = false;&lt;br /&gt;
  &lt;br /&gt;
  // Son de victoire (0005.mp3)&lt;br /&gt;
  myDFPlayer.play(5);&lt;br /&gt;
  &lt;br /&gt;
  // Animation de victoire spectaculaire&lt;br /&gt;
  // Vague de lumière rapide&lt;br /&gt;
  for (int j = 0; j &amp;lt; 8; j++) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
      delay(60);&lt;br /&gt;
      digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Clignotement final toutes ensemble&lt;br /&gt;
  for (int j = 0; j &amp;lt; 4; j++) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
    }&lt;br /&gt;
    delay(200);&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
    }&lt;br /&gt;
    delay(200);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\n═══════════════════════════════════&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot; Ajustez le potentiomètre pour&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot; changer de difficulté&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot; Appuyez sur un bouton pour rejouer&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void startupAnimation() {&lt;br /&gt;
  Serial.println(&amp;quot;\nAnimation de démarrage...\n&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Allumage séquentiel&lt;br /&gt;
  for (int j = 0; j &amp;lt; 2; j++) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
      delay(100);&lt;br /&gt;
    }&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
      delay(100);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Flash final&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
  }&lt;br /&gt;
  delay(300);&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Effet feu de bois pour le ruban LED&lt;br /&gt;
void updateFireEffect() {&lt;br /&gt;
  unsigned long currentTime = millis();&lt;br /&gt;
  &lt;br /&gt;
  // Mettre à jour seulement toutes les FIRE_UPDATE_INTERVAL ms&lt;br /&gt;
  if (currentTime - lastFireUpdate &amp;lt; FIRE_UPDATE_INTERVAL) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  lastFireUpdate = currentTime;&lt;br /&gt;
  &lt;br /&gt;
  // Refroidissement: chaque cellule perd un peu de chaleur&lt;br /&gt;
  for (int i = 0; i &amp;lt; NUM_LEDS; i++) {&lt;br /&gt;
    int cooldown = random(0, ((55 * 10) / NUM_LEDS) + 2);&lt;br /&gt;
    if (cooldown &amp;gt;= heat[i]) {&lt;br /&gt;
      heat[i] = 0;&lt;br /&gt;
    } else {&lt;br /&gt;
      heat[i] = heat[i] - cooldown;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Diffusion de chaleur vers le haut&lt;br /&gt;
  for (int k = NUM_LEDS - 1; k &amp;gt;= 2; k--) {&lt;br /&gt;
    heat[k] = (heat[k - 1] + heat[k - 2] + heat[k - 2]) / 3;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Ajout de nouvelles étincelles aléatoires en bas&lt;br /&gt;
  if (random(255) &amp;lt; 120) {&lt;br /&gt;
    int y = random(7);&lt;br /&gt;
    heat[y] = heat[y] + random(160, 255);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Conversion de la chaleur en couleurs&lt;br /&gt;
  for (int j = 0; j &amp;lt; NUM_LEDS; j++) {&lt;br /&gt;
    // Palette de couleurs feu: noir → rouge → orange → jaune → blanc&lt;br /&gt;
    byte temperature = heat[j];&lt;br /&gt;
    &lt;br /&gt;
    // Noir → Rouge foncé&lt;br /&gt;
    byte t192 = scale8_video(temperature, 191);&lt;br /&gt;
    byte heatramp = t192 &amp;amp; 0x3F; // 0..63&lt;br /&gt;
    heatramp &amp;lt;&amp;lt;= 2; // 0..252&lt;br /&gt;
    &lt;br /&gt;
    if (t192 &amp;amp; 0x80) {&lt;br /&gt;
      // Partie la plus chaude - jaune vers blanc&lt;br /&gt;
      leds[j].r = 255;&lt;br /&gt;
      leds[j].g = 255;&lt;br /&gt;
      leds[j].b = heatramp;&lt;br /&gt;
    } else if (t192 &amp;amp; 0x40) {&lt;br /&gt;
      // Partie chaude - rouge vers jaune&lt;br /&gt;
      leds[j].r = 255;&lt;br /&gt;
      leds[j].g = heatramp;&lt;br /&gt;
      leds[j].b = 0;&lt;br /&gt;
    } else {&lt;br /&gt;
      // Partie froide - noir vers rouge&lt;br /&gt;
      leds[j].r = heatramp;&lt;br /&gt;
      leds[j].g = 0;&lt;br /&gt;
      leds[j].b = 0;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  FastLED.show();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Lire le potentiomètre et déterminer la difficulté&lt;br /&gt;
void readDifficulty() {&lt;br /&gt;
  int potValue = analogRead(POTENTIOMETER_PIN);  // 0-4095 sur ESP32&lt;br /&gt;
  &lt;br /&gt;
  // Diviser en 3 zones&lt;br /&gt;
  if (potValue &amp;lt; 1365) {&lt;br /&gt;
    // Zone 1: FACILE (0-1365)&lt;br /&gt;
    currentDifficulty = EASY;&lt;br /&gt;
    maxLevels = 3;&lt;br /&gt;
  } else if (potValue &amp;lt; 2730) {&lt;br /&gt;
    // Zone 2: MOYEN (1365-2730)&lt;br /&gt;
    currentDifficulty = MEDIUM;&lt;br /&gt;
    maxLevels = 4;&lt;br /&gt;
  } else {&lt;br /&gt;
    // Zone 3: DIFFICILE (2730-4095)&lt;br /&gt;
    currentDifficulty = HARD;&lt;br /&gt;
    maxLevels = 6;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Afficher la difficulté actuelle&lt;br /&gt;
void printDifficulty() {&lt;br /&gt;
  switch(currentDifficulty) {&lt;br /&gt;
    case EASY:&lt;br /&gt;
      Serial.print(&amp;quot;FACILE (3 niveaux)&amp;quot;);&lt;br /&gt;
      break;&lt;br /&gt;
    case MEDIUM:&lt;br /&gt;
      Serial.print(&amp;quot;MOYEN (4 niveaux)&amp;quot;);&lt;br /&gt;
      break;&lt;br /&gt;
    case HARD:&lt;br /&gt;
      Serial.print(&amp;quot;DIFFICILE (6 niveaux)&amp;quot;);&lt;br /&gt;
      break;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Conception des boutons &amp;lt;br&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
- Au départ : Bouton lumineux rouge à disposition, le problème est qu'il faut plusieurs couleurs. Alors nous changeons de couleur de la led et voulons remplacer l'opercule rouge par du plexiglass, cependant cela ne se colle pas au bouton. &amp;lt;br&amp;gt;&lt;br /&gt;
- Alors : Nous avons pris des boutons plus petit de plusieurs couleur (rouge, bleu, vert et jaune). Pour les rendre plus grands, nous avons décider de couper du plexiglass en plusieurs formes : bonhomme de neige, sapin, renne, et pain d'épice, nous avons laissé un trou (de 27mm de diamètre) dans chacune des formes afin de mettre les boutons dedans. Le fichier prototype a été réalisé avec inkscape et la découpe avec une découpeuse laser. &amp;lt;br&amp;gt;&lt;br /&gt;
- Pour finir, nous avons rajouté du vinyl de la même couleur que les boutons pour les rendre plus visible sur la cheminée.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Prototype design bouton &amp;lt;br&amp;gt; ==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Fichier:Prototypes Boutons .pdf&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Galère &amp;lt;br&amp;gt;== &lt;br /&gt;
&lt;br /&gt;
11h50, jeu de lumiere marche pas, on retourne à l'ancienne version&lt;br /&gt;
&lt;br /&gt;
==premier diaporama : Alors ? Comment ça se passe ?==&lt;br /&gt;
Diaporama type '''Alors ?''': [[media:DiaporamaSuperBrest2024-Alors.odp|Téléchargez et adaptez-le !]]&lt;br /&gt;
&lt;br /&gt;
==second diaporama : Et voilà !==&lt;br /&gt;
Diaporama type '''Et Voilà !''' : [[media:DiaporamaSuperBrest2024-EtVoila.odp|Téléchargez et adaptez-le !]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Sciencehackdaybrest]]&lt;br /&gt;
[[Catégorie:Super Brest]]&lt;br /&gt;
[[Catégorie:Super Brest 2025]]&lt;/div&gt;</summary>
		<author><name>Emma</name></author>	</entry>

	<entry>
		<id>http://wiki.lesfabriquesduponant.net/index.php?title=Super_Brest_2025_:_L%27%C3%A9trange_no%C3%ABl_de_monsieur_Simon&amp;diff=35387</id>
		<title>Super Brest 2025 : L'étrange noël de monsieur Simon</title>
		<link rel="alternate" type="text/html" href="http://wiki.lesfabriquesduponant.net/index.php?title=Super_Brest_2025_:_L%27%C3%A9trange_no%C3%ABl_de_monsieur_Simon&amp;diff=35387"/>
				<updated>2025-11-30T11:12:48Z</updated>
		
		<summary type="html">&lt;p&gt;Emma : /* Prototype design bouton  */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Fichier:SuperBrest2025-BADGE.png|200px]]&lt;br /&gt;
&lt;br /&gt;
==résumé du projet==&lt;br /&gt;
Ce hackathon a pour objectif d'adapter le jeu Simon (mémoire des couleurs/sons) en l'adaptant spécifiquement pour la fête de Noël de l'école.&lt;br /&gt;
&lt;br /&gt;
Le projet consiste à :&lt;br /&gt;
&lt;br /&gt;
Utiliser une cheminée existante pour le jeu.&lt;br /&gt;
&lt;br /&gt;
Programmer l'électronique Arduino pour simuler les lumières et les sons de Simon.&lt;br /&gt;
&lt;br /&gt;
Intégrer une thématique Noël (couleurs/sons festifs) pour créer une animation ludique et éducative qui met en avant la créativité.&lt;br /&gt;
&lt;br /&gt;
==membres du projet==&lt;br /&gt;
&lt;br /&gt;
Audrey : Ailée créature &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Emma : Magique arc en ciel &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ewen: Magic flocon &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Syrielle: Espiegle corne &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nadia : Divinité flamboyante &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Bibliographie et webographie sur le projet==&lt;br /&gt;
[[https://www.wiki.lesfabriquesduponant.net/index.php?title=ENIB_2022_-_groupe_A_:_Simon]]&lt;br /&gt;
https://fr.wikipedia.org/wiki/Simon_(jeu)&lt;br /&gt;
==banque d'images==&lt;br /&gt;
[[Fichier:E3F3D4A8-ECC8-40C8-9B21-032B27D7E458 2.jpg|200Pxpx|vignette|centré]]&lt;br /&gt;
&lt;br /&gt;
==prototype qu'on souhaite réaliser ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Prototype simon.jpg|vignette|centré]]&lt;br /&gt;
&lt;br /&gt;
==Schema de cablage==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capture d’écran 2025-11-29 à 15.42.22.png|vignette|centré|schema de cablage]]&lt;br /&gt;
&lt;br /&gt;
==Programme arduino==&lt;br /&gt;
&lt;br /&gt;
Le code à ete crée par l'IA claude , voici le prompt : &amp;lt;br&amp;gt;&lt;br /&gt;
Crée un jeu Simon pour ESP32 avec :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- 4 boutons/LEDs (Rouge/GPIO12-25, Jaune/GPIO13-26, Vert/GPIO14-27, Bleu/GPIO15-33)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- DFPlayer Mini sur GPIO16-17 avec 6 sons Noël (0001-0006.mp3)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Ruban LED WS2812B 144 LEDs sur GPIO32 avec effet feu continu&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Potentiomètre GPIO34 pour 3 difficultés (3/4/6 niveaux)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Son 0005.mp3 pour victoire totale, 0006.mp3 pour échec immédiat&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Bibliothèques : DFRobotDFPlayerMini + FastLED&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Arduino&amp;quot; line&amp;gt;/*&lt;br /&gt;
 * JEU SIMON COMPLET - ESP32 + DFPlayer Mini + Ruban LED Feu&lt;br /&gt;
 * &lt;br /&gt;
 * Câblage:&lt;br /&gt;
 * ─────────────────────────────────────────────&lt;br /&gt;
 * DFPlayer Mini:&lt;br /&gt;
 *   - RX      → GPIO 17 (TX ESP32) + résistance 1kΩ&lt;br /&gt;
 *   - TX      → GPIO 16 (RX ESP32)&lt;br /&gt;
 *   - VCC     → 5V&lt;br /&gt;
 *   - GND     → GND&lt;br /&gt;
 *   - SPK_1/2 → Haut-parleur 3W (4-8Ω)&lt;br /&gt;
 * &lt;br /&gt;
 * 4 Boutons (avec pull-up interne):&lt;br /&gt;
 *   - Bouton ROUGE  → GPIO 12 → GND&lt;br /&gt;
 *   - Bouton VERT   → GPIO 13 → GND&lt;br /&gt;
 *   - Bouton BLEU   → GPIO 14 → GND&lt;br /&gt;
 *   - Bouton JAUNE  → GPIO 15 → GND&lt;br /&gt;
 * &lt;br /&gt;
 * 4 LEDs (avec résistances 220Ω):&lt;br /&gt;
 *   - LED ROUGE  → GPIO 25 → Résistance → GND&lt;br /&gt;
 *   - LED VERTE  → GPIO 26 → Résistance → GND&lt;br /&gt;
 *   - LED BLEUE  → GPIO 27 → Résistance → GND&lt;br /&gt;
 *   - LED JAUNE  → GPIO 33 → Résistance → GND&lt;br /&gt;
 * &lt;br /&gt;
 * Ruban LED (WS2812B - 144 LEDs):&lt;br /&gt;
 *   - DATA → GPIO 32&lt;br /&gt;
 *   - VCC  → 5V (alimentation externe recommandée si &amp;gt;30 LEDs)&lt;br /&gt;
 *   - GND  → GND (commun avec ESP32)&lt;br /&gt;
 * &lt;br /&gt;
 * Potentiomètre (sélection difficulté):&lt;br /&gt;
 *   - Broche gauche  → GND&lt;br /&gt;
 *   - Broche centrale → GPIO 34 (ADC)&lt;br /&gt;
 *   - Broche droite   → 3.3V&lt;br /&gt;
 * &lt;br /&gt;
 * Fichiers MP3 sur carte SD (FAT32):&lt;br /&gt;
 *   - 0001.mp3 : Son bouton ROUGE&lt;br /&gt;
 *   - 0002.mp3 : Son bouton JAUNE&lt;br /&gt;
 *   - 0003.mp3 : Son bouton VERT&lt;br /&gt;
 *   - 0004.mp3 : Son bouton BLEU&lt;br /&gt;
 *   - 0005.mp3 : Son VICTOIRE (après 5 niveaux réussis)&lt;br /&gt;
 *   - 0006.mp3 : Son ÉCHEC (erreur dans la séquence)&lt;br /&gt;
 * &lt;br /&gt;
 * IMPORTANT: Installez la bibliothèque FastLED&lt;br /&gt;
 * (Croquis → Inclure une bibliothèque → Gérer les bibliothèques → FastLED)&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;DFRobotDFPlayerMini.h&amp;gt;&lt;br /&gt;
#include &amp;lt;FastLED.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// Configuration DFPlayer&lt;br /&gt;
HardwareSerial mySoftwareSerial(2);&lt;br /&gt;
DFRobotDFPlayerMini myDFPlayer;&lt;br /&gt;
&lt;br /&gt;
// Configuration Ruban LED&lt;br /&gt;
#define LED_STRIP_PIN 32&lt;br /&gt;
#define NUM_LEDS 144&lt;br /&gt;
#define LED_TYPE WS2812B&lt;br /&gt;
#define COLOR_ORDER GRB&lt;br /&gt;
CRGB leds[NUM_LEDS];&lt;br /&gt;
&lt;br /&gt;
// Configuration Potentiomètre (sélection difficulté)&lt;br /&gt;
#define POTENTIOMETER_PIN 34  // GPIO 34 (ADC1_CH6)&lt;br /&gt;
&lt;br /&gt;
// Niveaux de difficulté&lt;br /&gt;
enum Difficulty {&lt;br /&gt;
  EASY = 0,    // 3 niveaux&lt;br /&gt;
  MEDIUM = 1,  // 4 niveaux&lt;br /&gt;
  HARD = 2     // 6 niveaux&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Difficulty currentDifficulty = MEDIUM;&lt;br /&gt;
int maxLevels = 4;  // Par défaut moyen&lt;br /&gt;
&lt;br /&gt;
// Configuration des pins boutons et LEDs&lt;br /&gt;
const int BUTTON_PINS[4] = {12, 13, 14, 15};  // Rouge, Jaune, Vert, Bleu&lt;br /&gt;
const int LED_PINS[4] = {25, 26, 27, 33};     // Rouge, Jaune, Vert, Bleu&lt;br /&gt;
&lt;br /&gt;
// Noms des couleurs pour l'affichage&lt;br /&gt;
const char* COLOR_NAMES[4] = {&amp;quot;ROUGE&amp;quot;, &amp;quot;JAUNE&amp;quot;, &amp;quot;VERT&amp;quot;, &amp;quot;BLEU&amp;quot;};&lt;br /&gt;
&lt;br /&gt;
// Correspondance couleur -&amp;gt; numéro de son&lt;br /&gt;
const int COLOR_TO_SOUND[4] = {1, 2, 3, 4};  // Rouge=1, Jaune=2, Vert=3, Bleu=4&lt;br /&gt;
&lt;br /&gt;
// Variables du jeu&lt;br /&gt;
int sequence[100];              // Séquence à mémoriser (max 100 niveaux)&lt;br /&gt;
int sequenceLength = 0;         // Longueur actuelle de la séquence&lt;br /&gt;
int playerInput[100];           // Saisie du joueur&lt;br /&gt;
int playerIndex = 0;            // Position dans la saisie&lt;br /&gt;
int level = 1;                  // Niveau actuel&lt;br /&gt;
bool gameActive = false;        // Jeu en cours&lt;br /&gt;
bool waitingForInput = false;   // En attente de la saisie du joueur&lt;br /&gt;
&lt;br /&gt;
// Débounce des boutons&lt;br /&gt;
unsigned long lastButtonPress[4] = {0, 0, 0, 0};&lt;br /&gt;
const unsigned long DEBOUNCE_DELAY = 250;&lt;br /&gt;
&lt;br /&gt;
// Timings du jeu (en millisecondes)&lt;br /&gt;
const int FLASH_DURATION = 500;      // Durée d'allumage d'une LED&lt;br /&gt;
const int PAUSE_BETWEEN_FLASH = 200; // Pause entre deux LEDs&lt;br /&gt;
const int DELAY_AFTER_SEQUENCE = 500;// Délai avant que le joueur joue&lt;br /&gt;
&lt;br /&gt;
// Variables pour l'effet feu&lt;br /&gt;
byte heat[NUM_LEDS];&lt;br /&gt;
unsigned long lastFireUpdate = 0;&lt;br /&gt;
const int FIRE_UPDATE_INTERVAL = 50; // Mise à jour toutes les 50ms&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(115200);&lt;br /&gt;
  delay(1000);&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\n╔═══════════════════════════════════╗&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;║      JEU SIMON - ESP32            ║&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;╚═══════════════════════════════════╝\n&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Configuration des boutons&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    pinMode(BUTTON_PINS[i], INPUT_PULLUP);&lt;br /&gt;
  }&lt;br /&gt;
  Serial.println(&amp;quot;✓ Boutons configurés&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Configuration des LEDs&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    pinMode(LED_PINS[i], OUTPUT);&lt;br /&gt;
    digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
  }&lt;br /&gt;
  Serial.println(&amp;quot;✓ LEDs configurées&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Configuration du ruban LED&lt;br /&gt;
  FastLED.addLeds&amp;lt;LED_TYPE, LED_STRIP_PIN, COLOR_ORDER&amp;gt;(leds, NUM_LEDS);&lt;br /&gt;
  FastLED.setBrightness(100); // Luminosité (0-255)&lt;br /&gt;
  FastLED.clear();&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
  Serial.println(&amp;quot;✓ Ruban LED configuré (144 LEDs)&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Configuration du potentiomètre&lt;br /&gt;
  pinMode(POTENTIOMETER_PIN, INPUT);&lt;br /&gt;
  Serial.println(&amp;quot;✓ Potentiomètre configuré sur GPIO 34&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Lire la difficulté initiale&lt;br /&gt;
  readDifficulty();&lt;br /&gt;
  &lt;br /&gt;
  // Configuration DFPlayer&lt;br /&gt;
  mySoftwareSerial.begin(9600, SERIAL_8N1, 16, 17);&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\nInitialisation du DFPlayer...&amp;quot;);&lt;br /&gt;
  if (!myDFPlayer.begin(mySoftwareSerial)) {&lt;br /&gt;
    Serial.println(&amp;quot;\n✗ ERREUR DFPlayer!&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;Vérifiez:&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;  - Carte SD insérée (FAT32)&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;  - Fichiers 0001.mp3 à 0006.mp3&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;  - Connexions RX/TX&amp;quot;);&lt;br /&gt;
    while(true) { delay(1000); }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;✓ DFPlayer OK!&amp;quot;);&lt;br /&gt;
  myDFPlayer.volume(25);  // Volume (0-30)&lt;br /&gt;
  delay(100);&lt;br /&gt;
  &lt;br /&gt;
  // Animation de démarrage&lt;br /&gt;
  startupAnimation();&lt;br /&gt;
  &lt;br /&gt;
  // Initialiser le générateur aléatoire&lt;br /&gt;
  randomSeed(analogRead(0));&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\n═══════════════════════════════════&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;  DIFFICULTÉ SÉLECTIONNÉE:&amp;quot;);&lt;br /&gt;
  printDifficulty();&lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;   Appuyez sur un bouton pour&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;        commencer le jeu!&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  // Mettre à jour l'effet feu en continu&lt;br /&gt;
  updateFireEffect();&lt;br /&gt;
  &lt;br /&gt;
  if (!gameActive) {&lt;br /&gt;
    // Attendre qu'un bouton soit pressé pour démarrer&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      if (digitalRead(BUTTON_PINS[i]) == LOW) {&lt;br /&gt;
        delay(300);&lt;br /&gt;
        startNewGame();&lt;br /&gt;
        break;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  } else if (waitingForInput) {&lt;br /&gt;
    checkPlayerInput();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void startNewGame() {&lt;br /&gt;
  // Lire la difficulté au début de chaque partie&lt;br /&gt;
  readDifficulty();&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\n╔═══════════════════════════════════╗&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;║      NOUVELLE PARTIE              ║&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;╚═══════════════════════════════════╝&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;\n  Difficulté: &amp;quot;);&lt;br /&gt;
  printDifficulty();&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  &lt;br /&gt;
  gameActive = true;&lt;br /&gt;
  level = 1;&lt;br /&gt;
  sequenceLength = 0;&lt;br /&gt;
  &lt;br /&gt;
  delay(1000);&lt;br /&gt;
  nextLevel();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void nextLevel() {&lt;br /&gt;
  Serial.println(&amp;quot;─────────────────────────────────────&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;         NIVEAU &amp;quot;);&lt;br /&gt;
  Serial.print(level);&lt;br /&gt;
  Serial.print(&amp;quot; / &amp;quot;);&lt;br /&gt;
  Serial.println(maxLevels);&lt;br /&gt;
  Serial.println(&amp;quot;─────────────────────────────────────\n&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Ajouter une couleur aléatoire à la séquence&lt;br /&gt;
  sequence[sequenceLength] = random(0, 4);&lt;br /&gt;
  sequenceLength++;&lt;br /&gt;
  &lt;br /&gt;
  delay(1000);&lt;br /&gt;
  &lt;br /&gt;
  // Afficher la séquence au joueur&lt;br /&gt;
  playSequence();&lt;br /&gt;
  &lt;br /&gt;
  // Attendre la saisie du joueur&lt;br /&gt;
  playerIndex = 0;&lt;br /&gt;
  waitingForInput = true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void playSequence() {&lt;br /&gt;
  Serial.println(&amp;quot;👀 Mémorisez la séquence:\n&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  for (int i = 0; i &amp;lt; sequenceLength; i++) {&lt;br /&gt;
    int color = sequence[i];&lt;br /&gt;
    &lt;br /&gt;
    Serial.print(&amp;quot;   &amp;quot;);&lt;br /&gt;
    Serial.print(i + 1);&lt;br /&gt;
    Serial.print(&amp;quot;. &amp;quot;);&lt;br /&gt;
    Serial.println(COLOR_NAMES[color]);&lt;br /&gt;
    &lt;br /&gt;
    // Allumer la LED et jouer le son&lt;br /&gt;
    digitalWrite(LED_PINS[color], HIGH);&lt;br /&gt;
    myDFPlayer.play(COLOR_TO_SOUND[color]);  // Rouge=1, Jaune=2, Vert=3, Bleu=4&lt;br /&gt;
    &lt;br /&gt;
    delay(FLASH_DURATION);&lt;br /&gt;
    &lt;br /&gt;
    // Éteindre la LED&lt;br /&gt;
    digitalWrite(LED_PINS[color], LOW);&lt;br /&gt;
    &lt;br /&gt;
    // Pause entre les flashs&lt;br /&gt;
    if (i &amp;lt; sequenceLength - 1) {&lt;br /&gt;
      delay(PAUSE_BETWEEN_FLASH);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  delay(DELAY_AFTER_SEQUENCE);&lt;br /&gt;
  Serial.println(&amp;quot;\n🎮 À vous de jouer!\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void checkPlayerInput() {&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    if (digitalRead(BUTTON_PINS[i]) == LOW) {&lt;br /&gt;
      unsigned long currentTime = millis();&lt;br /&gt;
      &lt;br /&gt;
      // Débounce&lt;br /&gt;
      if (currentTime - lastButtonPress[i] &amp;gt; DEBOUNCE_DELAY) {&lt;br /&gt;
        lastButtonPress[i] = currentTime;&lt;br /&gt;
        &lt;br /&gt;
        // Feedback visuel et sonore&lt;br /&gt;
        digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
        myDFPlayer.play(COLOR_TO_SOUND[i]);  // Jouer le son correspondant&lt;br /&gt;
        &lt;br /&gt;
        Serial.print(&amp;quot;   → &amp;quot;);&lt;br /&gt;
        Serial.println(COLOR_NAMES[i]);&lt;br /&gt;
        &lt;br /&gt;
        // Enregistrer la saisie&lt;br /&gt;
        playerInput[playerIndex] = i;&lt;br /&gt;
        &lt;br /&gt;
        delay(300);&lt;br /&gt;
        digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
        &lt;br /&gt;
        // Vérifier si c'est correct&lt;br /&gt;
        if (playerInput[playerIndex] != sequence[playerIndex]) {&lt;br /&gt;
          gameLost();&lt;br /&gt;
          return;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        playerIndex++;&lt;br /&gt;
        &lt;br /&gt;
        // Vérifier si la séquence complète est correcte&lt;br /&gt;
        if (playerIndex &amp;gt;= sequenceLength) {&lt;br /&gt;
          sequenceComplete();&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void sequenceComplete() {&lt;br /&gt;
  Serial.println(&amp;quot;\n✅ Séquence correcte!\n&amp;quot;);&lt;br /&gt;
  waitingForInput = false;&lt;br /&gt;
  &lt;br /&gt;
  level++;&lt;br /&gt;
  &lt;br /&gt;
  // Vérifier si on a atteint le niveau maximum selon la difficulté&lt;br /&gt;
  if (level &amp;gt; maxLevels) {&lt;br /&gt;
    gameWon();&lt;br /&gt;
  } else {&lt;br /&gt;
    delay(500);&lt;br /&gt;
    &lt;br /&gt;
    // Animation de succès (rapide entre chaque niveau)&lt;br /&gt;
    for (int j = 0; j &amp;lt; 2; j++) {&lt;br /&gt;
      for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
        digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
      }&lt;br /&gt;
      delay(100);&lt;br /&gt;
      for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
        digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
      }&lt;br /&gt;
      delay(100);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    delay(1000);&lt;br /&gt;
    nextLevel();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void gameLost() {&lt;br /&gt;
  Serial.println(&amp;quot;\n╔═══════════════════════════════════╗&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;║          ❌ ERREUR!               ║&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;╚═══════════════════════════════════╝&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;\n   Vous étiez au niveau &amp;quot;);&lt;br /&gt;
  Serial.println(level);&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  &lt;br /&gt;
  waitingForInput = false;&lt;br /&gt;
  gameActive = false;&lt;br /&gt;
  &lt;br /&gt;
  // Son d'échec (0006.mp3)&lt;br /&gt;
  myDFPlayer.play(6);&lt;br /&gt;
  &lt;br /&gt;
  // Animation d'échec (clignotement rapide)&lt;br /&gt;
  for (int j = 0; j &amp;lt; 5; j++) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
    }&lt;br /&gt;
    delay(150);&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
    }&lt;br /&gt;
    delay(150);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot; Appuyez sur un bouton pour rejouer&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void gameWon() {&lt;br /&gt;
  Serial.println(&amp;quot;\n╔═══════════════════════════════════╗&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;║      🎉 VICTOIRE! 🎉              ║&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;╚═══════════════════════════════════╝&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;\n  Vous avez réussi les &amp;quot;);&lt;br /&gt;
  Serial.print(maxLevels);&lt;br /&gt;
  Serial.println(&amp;quot; niveaux!&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;  Difficulté: &amp;quot;);&lt;br /&gt;
  printDifficulty();&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  &lt;br /&gt;
  gameActive = false;&lt;br /&gt;
  &lt;br /&gt;
  // Son de victoire (0005.mp3)&lt;br /&gt;
  myDFPlayer.play(5);&lt;br /&gt;
  &lt;br /&gt;
  // Animation de victoire spectaculaire&lt;br /&gt;
  // Vague de lumière rapide&lt;br /&gt;
  for (int j = 0; j &amp;lt; 8; j++) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
      delay(60);&lt;br /&gt;
      digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Clignotement final toutes ensemble&lt;br /&gt;
  for (int j = 0; j &amp;lt; 4; j++) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
    }&lt;br /&gt;
    delay(200);&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
    }&lt;br /&gt;
    delay(200);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\n═══════════════════════════════════&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot; Ajustez le potentiomètre pour&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot; changer de difficulté&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot; Appuyez sur un bouton pour rejouer&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void startupAnimation() {&lt;br /&gt;
  Serial.println(&amp;quot;\nAnimation de démarrage...\n&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Allumage séquentiel&lt;br /&gt;
  for (int j = 0; j &amp;lt; 2; j++) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
      delay(100);&lt;br /&gt;
    }&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
      delay(100);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Flash final&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
  }&lt;br /&gt;
  delay(300);&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Effet feu de bois pour le ruban LED&lt;br /&gt;
void updateFireEffect() {&lt;br /&gt;
  unsigned long currentTime = millis();&lt;br /&gt;
  &lt;br /&gt;
  // Mettre à jour seulement toutes les FIRE_UPDATE_INTERVAL ms&lt;br /&gt;
  if (currentTime - lastFireUpdate &amp;lt; FIRE_UPDATE_INTERVAL) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  lastFireUpdate = currentTime;&lt;br /&gt;
  &lt;br /&gt;
  // Refroidissement: chaque cellule perd un peu de chaleur&lt;br /&gt;
  for (int i = 0; i &amp;lt; NUM_LEDS; i++) {&lt;br /&gt;
    int cooldown = random(0, ((55 * 10) / NUM_LEDS) + 2);&lt;br /&gt;
    if (cooldown &amp;gt;= heat[i]) {&lt;br /&gt;
      heat[i] = 0;&lt;br /&gt;
    } else {&lt;br /&gt;
      heat[i] = heat[i] - cooldown;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Diffusion de chaleur vers le haut&lt;br /&gt;
  for (int k = NUM_LEDS - 1; k &amp;gt;= 2; k--) {&lt;br /&gt;
    heat[k] = (heat[k - 1] + heat[k - 2] + heat[k - 2]) / 3;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Ajout de nouvelles étincelles aléatoires en bas&lt;br /&gt;
  if (random(255) &amp;lt; 120) {&lt;br /&gt;
    int y = random(7);&lt;br /&gt;
    heat[y] = heat[y] + random(160, 255);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Conversion de la chaleur en couleurs&lt;br /&gt;
  for (int j = 0; j &amp;lt; NUM_LEDS; j++) {&lt;br /&gt;
    // Palette de couleurs feu: noir → rouge → orange → jaune → blanc&lt;br /&gt;
    byte temperature = heat[j];&lt;br /&gt;
    &lt;br /&gt;
    // Noir → Rouge foncé&lt;br /&gt;
    byte t192 = scale8_video(temperature, 191);&lt;br /&gt;
    byte heatramp = t192 &amp;amp; 0x3F; // 0..63&lt;br /&gt;
    heatramp &amp;lt;&amp;lt;= 2; // 0..252&lt;br /&gt;
    &lt;br /&gt;
    if (t192 &amp;amp; 0x80) {&lt;br /&gt;
      // Partie la plus chaude - jaune vers blanc&lt;br /&gt;
      leds[j].r = 255;&lt;br /&gt;
      leds[j].g = 255;&lt;br /&gt;
      leds[j].b = heatramp;&lt;br /&gt;
    } else if (t192 &amp;amp; 0x40) {&lt;br /&gt;
      // Partie chaude - rouge vers jaune&lt;br /&gt;
      leds[j].r = 255;&lt;br /&gt;
      leds[j].g = heatramp;&lt;br /&gt;
      leds[j].b = 0;&lt;br /&gt;
    } else {&lt;br /&gt;
      // Partie froide - noir vers rouge&lt;br /&gt;
      leds[j].r = heatramp;&lt;br /&gt;
      leds[j].g = 0;&lt;br /&gt;
      leds[j].b = 0;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  FastLED.show();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Lire le potentiomètre et déterminer la difficulté&lt;br /&gt;
void readDifficulty() {&lt;br /&gt;
  int potValue = analogRead(POTENTIOMETER_PIN);  // 0-4095 sur ESP32&lt;br /&gt;
  &lt;br /&gt;
  // Diviser en 3 zones&lt;br /&gt;
  if (potValue &amp;lt; 1365) {&lt;br /&gt;
    // Zone 1: FACILE (0-1365)&lt;br /&gt;
    currentDifficulty = EASY;&lt;br /&gt;
    maxLevels = 3;&lt;br /&gt;
  } else if (potValue &amp;lt; 2730) {&lt;br /&gt;
    // Zone 2: MOYEN (1365-2730)&lt;br /&gt;
    currentDifficulty = MEDIUM;&lt;br /&gt;
    maxLevels = 4;&lt;br /&gt;
  } else {&lt;br /&gt;
    // Zone 3: DIFFICILE (2730-4095)&lt;br /&gt;
    currentDifficulty = HARD;&lt;br /&gt;
    maxLevels = 6;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Afficher la difficulté actuelle&lt;br /&gt;
void printDifficulty() {&lt;br /&gt;
  switch(currentDifficulty) {&lt;br /&gt;
    case EASY:&lt;br /&gt;
      Serial.print(&amp;quot;FACILE (3 niveaux)&amp;quot;);&lt;br /&gt;
      break;&lt;br /&gt;
    case MEDIUM:&lt;br /&gt;
      Serial.print(&amp;quot;MOYEN (4 niveaux)&amp;quot;);&lt;br /&gt;
      break;&lt;br /&gt;
    case HARD:&lt;br /&gt;
      Serial.print(&amp;quot;DIFFICILE (6 niveaux)&amp;quot;);&lt;br /&gt;
      break;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Conception des boutons &amp;lt;br&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
- Au départ : Bouton lumineux rouge à disposition, le problème est qu'il faut plusieurs couleurs. Alors nous changeons de couleur de la led et voulons remplacer l'opercule rouge par du plexiglass, cependant cela ne se colle pas au bouton. &amp;lt;br&amp;gt;&lt;br /&gt;
- Alors : Nous avons pris des boutons plus petit de plusieurs couleur (rouge, bleu, vert et jaune). Pour les rendre plus grands, nous avons décider de couper du plexiglass en plusieurs formes : bonhomme de neige, sapin, renne, et pain d'épice, nous avons laissé un trou (de 27mm de diamètre) dans chacune des formes afin de mettre les boutons dedans. Le fichier prototype a été réalisé avec inkscape et la découpe avec une découpeuse laser. &amp;lt;br&amp;gt;&lt;br /&gt;
- Pour finir, nous avons rajouté du vinyl de la même couleur que les boutons pour les rendre plus visible sur la cheminée.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Prototype design bouton &amp;lt;br&amp;gt; ==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Fichier:Prototypes Boutons .pdf&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==premier diaporama : Alors ? Comment ça se passe ?==&lt;br /&gt;
Diaporama type '''Alors ?''': [[media:DiaporamaSuperBrest2024-Alors.odp|Téléchargez et adaptez-le !]]&lt;br /&gt;
&lt;br /&gt;
==second diaporama : Et voilà !==&lt;br /&gt;
Diaporama type '''Et Voilà !''' : [[media:DiaporamaSuperBrest2024-EtVoila.odp|Téléchargez et adaptez-le !]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Sciencehackdaybrest]]&lt;br /&gt;
[[Catégorie:Super Brest]]&lt;br /&gt;
[[Catégorie:Super Brest 2025]]&lt;/div&gt;</summary>
		<author><name>Emma</name></author>	</entry>

	<entry>
		<id>http://wiki.lesfabriquesduponant.net/index.php?title=Super_Brest_2025_:_L%27%C3%A9trange_no%C3%ABl_de_monsieur_Simon&amp;diff=35386</id>
		<title>Super Brest 2025 : L'étrange noël de monsieur Simon</title>
		<link rel="alternate" type="text/html" href="http://wiki.lesfabriquesduponant.net/index.php?title=Super_Brest_2025_:_L%27%C3%A9trange_no%C3%ABl_de_monsieur_Simon&amp;diff=35386"/>
				<updated>2025-11-30T11:09:27Z</updated>
		
		<summary type="html">&lt;p&gt;Emma : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Fichier:SuperBrest2025-BADGE.png|200px]]&lt;br /&gt;
&lt;br /&gt;
==résumé du projet==&lt;br /&gt;
Ce hackathon a pour objectif d'adapter le jeu Simon (mémoire des couleurs/sons) en l'adaptant spécifiquement pour la fête de Noël de l'école.&lt;br /&gt;
&lt;br /&gt;
Le projet consiste à :&lt;br /&gt;
&lt;br /&gt;
Utiliser une cheminée existante pour le jeu.&lt;br /&gt;
&lt;br /&gt;
Programmer l'électronique Arduino pour simuler les lumières et les sons de Simon.&lt;br /&gt;
&lt;br /&gt;
Intégrer une thématique Noël (couleurs/sons festifs) pour créer une animation ludique et éducative qui met en avant la créativité.&lt;br /&gt;
&lt;br /&gt;
==membres du projet==&lt;br /&gt;
&lt;br /&gt;
Audrey : Ailée créature &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Emma : Magique arc en ciel &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ewen: Magic flocon &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Syrielle: Espiegle corne &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nadia : Divinité flamboyante &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Bibliographie et webographie sur le projet==&lt;br /&gt;
[[https://www.wiki.lesfabriquesduponant.net/index.php?title=ENIB_2022_-_groupe_A_:_Simon]]&lt;br /&gt;
https://fr.wikipedia.org/wiki/Simon_(jeu)&lt;br /&gt;
==banque d'images==&lt;br /&gt;
[[Fichier:E3F3D4A8-ECC8-40C8-9B21-032B27D7E458 2.jpg|200Pxpx|vignette|centré]]&lt;br /&gt;
&lt;br /&gt;
==prototype qu'on souhaite réaliser ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Prototype simon.jpg|vignette|centré]]&lt;br /&gt;
&lt;br /&gt;
==Schema de cablage==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capture d’écran 2025-11-29 à 15.42.22.png|vignette|centré|schema de cablage]]&lt;br /&gt;
&lt;br /&gt;
==Programme arduino==&lt;br /&gt;
&lt;br /&gt;
Le code à ete crée par l'IA claude , voici le prompt : &amp;lt;br&amp;gt;&lt;br /&gt;
Crée un jeu Simon pour ESP32 avec :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- 4 boutons/LEDs (Rouge/GPIO12-25, Jaune/GPIO13-26, Vert/GPIO14-27, Bleu/GPIO15-33)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- DFPlayer Mini sur GPIO16-17 avec 6 sons Noël (0001-0006.mp3)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Ruban LED WS2812B 144 LEDs sur GPIO32 avec effet feu continu&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Potentiomètre GPIO34 pour 3 difficultés (3/4/6 niveaux)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Son 0005.mp3 pour victoire totale, 0006.mp3 pour échec immédiat&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Bibliothèques : DFRobotDFPlayerMini + FastLED&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Arduino&amp;quot; line&amp;gt;/*&lt;br /&gt;
 * JEU SIMON COMPLET - ESP32 + DFPlayer Mini + Ruban LED Feu&lt;br /&gt;
 * &lt;br /&gt;
 * Câblage:&lt;br /&gt;
 * ─────────────────────────────────────────────&lt;br /&gt;
 * DFPlayer Mini:&lt;br /&gt;
 *   - RX      → GPIO 17 (TX ESP32) + résistance 1kΩ&lt;br /&gt;
 *   - TX      → GPIO 16 (RX ESP32)&lt;br /&gt;
 *   - VCC     → 5V&lt;br /&gt;
 *   - GND     → GND&lt;br /&gt;
 *   - SPK_1/2 → Haut-parleur 3W (4-8Ω)&lt;br /&gt;
 * &lt;br /&gt;
 * 4 Boutons (avec pull-up interne):&lt;br /&gt;
 *   - Bouton ROUGE  → GPIO 12 → GND&lt;br /&gt;
 *   - Bouton VERT   → GPIO 13 → GND&lt;br /&gt;
 *   - Bouton BLEU   → GPIO 14 → GND&lt;br /&gt;
 *   - Bouton JAUNE  → GPIO 15 → GND&lt;br /&gt;
 * &lt;br /&gt;
 * 4 LEDs (avec résistances 220Ω):&lt;br /&gt;
 *   - LED ROUGE  → GPIO 25 → Résistance → GND&lt;br /&gt;
 *   - LED VERTE  → GPIO 26 → Résistance → GND&lt;br /&gt;
 *   - LED BLEUE  → GPIO 27 → Résistance → GND&lt;br /&gt;
 *   - LED JAUNE  → GPIO 33 → Résistance → GND&lt;br /&gt;
 * &lt;br /&gt;
 * Ruban LED (WS2812B - 144 LEDs):&lt;br /&gt;
 *   - DATA → GPIO 32&lt;br /&gt;
 *   - VCC  → 5V (alimentation externe recommandée si &amp;gt;30 LEDs)&lt;br /&gt;
 *   - GND  → GND (commun avec ESP32)&lt;br /&gt;
 * &lt;br /&gt;
 * Potentiomètre (sélection difficulté):&lt;br /&gt;
 *   - Broche gauche  → GND&lt;br /&gt;
 *   - Broche centrale → GPIO 34 (ADC)&lt;br /&gt;
 *   - Broche droite   → 3.3V&lt;br /&gt;
 * &lt;br /&gt;
 * Fichiers MP3 sur carte SD (FAT32):&lt;br /&gt;
 *   - 0001.mp3 : Son bouton ROUGE&lt;br /&gt;
 *   - 0002.mp3 : Son bouton JAUNE&lt;br /&gt;
 *   - 0003.mp3 : Son bouton VERT&lt;br /&gt;
 *   - 0004.mp3 : Son bouton BLEU&lt;br /&gt;
 *   - 0005.mp3 : Son VICTOIRE (après 5 niveaux réussis)&lt;br /&gt;
 *   - 0006.mp3 : Son ÉCHEC (erreur dans la séquence)&lt;br /&gt;
 * &lt;br /&gt;
 * IMPORTANT: Installez la bibliothèque FastLED&lt;br /&gt;
 * (Croquis → Inclure une bibliothèque → Gérer les bibliothèques → FastLED)&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;DFRobotDFPlayerMini.h&amp;gt;&lt;br /&gt;
#include &amp;lt;FastLED.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// Configuration DFPlayer&lt;br /&gt;
HardwareSerial mySoftwareSerial(2);&lt;br /&gt;
DFRobotDFPlayerMini myDFPlayer;&lt;br /&gt;
&lt;br /&gt;
// Configuration Ruban LED&lt;br /&gt;
#define LED_STRIP_PIN 32&lt;br /&gt;
#define NUM_LEDS 144&lt;br /&gt;
#define LED_TYPE WS2812B&lt;br /&gt;
#define COLOR_ORDER GRB&lt;br /&gt;
CRGB leds[NUM_LEDS];&lt;br /&gt;
&lt;br /&gt;
// Configuration Potentiomètre (sélection difficulté)&lt;br /&gt;
#define POTENTIOMETER_PIN 34  // GPIO 34 (ADC1_CH6)&lt;br /&gt;
&lt;br /&gt;
// Niveaux de difficulté&lt;br /&gt;
enum Difficulty {&lt;br /&gt;
  EASY = 0,    // 3 niveaux&lt;br /&gt;
  MEDIUM = 1,  // 4 niveaux&lt;br /&gt;
  HARD = 2     // 6 niveaux&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Difficulty currentDifficulty = MEDIUM;&lt;br /&gt;
int maxLevels = 4;  // Par défaut moyen&lt;br /&gt;
&lt;br /&gt;
// Configuration des pins boutons et LEDs&lt;br /&gt;
const int BUTTON_PINS[4] = {12, 13, 14, 15};  // Rouge, Jaune, Vert, Bleu&lt;br /&gt;
const int LED_PINS[4] = {25, 26, 27, 33};     // Rouge, Jaune, Vert, Bleu&lt;br /&gt;
&lt;br /&gt;
// Noms des couleurs pour l'affichage&lt;br /&gt;
const char* COLOR_NAMES[4] = {&amp;quot;ROUGE&amp;quot;, &amp;quot;JAUNE&amp;quot;, &amp;quot;VERT&amp;quot;, &amp;quot;BLEU&amp;quot;};&lt;br /&gt;
&lt;br /&gt;
// Correspondance couleur -&amp;gt; numéro de son&lt;br /&gt;
const int COLOR_TO_SOUND[4] = {1, 2, 3, 4};  // Rouge=1, Jaune=2, Vert=3, Bleu=4&lt;br /&gt;
&lt;br /&gt;
// Variables du jeu&lt;br /&gt;
int sequence[100];              // Séquence à mémoriser (max 100 niveaux)&lt;br /&gt;
int sequenceLength = 0;         // Longueur actuelle de la séquence&lt;br /&gt;
int playerInput[100];           // Saisie du joueur&lt;br /&gt;
int playerIndex = 0;            // Position dans la saisie&lt;br /&gt;
int level = 1;                  // Niveau actuel&lt;br /&gt;
bool gameActive = false;        // Jeu en cours&lt;br /&gt;
bool waitingForInput = false;   // En attente de la saisie du joueur&lt;br /&gt;
&lt;br /&gt;
// Débounce des boutons&lt;br /&gt;
unsigned long lastButtonPress[4] = {0, 0, 0, 0};&lt;br /&gt;
const unsigned long DEBOUNCE_DELAY = 250;&lt;br /&gt;
&lt;br /&gt;
// Timings du jeu (en millisecondes)&lt;br /&gt;
const int FLASH_DURATION = 500;      // Durée d'allumage d'une LED&lt;br /&gt;
const int PAUSE_BETWEEN_FLASH = 200; // Pause entre deux LEDs&lt;br /&gt;
const int DELAY_AFTER_SEQUENCE = 500;// Délai avant que le joueur joue&lt;br /&gt;
&lt;br /&gt;
// Variables pour l'effet feu&lt;br /&gt;
byte heat[NUM_LEDS];&lt;br /&gt;
unsigned long lastFireUpdate = 0;&lt;br /&gt;
const int FIRE_UPDATE_INTERVAL = 50; // Mise à jour toutes les 50ms&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(115200);&lt;br /&gt;
  delay(1000);&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\n╔═══════════════════════════════════╗&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;║      JEU SIMON - ESP32            ║&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;╚═══════════════════════════════════╝\n&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Configuration des boutons&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    pinMode(BUTTON_PINS[i], INPUT_PULLUP);&lt;br /&gt;
  }&lt;br /&gt;
  Serial.println(&amp;quot;✓ Boutons configurés&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Configuration des LEDs&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    pinMode(LED_PINS[i], OUTPUT);&lt;br /&gt;
    digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
  }&lt;br /&gt;
  Serial.println(&amp;quot;✓ LEDs configurées&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Configuration du ruban LED&lt;br /&gt;
  FastLED.addLeds&amp;lt;LED_TYPE, LED_STRIP_PIN, COLOR_ORDER&amp;gt;(leds, NUM_LEDS);&lt;br /&gt;
  FastLED.setBrightness(100); // Luminosité (0-255)&lt;br /&gt;
  FastLED.clear();&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
  Serial.println(&amp;quot;✓ Ruban LED configuré (144 LEDs)&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Configuration du potentiomètre&lt;br /&gt;
  pinMode(POTENTIOMETER_PIN, INPUT);&lt;br /&gt;
  Serial.println(&amp;quot;✓ Potentiomètre configuré sur GPIO 34&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Lire la difficulté initiale&lt;br /&gt;
  readDifficulty();&lt;br /&gt;
  &lt;br /&gt;
  // Configuration DFPlayer&lt;br /&gt;
  mySoftwareSerial.begin(9600, SERIAL_8N1, 16, 17);&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\nInitialisation du DFPlayer...&amp;quot;);&lt;br /&gt;
  if (!myDFPlayer.begin(mySoftwareSerial)) {&lt;br /&gt;
    Serial.println(&amp;quot;\n✗ ERREUR DFPlayer!&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;Vérifiez:&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;  - Carte SD insérée (FAT32)&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;  - Fichiers 0001.mp3 à 0006.mp3&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;  - Connexions RX/TX&amp;quot;);&lt;br /&gt;
    while(true) { delay(1000); }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;✓ DFPlayer OK!&amp;quot;);&lt;br /&gt;
  myDFPlayer.volume(25);  // Volume (0-30)&lt;br /&gt;
  delay(100);&lt;br /&gt;
  &lt;br /&gt;
  // Animation de démarrage&lt;br /&gt;
  startupAnimation();&lt;br /&gt;
  &lt;br /&gt;
  // Initialiser le générateur aléatoire&lt;br /&gt;
  randomSeed(analogRead(0));&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\n═══════════════════════════════════&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;  DIFFICULTÉ SÉLECTIONNÉE:&amp;quot;);&lt;br /&gt;
  printDifficulty();&lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;   Appuyez sur un bouton pour&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;        commencer le jeu!&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  // Mettre à jour l'effet feu en continu&lt;br /&gt;
  updateFireEffect();&lt;br /&gt;
  &lt;br /&gt;
  if (!gameActive) {&lt;br /&gt;
    // Attendre qu'un bouton soit pressé pour démarrer&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      if (digitalRead(BUTTON_PINS[i]) == LOW) {&lt;br /&gt;
        delay(300);&lt;br /&gt;
        startNewGame();&lt;br /&gt;
        break;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  } else if (waitingForInput) {&lt;br /&gt;
    checkPlayerInput();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void startNewGame() {&lt;br /&gt;
  // Lire la difficulté au début de chaque partie&lt;br /&gt;
  readDifficulty();&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\n╔═══════════════════════════════════╗&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;║      NOUVELLE PARTIE              ║&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;╚═══════════════════════════════════╝&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;\n  Difficulté: &amp;quot;);&lt;br /&gt;
  printDifficulty();&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  &lt;br /&gt;
  gameActive = true;&lt;br /&gt;
  level = 1;&lt;br /&gt;
  sequenceLength = 0;&lt;br /&gt;
  &lt;br /&gt;
  delay(1000);&lt;br /&gt;
  nextLevel();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void nextLevel() {&lt;br /&gt;
  Serial.println(&amp;quot;─────────────────────────────────────&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;         NIVEAU &amp;quot;);&lt;br /&gt;
  Serial.print(level);&lt;br /&gt;
  Serial.print(&amp;quot; / &amp;quot;);&lt;br /&gt;
  Serial.println(maxLevels);&lt;br /&gt;
  Serial.println(&amp;quot;─────────────────────────────────────\n&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Ajouter une couleur aléatoire à la séquence&lt;br /&gt;
  sequence[sequenceLength] = random(0, 4);&lt;br /&gt;
  sequenceLength++;&lt;br /&gt;
  &lt;br /&gt;
  delay(1000);&lt;br /&gt;
  &lt;br /&gt;
  // Afficher la séquence au joueur&lt;br /&gt;
  playSequence();&lt;br /&gt;
  &lt;br /&gt;
  // Attendre la saisie du joueur&lt;br /&gt;
  playerIndex = 0;&lt;br /&gt;
  waitingForInput = true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void playSequence() {&lt;br /&gt;
  Serial.println(&amp;quot;👀 Mémorisez la séquence:\n&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  for (int i = 0; i &amp;lt; sequenceLength; i++) {&lt;br /&gt;
    int color = sequence[i];&lt;br /&gt;
    &lt;br /&gt;
    Serial.print(&amp;quot;   &amp;quot;);&lt;br /&gt;
    Serial.print(i + 1);&lt;br /&gt;
    Serial.print(&amp;quot;. &amp;quot;);&lt;br /&gt;
    Serial.println(COLOR_NAMES[color]);&lt;br /&gt;
    &lt;br /&gt;
    // Allumer la LED et jouer le son&lt;br /&gt;
    digitalWrite(LED_PINS[color], HIGH);&lt;br /&gt;
    myDFPlayer.play(COLOR_TO_SOUND[color]);  // Rouge=1, Jaune=2, Vert=3, Bleu=4&lt;br /&gt;
    &lt;br /&gt;
    delay(FLASH_DURATION);&lt;br /&gt;
    &lt;br /&gt;
    // Éteindre la LED&lt;br /&gt;
    digitalWrite(LED_PINS[color], LOW);&lt;br /&gt;
    &lt;br /&gt;
    // Pause entre les flashs&lt;br /&gt;
    if (i &amp;lt; sequenceLength - 1) {&lt;br /&gt;
      delay(PAUSE_BETWEEN_FLASH);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  delay(DELAY_AFTER_SEQUENCE);&lt;br /&gt;
  Serial.println(&amp;quot;\n🎮 À vous de jouer!\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void checkPlayerInput() {&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    if (digitalRead(BUTTON_PINS[i]) == LOW) {&lt;br /&gt;
      unsigned long currentTime = millis();&lt;br /&gt;
      &lt;br /&gt;
      // Débounce&lt;br /&gt;
      if (currentTime - lastButtonPress[i] &amp;gt; DEBOUNCE_DELAY) {&lt;br /&gt;
        lastButtonPress[i] = currentTime;&lt;br /&gt;
        &lt;br /&gt;
        // Feedback visuel et sonore&lt;br /&gt;
        digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
        myDFPlayer.play(COLOR_TO_SOUND[i]);  // Jouer le son correspondant&lt;br /&gt;
        &lt;br /&gt;
        Serial.print(&amp;quot;   → &amp;quot;);&lt;br /&gt;
        Serial.println(COLOR_NAMES[i]);&lt;br /&gt;
        &lt;br /&gt;
        // Enregistrer la saisie&lt;br /&gt;
        playerInput[playerIndex] = i;&lt;br /&gt;
        &lt;br /&gt;
        delay(300);&lt;br /&gt;
        digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
        &lt;br /&gt;
        // Vérifier si c'est correct&lt;br /&gt;
        if (playerInput[playerIndex] != sequence[playerIndex]) {&lt;br /&gt;
          gameLost();&lt;br /&gt;
          return;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        playerIndex++;&lt;br /&gt;
        &lt;br /&gt;
        // Vérifier si la séquence complète est correcte&lt;br /&gt;
        if (playerIndex &amp;gt;= sequenceLength) {&lt;br /&gt;
          sequenceComplete();&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void sequenceComplete() {&lt;br /&gt;
  Serial.println(&amp;quot;\n✅ Séquence correcte!\n&amp;quot;);&lt;br /&gt;
  waitingForInput = false;&lt;br /&gt;
  &lt;br /&gt;
  level++;&lt;br /&gt;
  &lt;br /&gt;
  // Vérifier si on a atteint le niveau maximum selon la difficulté&lt;br /&gt;
  if (level &amp;gt; maxLevels) {&lt;br /&gt;
    gameWon();&lt;br /&gt;
  } else {&lt;br /&gt;
    delay(500);&lt;br /&gt;
    &lt;br /&gt;
    // Animation de succès (rapide entre chaque niveau)&lt;br /&gt;
    for (int j = 0; j &amp;lt; 2; j++) {&lt;br /&gt;
      for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
        digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
      }&lt;br /&gt;
      delay(100);&lt;br /&gt;
      for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
        digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
      }&lt;br /&gt;
      delay(100);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    delay(1000);&lt;br /&gt;
    nextLevel();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void gameLost() {&lt;br /&gt;
  Serial.println(&amp;quot;\n╔═══════════════════════════════════╗&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;║          ❌ ERREUR!               ║&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;╚═══════════════════════════════════╝&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;\n   Vous étiez au niveau &amp;quot;);&lt;br /&gt;
  Serial.println(level);&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  &lt;br /&gt;
  waitingForInput = false;&lt;br /&gt;
  gameActive = false;&lt;br /&gt;
  &lt;br /&gt;
  // Son d'échec (0006.mp3)&lt;br /&gt;
  myDFPlayer.play(6);&lt;br /&gt;
  &lt;br /&gt;
  // Animation d'échec (clignotement rapide)&lt;br /&gt;
  for (int j = 0; j &amp;lt; 5; j++) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
    }&lt;br /&gt;
    delay(150);&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
    }&lt;br /&gt;
    delay(150);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot; Appuyez sur un bouton pour rejouer&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void gameWon() {&lt;br /&gt;
  Serial.println(&amp;quot;\n╔═══════════════════════════════════╗&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;║      🎉 VICTOIRE! 🎉              ║&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;╚═══════════════════════════════════╝&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;\n  Vous avez réussi les &amp;quot;);&lt;br /&gt;
  Serial.print(maxLevels);&lt;br /&gt;
  Serial.println(&amp;quot; niveaux!&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;  Difficulté: &amp;quot;);&lt;br /&gt;
  printDifficulty();&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  &lt;br /&gt;
  gameActive = false;&lt;br /&gt;
  &lt;br /&gt;
  // Son de victoire (0005.mp3)&lt;br /&gt;
  myDFPlayer.play(5);&lt;br /&gt;
  &lt;br /&gt;
  // Animation de victoire spectaculaire&lt;br /&gt;
  // Vague de lumière rapide&lt;br /&gt;
  for (int j = 0; j &amp;lt; 8; j++) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
      delay(60);&lt;br /&gt;
      digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Clignotement final toutes ensemble&lt;br /&gt;
  for (int j = 0; j &amp;lt; 4; j++) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
    }&lt;br /&gt;
    delay(200);&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
    }&lt;br /&gt;
    delay(200);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\n═══════════════════════════════════&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot; Ajustez le potentiomètre pour&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot; changer de difficulté&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot; Appuyez sur un bouton pour rejouer&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void startupAnimation() {&lt;br /&gt;
  Serial.println(&amp;quot;\nAnimation de démarrage...\n&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Allumage séquentiel&lt;br /&gt;
  for (int j = 0; j &amp;lt; 2; j++) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
      delay(100);&lt;br /&gt;
    }&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
      delay(100);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Flash final&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
  }&lt;br /&gt;
  delay(300);&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Effet feu de bois pour le ruban LED&lt;br /&gt;
void updateFireEffect() {&lt;br /&gt;
  unsigned long currentTime = millis();&lt;br /&gt;
  &lt;br /&gt;
  // Mettre à jour seulement toutes les FIRE_UPDATE_INTERVAL ms&lt;br /&gt;
  if (currentTime - lastFireUpdate &amp;lt; FIRE_UPDATE_INTERVAL) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  lastFireUpdate = currentTime;&lt;br /&gt;
  &lt;br /&gt;
  // Refroidissement: chaque cellule perd un peu de chaleur&lt;br /&gt;
  for (int i = 0; i &amp;lt; NUM_LEDS; i++) {&lt;br /&gt;
    int cooldown = random(0, ((55 * 10) / NUM_LEDS) + 2);&lt;br /&gt;
    if (cooldown &amp;gt;= heat[i]) {&lt;br /&gt;
      heat[i] = 0;&lt;br /&gt;
    } else {&lt;br /&gt;
      heat[i] = heat[i] - cooldown;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Diffusion de chaleur vers le haut&lt;br /&gt;
  for (int k = NUM_LEDS - 1; k &amp;gt;= 2; k--) {&lt;br /&gt;
    heat[k] = (heat[k - 1] + heat[k - 2] + heat[k - 2]) / 3;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Ajout de nouvelles étincelles aléatoires en bas&lt;br /&gt;
  if (random(255) &amp;lt; 120) {&lt;br /&gt;
    int y = random(7);&lt;br /&gt;
    heat[y] = heat[y] + random(160, 255);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Conversion de la chaleur en couleurs&lt;br /&gt;
  for (int j = 0; j &amp;lt; NUM_LEDS; j++) {&lt;br /&gt;
    // Palette de couleurs feu: noir → rouge → orange → jaune → blanc&lt;br /&gt;
    byte temperature = heat[j];&lt;br /&gt;
    &lt;br /&gt;
    // Noir → Rouge foncé&lt;br /&gt;
    byte t192 = scale8_video(temperature, 191);&lt;br /&gt;
    byte heatramp = t192 &amp;amp; 0x3F; // 0..63&lt;br /&gt;
    heatramp &amp;lt;&amp;lt;= 2; // 0..252&lt;br /&gt;
    &lt;br /&gt;
    if (t192 &amp;amp; 0x80) {&lt;br /&gt;
      // Partie la plus chaude - jaune vers blanc&lt;br /&gt;
      leds[j].r = 255;&lt;br /&gt;
      leds[j].g = 255;&lt;br /&gt;
      leds[j].b = heatramp;&lt;br /&gt;
    } else if (t192 &amp;amp; 0x40) {&lt;br /&gt;
      // Partie chaude - rouge vers jaune&lt;br /&gt;
      leds[j].r = 255;&lt;br /&gt;
      leds[j].g = heatramp;&lt;br /&gt;
      leds[j].b = 0;&lt;br /&gt;
    } else {&lt;br /&gt;
      // Partie froide - noir vers rouge&lt;br /&gt;
      leds[j].r = heatramp;&lt;br /&gt;
      leds[j].g = 0;&lt;br /&gt;
      leds[j].b = 0;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  FastLED.show();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Lire le potentiomètre et déterminer la difficulté&lt;br /&gt;
void readDifficulty() {&lt;br /&gt;
  int potValue = analogRead(POTENTIOMETER_PIN);  // 0-4095 sur ESP32&lt;br /&gt;
  &lt;br /&gt;
  // Diviser en 3 zones&lt;br /&gt;
  if (potValue &amp;lt; 1365) {&lt;br /&gt;
    // Zone 1: FACILE (0-1365)&lt;br /&gt;
    currentDifficulty = EASY;&lt;br /&gt;
    maxLevels = 3;&lt;br /&gt;
  } else if (potValue &amp;lt; 2730) {&lt;br /&gt;
    // Zone 2: MOYEN (1365-2730)&lt;br /&gt;
    currentDifficulty = MEDIUM;&lt;br /&gt;
    maxLevels = 4;&lt;br /&gt;
  } else {&lt;br /&gt;
    // Zone 3: DIFFICILE (2730-4095)&lt;br /&gt;
    currentDifficulty = HARD;&lt;br /&gt;
    maxLevels = 6;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Afficher la difficulté actuelle&lt;br /&gt;
void printDifficulty() {&lt;br /&gt;
  switch(currentDifficulty) {&lt;br /&gt;
    case EASY:&lt;br /&gt;
      Serial.print(&amp;quot;FACILE (3 niveaux)&amp;quot;);&lt;br /&gt;
      break;&lt;br /&gt;
    case MEDIUM:&lt;br /&gt;
      Serial.print(&amp;quot;MOYEN (4 niveaux)&amp;quot;);&lt;br /&gt;
      break;&lt;br /&gt;
    case HARD:&lt;br /&gt;
      Serial.print(&amp;quot;DIFFICILE (6 niveaux)&amp;quot;);&lt;br /&gt;
      break;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Conception des boutons &amp;lt;br&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
- Au départ : Bouton lumineux rouge à disposition, le problème est qu'il faut plusieurs couleurs. Alors nous changeons de couleur de la led et voulons remplacer l'opercule rouge par du plexiglass, cependant cela ne se colle pas au bouton. &amp;lt;br&amp;gt;&lt;br /&gt;
- Alors : Nous avons pris des boutons plus petit de plusieurs couleur (rouge, bleu, vert et jaune). Pour les rendre plus grands, nous avons décider de couper du plexiglass en plusieurs formes : bonhomme de neige, sapin, renne, et pain d'épice, nous avons laissé un trou (de 27mm de diamètre) dans chacune des formes afin de mettre les boutons dedans. Le fichier prototype a été réalisé avec inkscape et la découpe avec une découpeuse laser. &amp;lt;br&amp;gt;&lt;br /&gt;
- Pour finir, nous avons rajouté du vinyl de la même couleur que les boutons pour les rendre plus visible sur la cheminée.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Prototype design bouton &amp;lt;br&amp;gt; ==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Fichier:Prototypes Boutons .pdf&lt;br /&gt;
&amp;lt;/gallery&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Galère == &amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
11h50, jeu de lumiere marche pas, on retourne à l'ancienne version&lt;br /&gt;
&lt;br /&gt;
==premier diaporama : Alors ? Comment ça se passe ?==&lt;br /&gt;
Diaporama type '''Alors ?''': [[media:DiaporamaSuperBrest2024-Alors.odp|Téléchargez et adaptez-le !]]&lt;br /&gt;
&lt;br /&gt;
==second diaporama : Et voilà !==&lt;br /&gt;
Diaporama type '''Et Voilà !''' : [[media:DiaporamaSuperBrest2024-EtVoila.odp|Téléchargez et adaptez-le !]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Sciencehackdaybrest]]&lt;br /&gt;
[[Catégorie:Super Brest]]&lt;br /&gt;
[[Catégorie:Super Brest 2025]]&lt;/div&gt;</summary>
		<author><name>Emma</name></author>	</entry>

	<entry>
		<id>http://wiki.lesfabriquesduponant.net/index.php?title=Super_Brest_2025_:_L%27%C3%A9trange_no%C3%ABl_de_monsieur_Simon&amp;diff=35384</id>
		<title>Super Brest 2025 : L'étrange noël de monsieur Simon</title>
		<link rel="alternate" type="text/html" href="http://wiki.lesfabriquesduponant.net/index.php?title=Super_Brest_2025_:_L%27%C3%A9trange_no%C3%ABl_de_monsieur_Simon&amp;diff=35384"/>
				<updated>2025-11-30T11:07:50Z</updated>
		
		<summary type="html">&lt;p&gt;Emma : /* Prototype design bouton  */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Fichier:SuperBrest2025-BADGE.png|200px]]&lt;br /&gt;
&lt;br /&gt;
==résumé du projet==&lt;br /&gt;
Ce hackathon a pour objectif d'adapter le jeu Simon (mémoire des couleurs/sons) en l'adaptant spécifiquement pour la fête de Noël de l'école.&lt;br /&gt;
&lt;br /&gt;
Le projet consiste à :&lt;br /&gt;
&lt;br /&gt;
Utiliser une cheminée existante pour le jeu.&lt;br /&gt;
&lt;br /&gt;
Programmer l'électronique Arduino pour simuler les lumières et les sons de Simon.&lt;br /&gt;
&lt;br /&gt;
Intégrer une thématique Noël (couleurs/sons festifs) pour créer une animation ludique et éducative qui met en avant la créativité.&lt;br /&gt;
&lt;br /&gt;
==membres du projet==&lt;br /&gt;
&lt;br /&gt;
Audrey : Ailée créature &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Emma : Magique arc en ciel &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ewen: Magic flocon &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Syrielle: Espiegle corne &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nadia : Divinité flamboyante &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Bibliographie et webographie sur le projet==&lt;br /&gt;
[[https://www.wiki.lesfabriquesduponant.net/index.php?title=ENIB_2022_-_groupe_A_:_Simon]]&lt;br /&gt;
https://fr.wikipedia.org/wiki/Simon_(jeu)&lt;br /&gt;
==banque d'images==&lt;br /&gt;
[[Fichier:E3F3D4A8-ECC8-40C8-9B21-032B27D7E458 2.jpg|200Pxpx|vignette|centré]]&lt;br /&gt;
&lt;br /&gt;
==prototype qu'on souhaite réaliser ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Prototype simon.jpg|vignette|centré]]&lt;br /&gt;
&lt;br /&gt;
==Schema de cablage==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capture d’écran 2025-11-29 à 15.42.22.png|vignette|centré|schema de cablage]]&lt;br /&gt;
&lt;br /&gt;
==Programme arduino==&lt;br /&gt;
&lt;br /&gt;
Le code à ete crée par l'IA claude , voici le prompt : &amp;lt;br&amp;gt;&lt;br /&gt;
Crée un jeu Simon pour ESP32 avec :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- 4 boutons/LEDs (Rouge/GPIO12-25, Jaune/GPIO13-26, Vert/GPIO14-27, Bleu/GPIO15-33)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- DFPlayer Mini sur GPIO16-17 avec 6 sons Noël (0001-0006.mp3)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Ruban LED WS2812B 144 LEDs sur GPIO32 avec effet feu continu&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Potentiomètre GPIO34 pour 3 difficultés (3/4/6 niveaux)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Son 0005.mp3 pour victoire totale, 0006.mp3 pour échec immédiat&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Bibliothèques : DFRobotDFPlayerMini + FastLED&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Arduino&amp;quot; line&amp;gt;/*&lt;br /&gt;
 * JEU SIMON COMPLET - ESP32 + DFPlayer Mini + Ruban LED Feu&lt;br /&gt;
 * &lt;br /&gt;
 * Câblage:&lt;br /&gt;
 * ─────────────────────────────────────────────&lt;br /&gt;
 * DFPlayer Mini:&lt;br /&gt;
 *   - RX      → GPIO 17 (TX ESP32) + résistance 1kΩ&lt;br /&gt;
 *   - TX      → GPIO 16 (RX ESP32)&lt;br /&gt;
 *   - VCC     → 5V&lt;br /&gt;
 *   - GND     → GND&lt;br /&gt;
 *   - SPK_1/2 → Haut-parleur 3W (4-8Ω)&lt;br /&gt;
 * &lt;br /&gt;
 * 4 Boutons (avec pull-up interne):&lt;br /&gt;
 *   - Bouton ROUGE  → GPIO 12 → GND&lt;br /&gt;
 *   - Bouton VERT   → GPIO 13 → GND&lt;br /&gt;
 *   - Bouton BLEU   → GPIO 14 → GND&lt;br /&gt;
 *   - Bouton JAUNE  → GPIO 15 → GND&lt;br /&gt;
 * &lt;br /&gt;
 * 4 LEDs (avec résistances 220Ω):&lt;br /&gt;
 *   - LED ROUGE  → GPIO 25 → Résistance → GND&lt;br /&gt;
 *   - LED VERTE  → GPIO 26 → Résistance → GND&lt;br /&gt;
 *   - LED BLEUE  → GPIO 27 → Résistance → GND&lt;br /&gt;
 *   - LED JAUNE  → GPIO 33 → Résistance → GND&lt;br /&gt;
 * &lt;br /&gt;
 * Ruban LED (WS2812B - 144 LEDs):&lt;br /&gt;
 *   - DATA → GPIO 32&lt;br /&gt;
 *   - VCC  → 5V (alimentation externe recommandée si &amp;gt;30 LEDs)&lt;br /&gt;
 *   - GND  → GND (commun avec ESP32)&lt;br /&gt;
 * &lt;br /&gt;
 * Potentiomètre (sélection difficulté):&lt;br /&gt;
 *   - Broche gauche  → GND&lt;br /&gt;
 *   - Broche centrale → GPIO 34 (ADC)&lt;br /&gt;
 *   - Broche droite   → 3.3V&lt;br /&gt;
 * &lt;br /&gt;
 * Fichiers MP3 sur carte SD (FAT32):&lt;br /&gt;
 *   - 0001.mp3 : Son bouton ROUGE&lt;br /&gt;
 *   - 0002.mp3 : Son bouton JAUNE&lt;br /&gt;
 *   - 0003.mp3 : Son bouton VERT&lt;br /&gt;
 *   - 0004.mp3 : Son bouton BLEU&lt;br /&gt;
 *   - 0005.mp3 : Son VICTOIRE (après 5 niveaux réussis)&lt;br /&gt;
 *   - 0006.mp3 : Son ÉCHEC (erreur dans la séquence)&lt;br /&gt;
 * &lt;br /&gt;
 * IMPORTANT: Installez la bibliothèque FastLED&lt;br /&gt;
 * (Croquis → Inclure une bibliothèque → Gérer les bibliothèques → FastLED)&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;DFRobotDFPlayerMini.h&amp;gt;&lt;br /&gt;
#include &amp;lt;FastLED.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// Configuration DFPlayer&lt;br /&gt;
HardwareSerial mySoftwareSerial(2);&lt;br /&gt;
DFRobotDFPlayerMini myDFPlayer;&lt;br /&gt;
&lt;br /&gt;
// Configuration Ruban LED&lt;br /&gt;
#define LED_STRIP_PIN 32&lt;br /&gt;
#define NUM_LEDS 144&lt;br /&gt;
#define LED_TYPE WS2812B&lt;br /&gt;
#define COLOR_ORDER GRB&lt;br /&gt;
CRGB leds[NUM_LEDS];&lt;br /&gt;
&lt;br /&gt;
// Configuration Potentiomètre (sélection difficulté)&lt;br /&gt;
#define POTENTIOMETER_PIN 34  // GPIO 34 (ADC1_CH6)&lt;br /&gt;
&lt;br /&gt;
// Niveaux de difficulté&lt;br /&gt;
enum Difficulty {&lt;br /&gt;
  EASY = 0,    // 3 niveaux&lt;br /&gt;
  MEDIUM = 1,  // 4 niveaux&lt;br /&gt;
  HARD = 2     // 6 niveaux&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Difficulty currentDifficulty = MEDIUM;&lt;br /&gt;
int maxLevels = 4;  // Par défaut moyen&lt;br /&gt;
&lt;br /&gt;
// Configuration des pins boutons et LEDs&lt;br /&gt;
const int BUTTON_PINS[4] = {12, 13, 14, 15};  // Rouge, Jaune, Vert, Bleu&lt;br /&gt;
const int LED_PINS[4] = {25, 26, 27, 33};     // Rouge, Jaune, Vert, Bleu&lt;br /&gt;
&lt;br /&gt;
// Noms des couleurs pour l'affichage&lt;br /&gt;
const char* COLOR_NAMES[4] = {&amp;quot;ROUGE&amp;quot;, &amp;quot;JAUNE&amp;quot;, &amp;quot;VERT&amp;quot;, &amp;quot;BLEU&amp;quot;};&lt;br /&gt;
&lt;br /&gt;
// Correspondance couleur -&amp;gt; numéro de son&lt;br /&gt;
const int COLOR_TO_SOUND[4] = {1, 2, 3, 4};  // Rouge=1, Jaune=2, Vert=3, Bleu=4&lt;br /&gt;
&lt;br /&gt;
// Variables du jeu&lt;br /&gt;
int sequence[100];              // Séquence à mémoriser (max 100 niveaux)&lt;br /&gt;
int sequenceLength = 0;         // Longueur actuelle de la séquence&lt;br /&gt;
int playerInput[100];           // Saisie du joueur&lt;br /&gt;
int playerIndex = 0;            // Position dans la saisie&lt;br /&gt;
int level = 1;                  // Niveau actuel&lt;br /&gt;
bool gameActive = false;        // Jeu en cours&lt;br /&gt;
bool waitingForInput = false;   // En attente de la saisie du joueur&lt;br /&gt;
&lt;br /&gt;
// Débounce des boutons&lt;br /&gt;
unsigned long lastButtonPress[4] = {0, 0, 0, 0};&lt;br /&gt;
const unsigned long DEBOUNCE_DELAY = 250;&lt;br /&gt;
&lt;br /&gt;
// Timings du jeu (en millisecondes)&lt;br /&gt;
const int FLASH_DURATION = 500;      // Durée d'allumage d'une LED&lt;br /&gt;
const int PAUSE_BETWEEN_FLASH = 200; // Pause entre deux LEDs&lt;br /&gt;
const int DELAY_AFTER_SEQUENCE = 500;// Délai avant que le joueur joue&lt;br /&gt;
&lt;br /&gt;
// Variables pour l'effet feu&lt;br /&gt;
byte heat[NUM_LEDS];&lt;br /&gt;
unsigned long lastFireUpdate = 0;&lt;br /&gt;
const int FIRE_UPDATE_INTERVAL = 50; // Mise à jour toutes les 50ms&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(115200);&lt;br /&gt;
  delay(1000);&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\n╔═══════════════════════════════════╗&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;║      JEU SIMON - ESP32            ║&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;╚═══════════════════════════════════╝\n&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Configuration des boutons&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    pinMode(BUTTON_PINS[i], INPUT_PULLUP);&lt;br /&gt;
  }&lt;br /&gt;
  Serial.println(&amp;quot;✓ Boutons configurés&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Configuration des LEDs&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    pinMode(LED_PINS[i], OUTPUT);&lt;br /&gt;
    digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
  }&lt;br /&gt;
  Serial.println(&amp;quot;✓ LEDs configurées&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Configuration du ruban LED&lt;br /&gt;
  FastLED.addLeds&amp;lt;LED_TYPE, LED_STRIP_PIN, COLOR_ORDER&amp;gt;(leds, NUM_LEDS);&lt;br /&gt;
  FastLED.setBrightness(100); // Luminosité (0-255)&lt;br /&gt;
  FastLED.clear();&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
  Serial.println(&amp;quot;✓ Ruban LED configuré (144 LEDs)&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Configuration du potentiomètre&lt;br /&gt;
  pinMode(POTENTIOMETER_PIN, INPUT);&lt;br /&gt;
  Serial.println(&amp;quot;✓ Potentiomètre configuré sur GPIO 34&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Lire la difficulté initiale&lt;br /&gt;
  readDifficulty();&lt;br /&gt;
  &lt;br /&gt;
  // Configuration DFPlayer&lt;br /&gt;
  mySoftwareSerial.begin(9600, SERIAL_8N1, 16, 17);&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\nInitialisation du DFPlayer...&amp;quot;);&lt;br /&gt;
  if (!myDFPlayer.begin(mySoftwareSerial)) {&lt;br /&gt;
    Serial.println(&amp;quot;\n✗ ERREUR DFPlayer!&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;Vérifiez:&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;  - Carte SD insérée (FAT32)&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;  - Fichiers 0001.mp3 à 0006.mp3&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;  - Connexions RX/TX&amp;quot;);&lt;br /&gt;
    while(true) { delay(1000); }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;✓ DFPlayer OK!&amp;quot;);&lt;br /&gt;
  myDFPlayer.volume(25);  // Volume (0-30)&lt;br /&gt;
  delay(100);&lt;br /&gt;
  &lt;br /&gt;
  // Animation de démarrage&lt;br /&gt;
  startupAnimation();&lt;br /&gt;
  &lt;br /&gt;
  // Initialiser le générateur aléatoire&lt;br /&gt;
  randomSeed(analogRead(0));&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\n═══════════════════════════════════&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;  DIFFICULTÉ SÉLECTIONNÉE:&amp;quot;);&lt;br /&gt;
  printDifficulty();&lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;   Appuyez sur un bouton pour&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;        commencer le jeu!&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  // Mettre à jour l'effet feu en continu&lt;br /&gt;
  updateFireEffect();&lt;br /&gt;
  &lt;br /&gt;
  if (!gameActive) {&lt;br /&gt;
    // Attendre qu'un bouton soit pressé pour démarrer&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      if (digitalRead(BUTTON_PINS[i]) == LOW) {&lt;br /&gt;
        delay(300);&lt;br /&gt;
        startNewGame();&lt;br /&gt;
        break;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  } else if (waitingForInput) {&lt;br /&gt;
    checkPlayerInput();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void startNewGame() {&lt;br /&gt;
  // Lire la difficulté au début de chaque partie&lt;br /&gt;
  readDifficulty();&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\n╔═══════════════════════════════════╗&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;║      NOUVELLE PARTIE              ║&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;╚═══════════════════════════════════╝&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;\n  Difficulté: &amp;quot;);&lt;br /&gt;
  printDifficulty();&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  &lt;br /&gt;
  gameActive = true;&lt;br /&gt;
  level = 1;&lt;br /&gt;
  sequenceLength = 0;&lt;br /&gt;
  &lt;br /&gt;
  delay(1000);&lt;br /&gt;
  nextLevel();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void nextLevel() {&lt;br /&gt;
  Serial.println(&amp;quot;─────────────────────────────────────&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;         NIVEAU &amp;quot;);&lt;br /&gt;
  Serial.print(level);&lt;br /&gt;
  Serial.print(&amp;quot; / &amp;quot;);&lt;br /&gt;
  Serial.println(maxLevels);&lt;br /&gt;
  Serial.println(&amp;quot;─────────────────────────────────────\n&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Ajouter une couleur aléatoire à la séquence&lt;br /&gt;
  sequence[sequenceLength] = random(0, 4);&lt;br /&gt;
  sequenceLength++;&lt;br /&gt;
  &lt;br /&gt;
  delay(1000);&lt;br /&gt;
  &lt;br /&gt;
  // Afficher la séquence au joueur&lt;br /&gt;
  playSequence();&lt;br /&gt;
  &lt;br /&gt;
  // Attendre la saisie du joueur&lt;br /&gt;
  playerIndex = 0;&lt;br /&gt;
  waitingForInput = true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void playSequence() {&lt;br /&gt;
  Serial.println(&amp;quot;👀 Mémorisez la séquence:\n&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  for (int i = 0; i &amp;lt; sequenceLength; i++) {&lt;br /&gt;
    int color = sequence[i];&lt;br /&gt;
    &lt;br /&gt;
    Serial.print(&amp;quot;   &amp;quot;);&lt;br /&gt;
    Serial.print(i + 1);&lt;br /&gt;
    Serial.print(&amp;quot;. &amp;quot;);&lt;br /&gt;
    Serial.println(COLOR_NAMES[color]);&lt;br /&gt;
    &lt;br /&gt;
    // Allumer la LED et jouer le son&lt;br /&gt;
    digitalWrite(LED_PINS[color], HIGH);&lt;br /&gt;
    myDFPlayer.play(COLOR_TO_SOUND[color]);  // Rouge=1, Jaune=2, Vert=3, Bleu=4&lt;br /&gt;
    &lt;br /&gt;
    delay(FLASH_DURATION);&lt;br /&gt;
    &lt;br /&gt;
    // Éteindre la LED&lt;br /&gt;
    digitalWrite(LED_PINS[color], LOW);&lt;br /&gt;
    &lt;br /&gt;
    // Pause entre les flashs&lt;br /&gt;
    if (i &amp;lt; sequenceLength - 1) {&lt;br /&gt;
      delay(PAUSE_BETWEEN_FLASH);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  delay(DELAY_AFTER_SEQUENCE);&lt;br /&gt;
  Serial.println(&amp;quot;\n🎮 À vous de jouer!\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void checkPlayerInput() {&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    if (digitalRead(BUTTON_PINS[i]) == LOW) {&lt;br /&gt;
      unsigned long currentTime = millis();&lt;br /&gt;
      &lt;br /&gt;
      // Débounce&lt;br /&gt;
      if (currentTime - lastButtonPress[i] &amp;gt; DEBOUNCE_DELAY) {&lt;br /&gt;
        lastButtonPress[i] = currentTime;&lt;br /&gt;
        &lt;br /&gt;
        // Feedback visuel et sonore&lt;br /&gt;
        digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
        myDFPlayer.play(COLOR_TO_SOUND[i]);  // Jouer le son correspondant&lt;br /&gt;
        &lt;br /&gt;
        Serial.print(&amp;quot;   → &amp;quot;);&lt;br /&gt;
        Serial.println(COLOR_NAMES[i]);&lt;br /&gt;
        &lt;br /&gt;
        // Enregistrer la saisie&lt;br /&gt;
        playerInput[playerIndex] = i;&lt;br /&gt;
        &lt;br /&gt;
        delay(300);&lt;br /&gt;
        digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
        &lt;br /&gt;
        // Vérifier si c'est correct&lt;br /&gt;
        if (playerInput[playerIndex] != sequence[playerIndex]) {&lt;br /&gt;
          gameLost();&lt;br /&gt;
          return;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        playerIndex++;&lt;br /&gt;
        &lt;br /&gt;
        // Vérifier si la séquence complète est correcte&lt;br /&gt;
        if (playerIndex &amp;gt;= sequenceLength) {&lt;br /&gt;
          sequenceComplete();&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void sequenceComplete() {&lt;br /&gt;
  Serial.println(&amp;quot;\n✅ Séquence correcte!\n&amp;quot;);&lt;br /&gt;
  waitingForInput = false;&lt;br /&gt;
  &lt;br /&gt;
  level++;&lt;br /&gt;
  &lt;br /&gt;
  // Vérifier si on a atteint le niveau maximum selon la difficulté&lt;br /&gt;
  if (level &amp;gt; maxLevels) {&lt;br /&gt;
    gameWon();&lt;br /&gt;
  } else {&lt;br /&gt;
    delay(500);&lt;br /&gt;
    &lt;br /&gt;
    // Animation de succès (rapide entre chaque niveau)&lt;br /&gt;
    for (int j = 0; j &amp;lt; 2; j++) {&lt;br /&gt;
      for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
        digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
      }&lt;br /&gt;
      delay(100);&lt;br /&gt;
      for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
        digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
      }&lt;br /&gt;
      delay(100);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    delay(1000);&lt;br /&gt;
    nextLevel();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void gameLost() {&lt;br /&gt;
  Serial.println(&amp;quot;\n╔═══════════════════════════════════╗&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;║          ❌ ERREUR!               ║&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;╚═══════════════════════════════════╝&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;\n   Vous étiez au niveau &amp;quot;);&lt;br /&gt;
  Serial.println(level);&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  &lt;br /&gt;
  waitingForInput = false;&lt;br /&gt;
  gameActive = false;&lt;br /&gt;
  &lt;br /&gt;
  // Son d'échec (0006.mp3)&lt;br /&gt;
  myDFPlayer.play(6);&lt;br /&gt;
  &lt;br /&gt;
  // Animation d'échec (clignotement rapide)&lt;br /&gt;
  for (int j = 0; j &amp;lt; 5; j++) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
    }&lt;br /&gt;
    delay(150);&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
    }&lt;br /&gt;
    delay(150);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot; Appuyez sur un bouton pour rejouer&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void gameWon() {&lt;br /&gt;
  Serial.println(&amp;quot;\n╔═══════════════════════════════════╗&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;║      🎉 VICTOIRE! 🎉              ║&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;╚═══════════════════════════════════╝&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;\n  Vous avez réussi les &amp;quot;);&lt;br /&gt;
  Serial.print(maxLevels);&lt;br /&gt;
  Serial.println(&amp;quot; niveaux!&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;  Difficulté: &amp;quot;);&lt;br /&gt;
  printDifficulty();&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  &lt;br /&gt;
  gameActive = false;&lt;br /&gt;
  &lt;br /&gt;
  // Son de victoire (0005.mp3)&lt;br /&gt;
  myDFPlayer.play(5);&lt;br /&gt;
  &lt;br /&gt;
  // Animation de victoire spectaculaire&lt;br /&gt;
  // Vague de lumière rapide&lt;br /&gt;
  for (int j = 0; j &amp;lt; 8; j++) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
      delay(60);&lt;br /&gt;
      digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Clignotement final toutes ensemble&lt;br /&gt;
  for (int j = 0; j &amp;lt; 4; j++) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
    }&lt;br /&gt;
    delay(200);&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
    }&lt;br /&gt;
    delay(200);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\n═══════════════════════════════════&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot; Ajustez le potentiomètre pour&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot; changer de difficulté&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot; Appuyez sur un bouton pour rejouer&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void startupAnimation() {&lt;br /&gt;
  Serial.println(&amp;quot;\nAnimation de démarrage...\n&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Allumage séquentiel&lt;br /&gt;
  for (int j = 0; j &amp;lt; 2; j++) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
      delay(100);&lt;br /&gt;
    }&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
      delay(100);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Flash final&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
  }&lt;br /&gt;
  delay(300);&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Effet feu de bois pour le ruban LED&lt;br /&gt;
void updateFireEffect() {&lt;br /&gt;
  unsigned long currentTime = millis();&lt;br /&gt;
  &lt;br /&gt;
  // Mettre à jour seulement toutes les FIRE_UPDATE_INTERVAL ms&lt;br /&gt;
  if (currentTime - lastFireUpdate &amp;lt; FIRE_UPDATE_INTERVAL) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  lastFireUpdate = currentTime;&lt;br /&gt;
  &lt;br /&gt;
  // Refroidissement: chaque cellule perd un peu de chaleur&lt;br /&gt;
  for (int i = 0; i &amp;lt; NUM_LEDS; i++) {&lt;br /&gt;
    int cooldown = random(0, ((55 * 10) / NUM_LEDS) + 2);&lt;br /&gt;
    if (cooldown &amp;gt;= heat[i]) {&lt;br /&gt;
      heat[i] = 0;&lt;br /&gt;
    } else {&lt;br /&gt;
      heat[i] = heat[i] - cooldown;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Diffusion de chaleur vers le haut&lt;br /&gt;
  for (int k = NUM_LEDS - 1; k &amp;gt;= 2; k--) {&lt;br /&gt;
    heat[k] = (heat[k - 1] + heat[k - 2] + heat[k - 2]) / 3;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Ajout de nouvelles étincelles aléatoires en bas&lt;br /&gt;
  if (random(255) &amp;lt; 120) {&lt;br /&gt;
    int y = random(7);&lt;br /&gt;
    heat[y] = heat[y] + random(160, 255);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Conversion de la chaleur en couleurs&lt;br /&gt;
  for (int j = 0; j &amp;lt; NUM_LEDS; j++) {&lt;br /&gt;
    // Palette de couleurs feu: noir → rouge → orange → jaune → blanc&lt;br /&gt;
    byte temperature = heat[j];&lt;br /&gt;
    &lt;br /&gt;
    // Noir → Rouge foncé&lt;br /&gt;
    byte t192 = scale8_video(temperature, 191);&lt;br /&gt;
    byte heatramp = t192 &amp;amp; 0x3F; // 0..63&lt;br /&gt;
    heatramp &amp;lt;&amp;lt;= 2; // 0..252&lt;br /&gt;
    &lt;br /&gt;
    if (t192 &amp;amp; 0x80) {&lt;br /&gt;
      // Partie la plus chaude - jaune vers blanc&lt;br /&gt;
      leds[j].r = 255;&lt;br /&gt;
      leds[j].g = 255;&lt;br /&gt;
      leds[j].b = heatramp;&lt;br /&gt;
    } else if (t192 &amp;amp; 0x40) {&lt;br /&gt;
      // Partie chaude - rouge vers jaune&lt;br /&gt;
      leds[j].r = 255;&lt;br /&gt;
      leds[j].g = heatramp;&lt;br /&gt;
      leds[j].b = 0;&lt;br /&gt;
    } else {&lt;br /&gt;
      // Partie froide - noir vers rouge&lt;br /&gt;
      leds[j].r = heatramp;&lt;br /&gt;
      leds[j].g = 0;&lt;br /&gt;
      leds[j].b = 0;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  FastLED.show();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Lire le potentiomètre et déterminer la difficulté&lt;br /&gt;
void readDifficulty() {&lt;br /&gt;
  int potValue = analogRead(POTENTIOMETER_PIN);  // 0-4095 sur ESP32&lt;br /&gt;
  &lt;br /&gt;
  // Diviser en 3 zones&lt;br /&gt;
  if (potValue &amp;lt; 1365) {&lt;br /&gt;
    // Zone 1: FACILE (0-1365)&lt;br /&gt;
    currentDifficulty = EASY;&lt;br /&gt;
    maxLevels = 3;&lt;br /&gt;
  } else if (potValue &amp;lt; 2730) {&lt;br /&gt;
    // Zone 2: MOYEN (1365-2730)&lt;br /&gt;
    currentDifficulty = MEDIUM;&lt;br /&gt;
    maxLevels = 4;&lt;br /&gt;
  } else {&lt;br /&gt;
    // Zone 3: DIFFICILE (2730-4095)&lt;br /&gt;
    currentDifficulty = HARD;&lt;br /&gt;
    maxLevels = 6;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Afficher la difficulté actuelle&lt;br /&gt;
void printDifficulty() {&lt;br /&gt;
  switch(currentDifficulty) {&lt;br /&gt;
    case EASY:&lt;br /&gt;
      Serial.print(&amp;quot;FACILE (3 niveaux)&amp;quot;);&lt;br /&gt;
      break;&lt;br /&gt;
    case MEDIUM:&lt;br /&gt;
      Serial.print(&amp;quot;MOYEN (4 niveaux)&amp;quot;);&lt;br /&gt;
      break;&lt;br /&gt;
    case HARD:&lt;br /&gt;
      Serial.print(&amp;quot;DIFFICILE (6 niveaux)&amp;quot;);&lt;br /&gt;
      break;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Conception des boutons &amp;lt;br&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
- Au départ : Bouton lumineux rouge à disposition, le problème est qu'il faut plusieurs couleurs. Alors nous changeons de couleur de la led et voulons remplacer l'opercule rouge par du plexiglass, cependant cela ne se colle pas au bouton. &amp;lt;br&amp;gt;&lt;br /&gt;
- Alors : Nous avons pris des boutons plus petit de plusieurs couleur (rouge, bleu, vert et jaune). Pour les rendre plus grands, nous avons décider de couper du plexiglass en plusieurs formes : bonhomme de neige, sapin, renne, et pain d'épice, nous avons laissé un trou (de 27mm de diamètre) dans chacune des formes afin de mettre les boutons dedans. Le fichier prototype a été réalisé avec inkscape et la découpe avec une découpeuse laser. &amp;lt;br&amp;gt;&lt;br /&gt;
- Pour finir, nous avons rajouté du vinyl de la même couleur que les boutons pour les rendre plus visible sur la cheminée.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Prototype design bouton &amp;lt;br&amp;gt; ==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Fichier:Prototypes Boutons .pdf&lt;br /&gt;
&amp;lt;/gallery&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==premier diaporama : Alors ? Comment ça se passe ?==&lt;br /&gt;
Diaporama type '''Alors ?''': [[media:DiaporamaSuperBrest2024-Alors.odp|Téléchargez et adaptez-le !]]&lt;br /&gt;
&lt;br /&gt;
==second diaporama : Et voilà !==&lt;br /&gt;
Diaporama type '''Et Voilà !''' : [[media:DiaporamaSuperBrest2024-EtVoila.odp|Téléchargez et adaptez-le !]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Sciencehackdaybrest]]&lt;br /&gt;
[[Catégorie:Super Brest]]&lt;br /&gt;
[[Catégorie:Super Brest 2025]]&lt;/div&gt;</summary>
		<author><name>Emma</name></author>	</entry>

	<entry>
		<id>http://wiki.lesfabriquesduponant.net/index.php?title=Super_Brest_2025_:_L%27%C3%A9trange_no%C3%ABl_de_monsieur_Simon&amp;diff=35375</id>
		<title>Super Brest 2025 : L'étrange noël de monsieur Simon</title>
		<link rel="alternate" type="text/html" href="http://wiki.lesfabriquesduponant.net/index.php?title=Super_Brest_2025_:_L%27%C3%A9trange_no%C3%ABl_de_monsieur_Simon&amp;diff=35375"/>
				<updated>2025-11-30T10:55:13Z</updated>
		
		<summary type="html">&lt;p&gt;Emma : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Fichier:SuperBrest2025-BADGE.png|200px]]&lt;br /&gt;
&lt;br /&gt;
==résumé du projet==&lt;br /&gt;
Ce hackathon a pour objectif d'adapter le jeu Simon (mémoire des couleurs/sons) en l'adaptant spécifiquement pour la fête de Noël de l'école.&lt;br /&gt;
&lt;br /&gt;
Le projet consiste à :&lt;br /&gt;
&lt;br /&gt;
Utiliser une cheminée existante pour le jeu.&lt;br /&gt;
&lt;br /&gt;
Programmer l'électronique Arduino pour simuler les lumières et les sons de Simon.&lt;br /&gt;
&lt;br /&gt;
Intégrer une thématique Noël (couleurs/sons festifs) pour créer une animation ludique et éducative qui met en avant la créativité.&lt;br /&gt;
&lt;br /&gt;
==membres du projet==&lt;br /&gt;
&lt;br /&gt;
Audrey : Ailée créature &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Emma : Magique arc en ciel &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ewen: Magic flocon &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Syrielle: Espiegle corne &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nadia : Divinité flamboyante &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Bibliographie et webographie sur le projet==&lt;br /&gt;
[[https://www.wiki.lesfabriquesduponant.net/index.php?title=ENIB_2022_-_groupe_A_:_Simon]]&lt;br /&gt;
https://fr.wikipedia.org/wiki/Simon_(jeu)&lt;br /&gt;
==banque d'images==&lt;br /&gt;
[[Fichier:E3F3D4A8-ECC8-40C8-9B21-032B27D7E458 2.jpg|200Pxpx|vignette|centré]]&lt;br /&gt;
&lt;br /&gt;
==prototype qu'on souhaite réaliser ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Prototype simon.jpg|vignette|centré]]&lt;br /&gt;
&lt;br /&gt;
==Schema de cablage==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capture d’écran 2025-11-29 à 15.42.22.png|vignette|centré|schema de cablage]]&lt;br /&gt;
&lt;br /&gt;
==Programme arduino==&lt;br /&gt;
&lt;br /&gt;
Le code à ete crée par l'IA claude , voici le prompt : &amp;lt;br&amp;gt;&lt;br /&gt;
Crée un jeu Simon pour ESP32 avec :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- 4 boutons/LEDs (Rouge/GPIO12-25, Jaune/GPIO13-26, Vert/GPIO14-27, Bleu/GPIO15-33)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- DFPlayer Mini sur GPIO16-17 avec 6 sons Noël (0001-0006.mp3)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Ruban LED WS2812B 144 LEDs sur GPIO32 avec effet feu continu&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Potentiomètre GPIO34 pour 3 difficultés (3/4/6 niveaux)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Son 0005.mp3 pour victoire totale, 0006.mp3 pour échec immédiat&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Bibliothèques : DFRobotDFPlayerMini + FastLED&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Arduino&amp;quot; line&amp;gt;/*&lt;br /&gt;
 * JEU SIMON COMPLET - ESP32 + DFPlayer Mini + Ruban LED Feu&lt;br /&gt;
 * &lt;br /&gt;
 * Câblage:&lt;br /&gt;
 * ─────────────────────────────────────────────&lt;br /&gt;
 * DFPlayer Mini:&lt;br /&gt;
 *   - RX      → GPIO 17 (TX ESP32) + résistance 1kΩ&lt;br /&gt;
 *   - TX      → GPIO 16 (RX ESP32)&lt;br /&gt;
 *   - VCC     → 5V&lt;br /&gt;
 *   - GND     → GND&lt;br /&gt;
 *   - SPK_1/2 → Haut-parleur 3W (4-8Ω)&lt;br /&gt;
 * &lt;br /&gt;
 * 4 Boutons (avec pull-up interne):&lt;br /&gt;
 *   - Bouton ROUGE  → GPIO 12 → GND&lt;br /&gt;
 *   - Bouton VERT   → GPIO 13 → GND&lt;br /&gt;
 *   - Bouton BLEU   → GPIO 14 → GND&lt;br /&gt;
 *   - Bouton JAUNE  → GPIO 15 → GND&lt;br /&gt;
 * &lt;br /&gt;
 * 4 LEDs (avec résistances 220Ω):&lt;br /&gt;
 *   - LED ROUGE  → GPIO 25 → Résistance → GND&lt;br /&gt;
 *   - LED VERTE  → GPIO 26 → Résistance → GND&lt;br /&gt;
 *   - LED BLEUE  → GPIO 27 → Résistance → GND&lt;br /&gt;
 *   - LED JAUNE  → GPIO 33 → Résistance → GND&lt;br /&gt;
 * &lt;br /&gt;
 * Ruban LED (WS2812B - 144 LEDs):&lt;br /&gt;
 *   - DATA → GPIO 32&lt;br /&gt;
 *   - VCC  → 5V (alimentation externe recommandée si &amp;gt;30 LEDs)&lt;br /&gt;
 *   - GND  → GND (commun avec ESP32)&lt;br /&gt;
 * &lt;br /&gt;
 * Potentiomètre (sélection difficulté):&lt;br /&gt;
 *   - Broche gauche  → GND&lt;br /&gt;
 *   - Broche centrale → GPIO 34 (ADC)&lt;br /&gt;
 *   - Broche droite   → 3.3V&lt;br /&gt;
 * &lt;br /&gt;
 * Fichiers MP3 sur carte SD (FAT32):&lt;br /&gt;
 *   - 0001.mp3 : Son bouton ROUGE&lt;br /&gt;
 *   - 0002.mp3 : Son bouton JAUNE&lt;br /&gt;
 *   - 0003.mp3 : Son bouton VERT&lt;br /&gt;
 *   - 0004.mp3 : Son bouton BLEU&lt;br /&gt;
 *   - 0005.mp3 : Son VICTOIRE (après 5 niveaux réussis)&lt;br /&gt;
 *   - 0006.mp3 : Son ÉCHEC (erreur dans la séquence)&lt;br /&gt;
 * &lt;br /&gt;
 * IMPORTANT: Installez la bibliothèque FastLED&lt;br /&gt;
 * (Croquis → Inclure une bibliothèque → Gérer les bibliothèques → FastLED)&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;DFRobotDFPlayerMini.h&amp;gt;&lt;br /&gt;
#include &amp;lt;FastLED.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// Configuration DFPlayer&lt;br /&gt;
HardwareSerial mySoftwareSerial(2);&lt;br /&gt;
DFRobotDFPlayerMini myDFPlayer;&lt;br /&gt;
&lt;br /&gt;
// Configuration Ruban LED&lt;br /&gt;
#define LED_STRIP_PIN 32&lt;br /&gt;
#define NUM_LEDS 144&lt;br /&gt;
#define LED_TYPE WS2812B&lt;br /&gt;
#define COLOR_ORDER GRB&lt;br /&gt;
CRGB leds[NUM_LEDS];&lt;br /&gt;
&lt;br /&gt;
// Configuration Potentiomètre (sélection difficulté)&lt;br /&gt;
#define POTENTIOMETER_PIN 34  // GPIO 34 (ADC1_CH6)&lt;br /&gt;
&lt;br /&gt;
// Niveaux de difficulté&lt;br /&gt;
enum Difficulty {&lt;br /&gt;
  EASY = 0,    // 3 niveaux&lt;br /&gt;
  MEDIUM = 1,  // 4 niveaux&lt;br /&gt;
  HARD = 2     // 6 niveaux&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Difficulty currentDifficulty = MEDIUM;&lt;br /&gt;
int maxLevels = 4;  // Par défaut moyen&lt;br /&gt;
&lt;br /&gt;
// Configuration des pins boutons et LEDs&lt;br /&gt;
const int BUTTON_PINS[4] = {12, 13, 14, 15};  // Rouge, Jaune, Vert, Bleu&lt;br /&gt;
const int LED_PINS[4] = {25, 26, 27, 33};     // Rouge, Jaune, Vert, Bleu&lt;br /&gt;
&lt;br /&gt;
// Noms des couleurs pour l'affichage&lt;br /&gt;
const char* COLOR_NAMES[4] = {&amp;quot;ROUGE&amp;quot;, &amp;quot;JAUNE&amp;quot;, &amp;quot;VERT&amp;quot;, &amp;quot;BLEU&amp;quot;};&lt;br /&gt;
&lt;br /&gt;
// Correspondance couleur -&amp;gt; numéro de son&lt;br /&gt;
const int COLOR_TO_SOUND[4] = {1, 2, 3, 4};  // Rouge=1, Jaune=2, Vert=3, Bleu=4&lt;br /&gt;
&lt;br /&gt;
// Variables du jeu&lt;br /&gt;
int sequence[100];              // Séquence à mémoriser (max 100 niveaux)&lt;br /&gt;
int sequenceLength = 0;         // Longueur actuelle de la séquence&lt;br /&gt;
int playerInput[100];           // Saisie du joueur&lt;br /&gt;
int playerIndex = 0;            // Position dans la saisie&lt;br /&gt;
int level = 1;                  // Niveau actuel&lt;br /&gt;
bool gameActive = false;        // Jeu en cours&lt;br /&gt;
bool waitingForInput = false;   // En attente de la saisie du joueur&lt;br /&gt;
&lt;br /&gt;
// Débounce des boutons&lt;br /&gt;
unsigned long lastButtonPress[4] = {0, 0, 0, 0};&lt;br /&gt;
const unsigned long DEBOUNCE_DELAY = 250;&lt;br /&gt;
&lt;br /&gt;
// Timings du jeu (en millisecondes)&lt;br /&gt;
const int FLASH_DURATION = 500;      // Durée d'allumage d'une LED&lt;br /&gt;
const int PAUSE_BETWEEN_FLASH = 200; // Pause entre deux LEDs&lt;br /&gt;
const int DELAY_AFTER_SEQUENCE = 500;// Délai avant que le joueur joue&lt;br /&gt;
&lt;br /&gt;
// Variables pour l'effet feu&lt;br /&gt;
byte heat[NUM_LEDS];&lt;br /&gt;
unsigned long lastFireUpdate = 0;&lt;br /&gt;
const int FIRE_UPDATE_INTERVAL = 50; // Mise à jour toutes les 50ms&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(115200);&lt;br /&gt;
  delay(1000);&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\n╔═══════════════════════════════════╗&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;║      JEU SIMON - ESP32            ║&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;╚═══════════════════════════════════╝\n&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Configuration des boutons&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    pinMode(BUTTON_PINS[i], INPUT_PULLUP);&lt;br /&gt;
  }&lt;br /&gt;
  Serial.println(&amp;quot;✓ Boutons configurés&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Configuration des LEDs&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    pinMode(LED_PINS[i], OUTPUT);&lt;br /&gt;
    digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
  }&lt;br /&gt;
  Serial.println(&amp;quot;✓ LEDs configurées&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Configuration du ruban LED&lt;br /&gt;
  FastLED.addLeds&amp;lt;LED_TYPE, LED_STRIP_PIN, COLOR_ORDER&amp;gt;(leds, NUM_LEDS);&lt;br /&gt;
  FastLED.setBrightness(100); // Luminosité (0-255)&lt;br /&gt;
  FastLED.clear();&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
  Serial.println(&amp;quot;✓ Ruban LED configuré (144 LEDs)&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Configuration du potentiomètre&lt;br /&gt;
  pinMode(POTENTIOMETER_PIN, INPUT);&lt;br /&gt;
  Serial.println(&amp;quot;✓ Potentiomètre configuré sur GPIO 34&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Lire la difficulté initiale&lt;br /&gt;
  readDifficulty();&lt;br /&gt;
  &lt;br /&gt;
  // Configuration DFPlayer&lt;br /&gt;
  mySoftwareSerial.begin(9600, SERIAL_8N1, 16, 17);&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\nInitialisation du DFPlayer...&amp;quot;);&lt;br /&gt;
  if (!myDFPlayer.begin(mySoftwareSerial)) {&lt;br /&gt;
    Serial.println(&amp;quot;\n✗ ERREUR DFPlayer!&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;Vérifiez:&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;  - Carte SD insérée (FAT32)&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;  - Fichiers 0001.mp3 à 0006.mp3&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;  - Connexions RX/TX&amp;quot;);&lt;br /&gt;
    while(true) { delay(1000); }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;✓ DFPlayer OK!&amp;quot;);&lt;br /&gt;
  myDFPlayer.volume(25);  // Volume (0-30)&lt;br /&gt;
  delay(100);&lt;br /&gt;
  &lt;br /&gt;
  // Animation de démarrage&lt;br /&gt;
  startupAnimation();&lt;br /&gt;
  &lt;br /&gt;
  // Initialiser le générateur aléatoire&lt;br /&gt;
  randomSeed(analogRead(0));&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\n═══════════════════════════════════&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;  DIFFICULTÉ SÉLECTIONNÉE:&amp;quot;);&lt;br /&gt;
  printDifficulty();&lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;   Appuyez sur un bouton pour&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;        commencer le jeu!&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  // Mettre à jour l'effet feu en continu&lt;br /&gt;
  updateFireEffect();&lt;br /&gt;
  &lt;br /&gt;
  if (!gameActive) {&lt;br /&gt;
    // Attendre qu'un bouton soit pressé pour démarrer&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      if (digitalRead(BUTTON_PINS[i]) == LOW) {&lt;br /&gt;
        delay(300);&lt;br /&gt;
        startNewGame();&lt;br /&gt;
        break;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  } else if (waitingForInput) {&lt;br /&gt;
    checkPlayerInput();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void startNewGame() {&lt;br /&gt;
  // Lire la difficulté au début de chaque partie&lt;br /&gt;
  readDifficulty();&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\n╔═══════════════════════════════════╗&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;║      NOUVELLE PARTIE              ║&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;╚═══════════════════════════════════╝&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;\n  Difficulté: &amp;quot;);&lt;br /&gt;
  printDifficulty();&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  &lt;br /&gt;
  gameActive = true;&lt;br /&gt;
  level = 1;&lt;br /&gt;
  sequenceLength = 0;&lt;br /&gt;
  &lt;br /&gt;
  delay(1000);&lt;br /&gt;
  nextLevel();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void nextLevel() {&lt;br /&gt;
  Serial.println(&amp;quot;─────────────────────────────────────&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;         NIVEAU &amp;quot;);&lt;br /&gt;
  Serial.print(level);&lt;br /&gt;
  Serial.print(&amp;quot; / &amp;quot;);&lt;br /&gt;
  Serial.println(maxLevels);&lt;br /&gt;
  Serial.println(&amp;quot;─────────────────────────────────────\n&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Ajouter une couleur aléatoire à la séquence&lt;br /&gt;
  sequence[sequenceLength] = random(0, 4);&lt;br /&gt;
  sequenceLength++;&lt;br /&gt;
  &lt;br /&gt;
  delay(1000);&lt;br /&gt;
  &lt;br /&gt;
  // Afficher la séquence au joueur&lt;br /&gt;
  playSequence();&lt;br /&gt;
  &lt;br /&gt;
  // Attendre la saisie du joueur&lt;br /&gt;
  playerIndex = 0;&lt;br /&gt;
  waitingForInput = true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void playSequence() {&lt;br /&gt;
  Serial.println(&amp;quot;👀 Mémorisez la séquence:\n&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  for (int i = 0; i &amp;lt; sequenceLength; i++) {&lt;br /&gt;
    int color = sequence[i];&lt;br /&gt;
    &lt;br /&gt;
    Serial.print(&amp;quot;   &amp;quot;);&lt;br /&gt;
    Serial.print(i + 1);&lt;br /&gt;
    Serial.print(&amp;quot;. &amp;quot;);&lt;br /&gt;
    Serial.println(COLOR_NAMES[color]);&lt;br /&gt;
    &lt;br /&gt;
    // Allumer la LED et jouer le son&lt;br /&gt;
    digitalWrite(LED_PINS[color], HIGH);&lt;br /&gt;
    myDFPlayer.play(COLOR_TO_SOUND[color]);  // Rouge=1, Jaune=2, Vert=3, Bleu=4&lt;br /&gt;
    &lt;br /&gt;
    delay(FLASH_DURATION);&lt;br /&gt;
    &lt;br /&gt;
    // Éteindre la LED&lt;br /&gt;
    digitalWrite(LED_PINS[color], LOW);&lt;br /&gt;
    &lt;br /&gt;
    // Pause entre les flashs&lt;br /&gt;
    if (i &amp;lt; sequenceLength - 1) {&lt;br /&gt;
      delay(PAUSE_BETWEEN_FLASH);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  delay(DELAY_AFTER_SEQUENCE);&lt;br /&gt;
  Serial.println(&amp;quot;\n🎮 À vous de jouer!\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void checkPlayerInput() {&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    if (digitalRead(BUTTON_PINS[i]) == LOW) {&lt;br /&gt;
      unsigned long currentTime = millis();&lt;br /&gt;
      &lt;br /&gt;
      // Débounce&lt;br /&gt;
      if (currentTime - lastButtonPress[i] &amp;gt; DEBOUNCE_DELAY) {&lt;br /&gt;
        lastButtonPress[i] = currentTime;&lt;br /&gt;
        &lt;br /&gt;
        // Feedback visuel et sonore&lt;br /&gt;
        digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
        myDFPlayer.play(COLOR_TO_SOUND[i]);  // Jouer le son correspondant&lt;br /&gt;
        &lt;br /&gt;
        Serial.print(&amp;quot;   → &amp;quot;);&lt;br /&gt;
        Serial.println(COLOR_NAMES[i]);&lt;br /&gt;
        &lt;br /&gt;
        // Enregistrer la saisie&lt;br /&gt;
        playerInput[playerIndex] = i;&lt;br /&gt;
        &lt;br /&gt;
        delay(300);&lt;br /&gt;
        digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
        &lt;br /&gt;
        // Vérifier si c'est correct&lt;br /&gt;
        if (playerInput[playerIndex] != sequence[playerIndex]) {&lt;br /&gt;
          gameLost();&lt;br /&gt;
          return;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        playerIndex++;&lt;br /&gt;
        &lt;br /&gt;
        // Vérifier si la séquence complète est correcte&lt;br /&gt;
        if (playerIndex &amp;gt;= sequenceLength) {&lt;br /&gt;
          sequenceComplete();&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void sequenceComplete() {&lt;br /&gt;
  Serial.println(&amp;quot;\n✅ Séquence correcte!\n&amp;quot;);&lt;br /&gt;
  waitingForInput = false;&lt;br /&gt;
  &lt;br /&gt;
  level++;&lt;br /&gt;
  &lt;br /&gt;
  // Vérifier si on a atteint le niveau maximum selon la difficulté&lt;br /&gt;
  if (level &amp;gt; maxLevels) {&lt;br /&gt;
    gameWon();&lt;br /&gt;
  } else {&lt;br /&gt;
    delay(500);&lt;br /&gt;
    &lt;br /&gt;
    // Animation de succès (rapide entre chaque niveau)&lt;br /&gt;
    for (int j = 0; j &amp;lt; 2; j++) {&lt;br /&gt;
      for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
        digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
      }&lt;br /&gt;
      delay(100);&lt;br /&gt;
      for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
        digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
      }&lt;br /&gt;
      delay(100);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    delay(1000);&lt;br /&gt;
    nextLevel();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void gameLost() {&lt;br /&gt;
  Serial.println(&amp;quot;\n╔═══════════════════════════════════╗&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;║          ❌ ERREUR!               ║&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;╚═══════════════════════════════════╝&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;\n   Vous étiez au niveau &amp;quot;);&lt;br /&gt;
  Serial.println(level);&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  &lt;br /&gt;
  waitingForInput = false;&lt;br /&gt;
  gameActive = false;&lt;br /&gt;
  &lt;br /&gt;
  // Son d'échec (0006.mp3)&lt;br /&gt;
  myDFPlayer.play(6);&lt;br /&gt;
  &lt;br /&gt;
  // Animation d'échec (clignotement rapide)&lt;br /&gt;
  for (int j = 0; j &amp;lt; 5; j++) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
    }&lt;br /&gt;
    delay(150);&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
    }&lt;br /&gt;
    delay(150);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot; Appuyez sur un bouton pour rejouer&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void gameWon() {&lt;br /&gt;
  Serial.println(&amp;quot;\n╔═══════════════════════════════════╗&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;║      🎉 VICTOIRE! 🎉              ║&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;╚═══════════════════════════════════╝&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;\n  Vous avez réussi les &amp;quot;);&lt;br /&gt;
  Serial.print(maxLevels);&lt;br /&gt;
  Serial.println(&amp;quot; niveaux!&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;  Difficulté: &amp;quot;);&lt;br /&gt;
  printDifficulty();&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  &lt;br /&gt;
  gameActive = false;&lt;br /&gt;
  &lt;br /&gt;
  // Son de victoire (0005.mp3)&lt;br /&gt;
  myDFPlayer.play(5);&lt;br /&gt;
  &lt;br /&gt;
  // Animation de victoire spectaculaire&lt;br /&gt;
  // Vague de lumière rapide&lt;br /&gt;
  for (int j = 0; j &amp;lt; 8; j++) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
      delay(60);&lt;br /&gt;
      digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Clignotement final toutes ensemble&lt;br /&gt;
  for (int j = 0; j &amp;lt; 4; j++) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
    }&lt;br /&gt;
    delay(200);&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
    }&lt;br /&gt;
    delay(200);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\n═══════════════════════════════════&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot; Ajustez le potentiomètre pour&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot; changer de difficulté&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot; Appuyez sur un bouton pour rejouer&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void startupAnimation() {&lt;br /&gt;
  Serial.println(&amp;quot;\nAnimation de démarrage...\n&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Allumage séquentiel&lt;br /&gt;
  for (int j = 0; j &amp;lt; 2; j++) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
      delay(100);&lt;br /&gt;
    }&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
      delay(100);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Flash final&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
  }&lt;br /&gt;
  delay(300);&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Effet feu de bois pour le ruban LED&lt;br /&gt;
void updateFireEffect() {&lt;br /&gt;
  unsigned long currentTime = millis();&lt;br /&gt;
  &lt;br /&gt;
  // Mettre à jour seulement toutes les FIRE_UPDATE_INTERVAL ms&lt;br /&gt;
  if (currentTime - lastFireUpdate &amp;lt; FIRE_UPDATE_INTERVAL) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  lastFireUpdate = currentTime;&lt;br /&gt;
  &lt;br /&gt;
  // Refroidissement: chaque cellule perd un peu de chaleur&lt;br /&gt;
  for (int i = 0; i &amp;lt; NUM_LEDS; i++) {&lt;br /&gt;
    int cooldown = random(0, ((55 * 10) / NUM_LEDS) + 2);&lt;br /&gt;
    if (cooldown &amp;gt;= heat[i]) {&lt;br /&gt;
      heat[i] = 0;&lt;br /&gt;
    } else {&lt;br /&gt;
      heat[i] = heat[i] - cooldown;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Diffusion de chaleur vers le haut&lt;br /&gt;
  for (int k = NUM_LEDS - 1; k &amp;gt;= 2; k--) {&lt;br /&gt;
    heat[k] = (heat[k - 1] + heat[k - 2] + heat[k - 2]) / 3;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Ajout de nouvelles étincelles aléatoires en bas&lt;br /&gt;
  if (random(255) &amp;lt; 120) {&lt;br /&gt;
    int y = random(7);&lt;br /&gt;
    heat[y] = heat[y] + random(160, 255);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Conversion de la chaleur en couleurs&lt;br /&gt;
  for (int j = 0; j &amp;lt; NUM_LEDS; j++) {&lt;br /&gt;
    // Palette de couleurs feu: noir → rouge → orange → jaune → blanc&lt;br /&gt;
    byte temperature = heat[j];&lt;br /&gt;
    &lt;br /&gt;
    // Noir → Rouge foncé&lt;br /&gt;
    byte t192 = scale8_video(temperature, 191);&lt;br /&gt;
    byte heatramp = t192 &amp;amp; 0x3F; // 0..63&lt;br /&gt;
    heatramp &amp;lt;&amp;lt;= 2; // 0..252&lt;br /&gt;
    &lt;br /&gt;
    if (t192 &amp;amp; 0x80) {&lt;br /&gt;
      // Partie la plus chaude - jaune vers blanc&lt;br /&gt;
      leds[j].r = 255;&lt;br /&gt;
      leds[j].g = 255;&lt;br /&gt;
      leds[j].b = heatramp;&lt;br /&gt;
    } else if (t192 &amp;amp; 0x40) {&lt;br /&gt;
      // Partie chaude - rouge vers jaune&lt;br /&gt;
      leds[j].r = 255;&lt;br /&gt;
      leds[j].g = heatramp;&lt;br /&gt;
      leds[j].b = 0;&lt;br /&gt;
    } else {&lt;br /&gt;
      // Partie froide - noir vers rouge&lt;br /&gt;
      leds[j].r = heatramp;&lt;br /&gt;
      leds[j].g = 0;&lt;br /&gt;
      leds[j].b = 0;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  FastLED.show();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Lire le potentiomètre et déterminer la difficulté&lt;br /&gt;
void readDifficulty() {&lt;br /&gt;
  int potValue = analogRead(POTENTIOMETER_PIN);  // 0-4095 sur ESP32&lt;br /&gt;
  &lt;br /&gt;
  // Diviser en 3 zones&lt;br /&gt;
  if (potValue &amp;lt; 1365) {&lt;br /&gt;
    // Zone 1: FACILE (0-1365)&lt;br /&gt;
    currentDifficulty = EASY;&lt;br /&gt;
    maxLevels = 3;&lt;br /&gt;
  } else if (potValue &amp;lt; 2730) {&lt;br /&gt;
    // Zone 2: MOYEN (1365-2730)&lt;br /&gt;
    currentDifficulty = MEDIUM;&lt;br /&gt;
    maxLevels = 4;&lt;br /&gt;
  } else {&lt;br /&gt;
    // Zone 3: DIFFICILE (2730-4095)&lt;br /&gt;
    currentDifficulty = HARD;&lt;br /&gt;
    maxLevels = 6;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Afficher la difficulté actuelle&lt;br /&gt;
void printDifficulty() {&lt;br /&gt;
  switch(currentDifficulty) {&lt;br /&gt;
    case EASY:&lt;br /&gt;
      Serial.print(&amp;quot;FACILE (3 niveaux)&amp;quot;);&lt;br /&gt;
      break;&lt;br /&gt;
    case MEDIUM:&lt;br /&gt;
      Serial.print(&amp;quot;MOYEN (4 niveaux)&amp;quot;);&lt;br /&gt;
      break;&lt;br /&gt;
    case HARD:&lt;br /&gt;
      Serial.print(&amp;quot;DIFFICILE (6 niveaux)&amp;quot;);&lt;br /&gt;
      break;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Conception des boutons &amp;lt;br&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
- Au départ : Bouton lumineux rouge à disposition, le problème est qu'il faut plusieurs couleurs. Alors nous changeons de couleur de la led et voulons remplacer l'opercule rouge par du plexiglass, cependant cela ne se colle pas au bouton. &amp;lt;br&amp;gt;&lt;br /&gt;
- Alors : Nous avons pris des boutons plus petit de plusieurs couleur (rouge, bleu, vert et jaune). Pour les rendre plus grands, nous avons décider de couper du plexiglass en plusieurs formes : bonhomme de neige, sapin, renne, et pain d'épice, nous avons laissé un trou (de 27mm de diamètre) dans chacune des formes afin de mettre les boutons dedans. Le fichier prototype a été réalisé avec inkscape et la découpe avec une découpeuse laser. &amp;lt;br&amp;gt;&lt;br /&gt;
- Pour finir, nous avons rajouté du vinyl de la même couleur que les boutons pour les rendre plus visible sur la cheminée.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Prototype design bouton &amp;lt;br&amp;gt; ==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Fichier:Prototypes Boutons .pdf&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A 11h50, jeu de lumiere marche pas on retourne sur l'ancien.&lt;br /&gt;
&lt;br /&gt;
==premier diaporama : Alors ? Comment ça se passe ?==&lt;br /&gt;
Diaporama type '''Alors ?''': [[media:DiaporamaSuperBrest2024-Alors.odp|Téléchargez et adaptez-le !]]&lt;br /&gt;
&lt;br /&gt;
==second diaporama : Et voilà !==&lt;br /&gt;
Diaporama type '''Et Voilà !''' : [[media:DiaporamaSuperBrest2024-EtVoila.odp|Téléchargez et adaptez-le !]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Sciencehackdaybrest]]&lt;br /&gt;
[[Catégorie:Super Brest]]&lt;br /&gt;
[[Catégorie:Super Brest 2025]]&lt;/div&gt;</summary>
		<author><name>Emma</name></author>	</entry>

	<entry>
		<id>http://wiki.lesfabriquesduponant.net/index.php?title=Super_Brest_2025_:_L%27%C3%A9trange_no%C3%ABl_de_monsieur_Simon&amp;diff=35372</id>
		<title>Super Brest 2025 : L'étrange noël de monsieur Simon</title>
		<link rel="alternate" type="text/html" href="http://wiki.lesfabriquesduponant.net/index.php?title=Super_Brest_2025_:_L%27%C3%A9trange_no%C3%ABl_de_monsieur_Simon&amp;diff=35372"/>
				<updated>2025-11-30T10:49:59Z</updated>
		
		<summary type="html">&lt;p&gt;Emma : /* Conception des boutons  */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Fichier:SuperBrest2025-BADGE.png|200px]]&lt;br /&gt;
&lt;br /&gt;
==résumé du projet==&lt;br /&gt;
Ce hackathon a pour objectif d'adapter le jeu Simon (mémoire des couleurs/sons) en l'adaptant spécifiquement pour la fête de Noël de l'école.&lt;br /&gt;
&lt;br /&gt;
Le projet consiste à :&lt;br /&gt;
&lt;br /&gt;
Utiliser une cheminée existante pour le jeu.&lt;br /&gt;
&lt;br /&gt;
Programmer l'électronique Arduino pour simuler les lumières et les sons de Simon.&lt;br /&gt;
&lt;br /&gt;
Intégrer une thématique Noël (couleurs/sons festifs) pour créer une animation ludique et éducative qui met en avant la créativité.&lt;br /&gt;
&lt;br /&gt;
==membres du projet==&lt;br /&gt;
&lt;br /&gt;
Audrey : Ailée créature &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Emma : Magique arc en ciel &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ewen: Magic flocon &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Syrielle: Espiegle corne &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nadia : Divinité flamboyante &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Bibliographie et webographie sur le projet==&lt;br /&gt;
[[https://www.wiki.lesfabriquesduponant.net/index.php?title=ENIB_2022_-_groupe_A_:_Simon]]&lt;br /&gt;
https://fr.wikipedia.org/wiki/Simon_(jeu)&lt;br /&gt;
==banque d'images==&lt;br /&gt;
[[Fichier:E3F3D4A8-ECC8-40C8-9B21-032B27D7E458 2.jpg|200Pxpx|vignette|centré]]&lt;br /&gt;
&lt;br /&gt;
==prototype qu'on souhaite réaliser ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Prototype simon.jpg|vignette|centré]]&lt;br /&gt;
&lt;br /&gt;
==Schema de cablage==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capture d’écran 2025-11-29 à 15.42.22.png|vignette|centré|schema de cablage]]&lt;br /&gt;
&lt;br /&gt;
==Programme arduino==&lt;br /&gt;
&lt;br /&gt;
Le code à ete crée par l'IA claude , voici le prompt : &amp;lt;br&amp;gt;&lt;br /&gt;
Crée un jeu Simon pour ESP32 avec :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- 4 boutons/LEDs (Rouge/GPIO12-25, Jaune/GPIO13-26, Vert/GPIO14-27, Bleu/GPIO15-33)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- DFPlayer Mini sur GPIO16-17 avec 6 sons Noël (0001-0006.mp3)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Ruban LED WS2812B 144 LEDs sur GPIO32 avec effet feu continu&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Potentiomètre GPIO34 pour 3 difficultés (3/4/6 niveaux)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Son 0005.mp3 pour victoire totale, 0006.mp3 pour échec immédiat&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Bibliothèques : DFRobotDFPlayerMini + FastLED&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Arduino&amp;quot; line&amp;gt;/*&lt;br /&gt;
 * JEU SIMON COMPLET - ESP32 + DFPlayer Mini + Ruban LED Feu&lt;br /&gt;
 * &lt;br /&gt;
 * Câblage:&lt;br /&gt;
 * ─────────────────────────────────────────────&lt;br /&gt;
 * DFPlayer Mini:&lt;br /&gt;
 *   - RX      → GPIO 17 (TX ESP32) + résistance 1kΩ&lt;br /&gt;
 *   - TX      → GPIO 16 (RX ESP32)&lt;br /&gt;
 *   - VCC     → 5V&lt;br /&gt;
 *   - GND     → GND&lt;br /&gt;
 *   - SPK_1/2 → Haut-parleur 3W (4-8Ω)&lt;br /&gt;
 * &lt;br /&gt;
 * 4 Boutons (avec pull-up interne):&lt;br /&gt;
 *   - Bouton ROUGE  → GPIO 12 → GND&lt;br /&gt;
 *   - Bouton VERT   → GPIO 13 → GND&lt;br /&gt;
 *   - Bouton BLEU   → GPIO 14 → GND&lt;br /&gt;
 *   - Bouton JAUNE  → GPIO 15 → GND&lt;br /&gt;
 * &lt;br /&gt;
 * 4 LEDs (avec résistances 220Ω):&lt;br /&gt;
 *   - LED ROUGE  → GPIO 25 → Résistance → GND&lt;br /&gt;
 *   - LED VERTE  → GPIO 26 → Résistance → GND&lt;br /&gt;
 *   - LED BLEUE  → GPIO 27 → Résistance → GND&lt;br /&gt;
 *   - LED JAUNE  → GPIO 33 → Résistance → GND&lt;br /&gt;
 * &lt;br /&gt;
 * Ruban LED (WS2812B - 144 LEDs):&lt;br /&gt;
 *   - DATA → GPIO 32&lt;br /&gt;
 *   - VCC  → 5V (alimentation externe recommandée si &amp;gt;30 LEDs)&lt;br /&gt;
 *   - GND  → GND (commun avec ESP32)&lt;br /&gt;
 * &lt;br /&gt;
 * Potentiomètre (sélection difficulté):&lt;br /&gt;
 *   - Broche gauche  → GND&lt;br /&gt;
 *   - Broche centrale → GPIO 34 (ADC)&lt;br /&gt;
 *   - Broche droite   → 3.3V&lt;br /&gt;
 * &lt;br /&gt;
 * Fichiers MP3 sur carte SD (FAT32):&lt;br /&gt;
 *   - 0001.mp3 : Son bouton ROUGE&lt;br /&gt;
 *   - 0002.mp3 : Son bouton JAUNE&lt;br /&gt;
 *   - 0003.mp3 : Son bouton VERT&lt;br /&gt;
 *   - 0004.mp3 : Son bouton BLEU&lt;br /&gt;
 *   - 0005.mp3 : Son VICTOIRE (après 5 niveaux réussis)&lt;br /&gt;
 *   - 0006.mp3 : Son ÉCHEC (erreur dans la séquence)&lt;br /&gt;
 * &lt;br /&gt;
 * IMPORTANT: Installez la bibliothèque FastLED&lt;br /&gt;
 * (Croquis → Inclure une bibliothèque → Gérer les bibliothèques → FastLED)&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;DFRobotDFPlayerMini.h&amp;gt;&lt;br /&gt;
#include &amp;lt;FastLED.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// Configuration DFPlayer&lt;br /&gt;
HardwareSerial mySoftwareSerial(2);&lt;br /&gt;
DFRobotDFPlayerMini myDFPlayer;&lt;br /&gt;
&lt;br /&gt;
// Configuration Ruban LED&lt;br /&gt;
#define LED_STRIP_PIN 32&lt;br /&gt;
#define NUM_LEDS 144&lt;br /&gt;
#define LED_TYPE WS2812B&lt;br /&gt;
#define COLOR_ORDER GRB&lt;br /&gt;
CRGB leds[NUM_LEDS];&lt;br /&gt;
&lt;br /&gt;
// Configuration Potentiomètre (sélection difficulté)&lt;br /&gt;
#define POTENTIOMETER_PIN 34  // GPIO 34 (ADC1_CH6)&lt;br /&gt;
&lt;br /&gt;
// Niveaux de difficulté&lt;br /&gt;
enum Difficulty {&lt;br /&gt;
  EASY = 0,    // 3 niveaux&lt;br /&gt;
  MEDIUM = 1,  // 4 niveaux&lt;br /&gt;
  HARD = 2     // 6 niveaux&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Difficulty currentDifficulty = MEDIUM;&lt;br /&gt;
int maxLevels = 4;  // Par défaut moyen&lt;br /&gt;
&lt;br /&gt;
// Configuration des pins boutons et LEDs&lt;br /&gt;
const int BUTTON_PINS[4] = {12, 13, 14, 15};  // Rouge, Jaune, Vert, Bleu&lt;br /&gt;
const int LED_PINS[4] = {25, 26, 27, 33};     // Rouge, Jaune, Vert, Bleu&lt;br /&gt;
&lt;br /&gt;
// Noms des couleurs pour l'affichage&lt;br /&gt;
const char* COLOR_NAMES[4] = {&amp;quot;ROUGE&amp;quot;, &amp;quot;JAUNE&amp;quot;, &amp;quot;VERT&amp;quot;, &amp;quot;BLEU&amp;quot;};&lt;br /&gt;
&lt;br /&gt;
// Correspondance couleur -&amp;gt; numéro de son&lt;br /&gt;
const int COLOR_TO_SOUND[4] = {1, 2, 3, 4};  // Rouge=1, Jaune=2, Vert=3, Bleu=4&lt;br /&gt;
&lt;br /&gt;
// Variables du jeu&lt;br /&gt;
int sequence[100];              // Séquence à mémoriser (max 100 niveaux)&lt;br /&gt;
int sequenceLength = 0;         // Longueur actuelle de la séquence&lt;br /&gt;
int playerInput[100];           // Saisie du joueur&lt;br /&gt;
int playerIndex = 0;            // Position dans la saisie&lt;br /&gt;
int level = 1;                  // Niveau actuel&lt;br /&gt;
bool gameActive = false;        // Jeu en cours&lt;br /&gt;
bool waitingForInput = false;   // En attente de la saisie du joueur&lt;br /&gt;
&lt;br /&gt;
// Débounce des boutons&lt;br /&gt;
unsigned long lastButtonPress[4] = {0, 0, 0, 0};&lt;br /&gt;
const unsigned long DEBOUNCE_DELAY = 250;&lt;br /&gt;
&lt;br /&gt;
// Timings du jeu (en millisecondes)&lt;br /&gt;
const int FLASH_DURATION = 500;      // Durée d'allumage d'une LED&lt;br /&gt;
const int PAUSE_BETWEEN_FLASH = 200; // Pause entre deux LEDs&lt;br /&gt;
const int DELAY_AFTER_SEQUENCE = 500;// Délai avant que le joueur joue&lt;br /&gt;
&lt;br /&gt;
// Variables pour l'effet feu&lt;br /&gt;
byte heat[NUM_LEDS];&lt;br /&gt;
unsigned long lastFireUpdate = 0;&lt;br /&gt;
const int FIRE_UPDATE_INTERVAL = 50; // Mise à jour toutes les 50ms&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(115200);&lt;br /&gt;
  delay(1000);&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\n╔═══════════════════════════════════╗&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;║      JEU SIMON - ESP32            ║&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;╚═══════════════════════════════════╝\n&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Configuration des boutons&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    pinMode(BUTTON_PINS[i], INPUT_PULLUP);&lt;br /&gt;
  }&lt;br /&gt;
  Serial.println(&amp;quot;✓ Boutons configurés&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Configuration des LEDs&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    pinMode(LED_PINS[i], OUTPUT);&lt;br /&gt;
    digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
  }&lt;br /&gt;
  Serial.println(&amp;quot;✓ LEDs configurées&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Configuration du ruban LED&lt;br /&gt;
  FastLED.addLeds&amp;lt;LED_TYPE, LED_STRIP_PIN, COLOR_ORDER&amp;gt;(leds, NUM_LEDS);&lt;br /&gt;
  FastLED.setBrightness(100); // Luminosité (0-255)&lt;br /&gt;
  FastLED.clear();&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
  Serial.println(&amp;quot;✓ Ruban LED configuré (144 LEDs)&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Configuration du potentiomètre&lt;br /&gt;
  pinMode(POTENTIOMETER_PIN, INPUT);&lt;br /&gt;
  Serial.println(&amp;quot;✓ Potentiomètre configuré sur GPIO 34&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Lire la difficulté initiale&lt;br /&gt;
  readDifficulty();&lt;br /&gt;
  &lt;br /&gt;
  // Configuration DFPlayer&lt;br /&gt;
  mySoftwareSerial.begin(9600, SERIAL_8N1, 16, 17);&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\nInitialisation du DFPlayer...&amp;quot;);&lt;br /&gt;
  if (!myDFPlayer.begin(mySoftwareSerial)) {&lt;br /&gt;
    Serial.println(&amp;quot;\n✗ ERREUR DFPlayer!&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;Vérifiez:&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;  - Carte SD insérée (FAT32)&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;  - Fichiers 0001.mp3 à 0006.mp3&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;  - Connexions RX/TX&amp;quot;);&lt;br /&gt;
    while(true) { delay(1000); }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;✓ DFPlayer OK!&amp;quot;);&lt;br /&gt;
  myDFPlayer.volume(25);  // Volume (0-30)&lt;br /&gt;
  delay(100);&lt;br /&gt;
  &lt;br /&gt;
  // Animation de démarrage&lt;br /&gt;
  startupAnimation();&lt;br /&gt;
  &lt;br /&gt;
  // Initialiser le générateur aléatoire&lt;br /&gt;
  randomSeed(analogRead(0));&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\n═══════════════════════════════════&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;  DIFFICULTÉ SÉLECTIONNÉE:&amp;quot;);&lt;br /&gt;
  printDifficulty();&lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;   Appuyez sur un bouton pour&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;        commencer le jeu!&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  // Mettre à jour l'effet feu en continu&lt;br /&gt;
  updateFireEffect();&lt;br /&gt;
  &lt;br /&gt;
  if (!gameActive) {&lt;br /&gt;
    // Attendre qu'un bouton soit pressé pour démarrer&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      if (digitalRead(BUTTON_PINS[i]) == LOW) {&lt;br /&gt;
        delay(300);&lt;br /&gt;
        startNewGame();&lt;br /&gt;
        break;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  } else if (waitingForInput) {&lt;br /&gt;
    checkPlayerInput();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void startNewGame() {&lt;br /&gt;
  // Lire la difficulté au début de chaque partie&lt;br /&gt;
  readDifficulty();&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\n╔═══════════════════════════════════╗&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;║      NOUVELLE PARTIE              ║&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;╚═══════════════════════════════════╝&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;\n  Difficulté: &amp;quot;);&lt;br /&gt;
  printDifficulty();&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  &lt;br /&gt;
  gameActive = true;&lt;br /&gt;
  level = 1;&lt;br /&gt;
  sequenceLength = 0;&lt;br /&gt;
  &lt;br /&gt;
  delay(1000);&lt;br /&gt;
  nextLevel();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void nextLevel() {&lt;br /&gt;
  Serial.println(&amp;quot;─────────────────────────────────────&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;         NIVEAU &amp;quot;);&lt;br /&gt;
  Serial.print(level);&lt;br /&gt;
  Serial.print(&amp;quot; / &amp;quot;);&lt;br /&gt;
  Serial.println(maxLevels);&lt;br /&gt;
  Serial.println(&amp;quot;─────────────────────────────────────\n&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Ajouter une couleur aléatoire à la séquence&lt;br /&gt;
  sequence[sequenceLength] = random(0, 4);&lt;br /&gt;
  sequenceLength++;&lt;br /&gt;
  &lt;br /&gt;
  delay(1000);&lt;br /&gt;
  &lt;br /&gt;
  // Afficher la séquence au joueur&lt;br /&gt;
  playSequence();&lt;br /&gt;
  &lt;br /&gt;
  // Attendre la saisie du joueur&lt;br /&gt;
  playerIndex = 0;&lt;br /&gt;
  waitingForInput = true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void playSequence() {&lt;br /&gt;
  Serial.println(&amp;quot;👀 Mémorisez la séquence:\n&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  for (int i = 0; i &amp;lt; sequenceLength; i++) {&lt;br /&gt;
    int color = sequence[i];&lt;br /&gt;
    &lt;br /&gt;
    Serial.print(&amp;quot;   &amp;quot;);&lt;br /&gt;
    Serial.print(i + 1);&lt;br /&gt;
    Serial.print(&amp;quot;. &amp;quot;);&lt;br /&gt;
    Serial.println(COLOR_NAMES[color]);&lt;br /&gt;
    &lt;br /&gt;
    // Allumer la LED et jouer le son&lt;br /&gt;
    digitalWrite(LED_PINS[color], HIGH);&lt;br /&gt;
    myDFPlayer.play(COLOR_TO_SOUND[color]);  // Rouge=1, Jaune=2, Vert=3, Bleu=4&lt;br /&gt;
    &lt;br /&gt;
    delay(FLASH_DURATION);&lt;br /&gt;
    &lt;br /&gt;
    // Éteindre la LED&lt;br /&gt;
    digitalWrite(LED_PINS[color], LOW);&lt;br /&gt;
    &lt;br /&gt;
    // Pause entre les flashs&lt;br /&gt;
    if (i &amp;lt; sequenceLength - 1) {&lt;br /&gt;
      delay(PAUSE_BETWEEN_FLASH);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  delay(DELAY_AFTER_SEQUENCE);&lt;br /&gt;
  Serial.println(&amp;quot;\n🎮 À vous de jouer!\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void checkPlayerInput() {&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    if (digitalRead(BUTTON_PINS[i]) == LOW) {&lt;br /&gt;
      unsigned long currentTime = millis();&lt;br /&gt;
      &lt;br /&gt;
      // Débounce&lt;br /&gt;
      if (currentTime - lastButtonPress[i] &amp;gt; DEBOUNCE_DELAY) {&lt;br /&gt;
        lastButtonPress[i] = currentTime;&lt;br /&gt;
        &lt;br /&gt;
        // Feedback visuel et sonore&lt;br /&gt;
        digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
        myDFPlayer.play(COLOR_TO_SOUND[i]);  // Jouer le son correspondant&lt;br /&gt;
        &lt;br /&gt;
        Serial.print(&amp;quot;   → &amp;quot;);&lt;br /&gt;
        Serial.println(COLOR_NAMES[i]);&lt;br /&gt;
        &lt;br /&gt;
        // Enregistrer la saisie&lt;br /&gt;
        playerInput[playerIndex] = i;&lt;br /&gt;
        &lt;br /&gt;
        delay(300);&lt;br /&gt;
        digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
        &lt;br /&gt;
        // Vérifier si c'est correct&lt;br /&gt;
        if (playerInput[playerIndex] != sequence[playerIndex]) {&lt;br /&gt;
          gameLost();&lt;br /&gt;
          return;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        playerIndex++;&lt;br /&gt;
        &lt;br /&gt;
        // Vérifier si la séquence complète est correcte&lt;br /&gt;
        if (playerIndex &amp;gt;= sequenceLength) {&lt;br /&gt;
          sequenceComplete();&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void sequenceComplete() {&lt;br /&gt;
  Serial.println(&amp;quot;\n✅ Séquence correcte!\n&amp;quot;);&lt;br /&gt;
  waitingForInput = false;&lt;br /&gt;
  &lt;br /&gt;
  level++;&lt;br /&gt;
  &lt;br /&gt;
  // Vérifier si on a atteint le niveau maximum selon la difficulté&lt;br /&gt;
  if (level &amp;gt; maxLevels) {&lt;br /&gt;
    gameWon();&lt;br /&gt;
  } else {&lt;br /&gt;
    delay(500);&lt;br /&gt;
    &lt;br /&gt;
    // Animation de succès (rapide entre chaque niveau)&lt;br /&gt;
    for (int j = 0; j &amp;lt; 2; j++) {&lt;br /&gt;
      for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
        digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
      }&lt;br /&gt;
      delay(100);&lt;br /&gt;
      for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
        digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
      }&lt;br /&gt;
      delay(100);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    delay(1000);&lt;br /&gt;
    nextLevel();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void gameLost() {&lt;br /&gt;
  Serial.println(&amp;quot;\n╔═══════════════════════════════════╗&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;║          ❌ ERREUR!               ║&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;╚═══════════════════════════════════╝&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;\n   Vous étiez au niveau &amp;quot;);&lt;br /&gt;
  Serial.println(level);&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  &lt;br /&gt;
  waitingForInput = false;&lt;br /&gt;
  gameActive = false;&lt;br /&gt;
  &lt;br /&gt;
  // Son d'échec (0006.mp3)&lt;br /&gt;
  myDFPlayer.play(6);&lt;br /&gt;
  &lt;br /&gt;
  // Animation d'échec (clignotement rapide)&lt;br /&gt;
  for (int j = 0; j &amp;lt; 5; j++) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
    }&lt;br /&gt;
    delay(150);&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
    }&lt;br /&gt;
    delay(150);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot; Appuyez sur un bouton pour rejouer&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void gameWon() {&lt;br /&gt;
  Serial.println(&amp;quot;\n╔═══════════════════════════════════╗&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;║      🎉 VICTOIRE! 🎉              ║&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;╚═══════════════════════════════════╝&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;\n  Vous avez réussi les &amp;quot;);&lt;br /&gt;
  Serial.print(maxLevels);&lt;br /&gt;
  Serial.println(&amp;quot; niveaux!&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;  Difficulté: &amp;quot;);&lt;br /&gt;
  printDifficulty();&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  &lt;br /&gt;
  gameActive = false;&lt;br /&gt;
  &lt;br /&gt;
  // Son de victoire (0005.mp3)&lt;br /&gt;
  myDFPlayer.play(5);&lt;br /&gt;
  &lt;br /&gt;
  // Animation de victoire spectaculaire&lt;br /&gt;
  // Vague de lumière rapide&lt;br /&gt;
  for (int j = 0; j &amp;lt; 8; j++) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
      delay(60);&lt;br /&gt;
      digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Clignotement final toutes ensemble&lt;br /&gt;
  for (int j = 0; j &amp;lt; 4; j++) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
    }&lt;br /&gt;
    delay(200);&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
    }&lt;br /&gt;
    delay(200);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\n═══════════════════════════════════&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot; Ajustez le potentiomètre pour&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot; changer de difficulté&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot; Appuyez sur un bouton pour rejouer&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void startupAnimation() {&lt;br /&gt;
  Serial.println(&amp;quot;\nAnimation de démarrage...\n&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Allumage séquentiel&lt;br /&gt;
  for (int j = 0; j &amp;lt; 2; j++) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
      delay(100);&lt;br /&gt;
    }&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
      delay(100);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Flash final&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
  }&lt;br /&gt;
  delay(300);&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Effet feu de bois pour le ruban LED&lt;br /&gt;
void updateFireEffect() {&lt;br /&gt;
  unsigned long currentTime = millis();&lt;br /&gt;
  &lt;br /&gt;
  // Mettre à jour seulement toutes les FIRE_UPDATE_INTERVAL ms&lt;br /&gt;
  if (currentTime - lastFireUpdate &amp;lt; FIRE_UPDATE_INTERVAL) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  lastFireUpdate = currentTime;&lt;br /&gt;
  &lt;br /&gt;
  // Refroidissement: chaque cellule perd un peu de chaleur&lt;br /&gt;
  for (int i = 0; i &amp;lt; NUM_LEDS; i++) {&lt;br /&gt;
    int cooldown = random(0, ((55 * 10) / NUM_LEDS) + 2);&lt;br /&gt;
    if (cooldown &amp;gt;= heat[i]) {&lt;br /&gt;
      heat[i] = 0;&lt;br /&gt;
    } else {&lt;br /&gt;
      heat[i] = heat[i] - cooldown;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Diffusion de chaleur vers le haut&lt;br /&gt;
  for (int k = NUM_LEDS - 1; k &amp;gt;= 2; k--) {&lt;br /&gt;
    heat[k] = (heat[k - 1] + heat[k - 2] + heat[k - 2]) / 3;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Ajout de nouvelles étincelles aléatoires en bas&lt;br /&gt;
  if (random(255) &amp;lt; 120) {&lt;br /&gt;
    int y = random(7);&lt;br /&gt;
    heat[y] = heat[y] + random(160, 255);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Conversion de la chaleur en couleurs&lt;br /&gt;
  for (int j = 0; j &amp;lt; NUM_LEDS; j++) {&lt;br /&gt;
    // Palette de couleurs feu: noir → rouge → orange → jaune → blanc&lt;br /&gt;
    byte temperature = heat[j];&lt;br /&gt;
    &lt;br /&gt;
    // Noir → Rouge foncé&lt;br /&gt;
    byte t192 = scale8_video(temperature, 191);&lt;br /&gt;
    byte heatramp = t192 &amp;amp; 0x3F; // 0..63&lt;br /&gt;
    heatramp &amp;lt;&amp;lt;= 2; // 0..252&lt;br /&gt;
    &lt;br /&gt;
    if (t192 &amp;amp; 0x80) {&lt;br /&gt;
      // Partie la plus chaude - jaune vers blanc&lt;br /&gt;
      leds[j].r = 255;&lt;br /&gt;
      leds[j].g = 255;&lt;br /&gt;
      leds[j].b = heatramp;&lt;br /&gt;
    } else if (t192 &amp;amp; 0x40) {&lt;br /&gt;
      // Partie chaude - rouge vers jaune&lt;br /&gt;
      leds[j].r = 255;&lt;br /&gt;
      leds[j].g = heatramp;&lt;br /&gt;
      leds[j].b = 0;&lt;br /&gt;
    } else {&lt;br /&gt;
      // Partie froide - noir vers rouge&lt;br /&gt;
      leds[j].r = heatramp;&lt;br /&gt;
      leds[j].g = 0;&lt;br /&gt;
      leds[j].b = 0;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  FastLED.show();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Lire le potentiomètre et déterminer la difficulté&lt;br /&gt;
void readDifficulty() {&lt;br /&gt;
  int potValue = analogRead(POTENTIOMETER_PIN);  // 0-4095 sur ESP32&lt;br /&gt;
  &lt;br /&gt;
  // Diviser en 3 zones&lt;br /&gt;
  if (potValue &amp;lt; 1365) {&lt;br /&gt;
    // Zone 1: FACILE (0-1365)&lt;br /&gt;
    currentDifficulty = EASY;&lt;br /&gt;
    maxLevels = 3;&lt;br /&gt;
  } else if (potValue &amp;lt; 2730) {&lt;br /&gt;
    // Zone 2: MOYEN (1365-2730)&lt;br /&gt;
    currentDifficulty = MEDIUM;&lt;br /&gt;
    maxLevels = 4;&lt;br /&gt;
  } else {&lt;br /&gt;
    // Zone 3: DIFFICILE (2730-4095)&lt;br /&gt;
    currentDifficulty = HARD;&lt;br /&gt;
    maxLevels = 6;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Afficher la difficulté actuelle&lt;br /&gt;
void printDifficulty() {&lt;br /&gt;
  switch(currentDifficulty) {&lt;br /&gt;
    case EASY:&lt;br /&gt;
      Serial.print(&amp;quot;FACILE (3 niveaux)&amp;quot;);&lt;br /&gt;
      break;&lt;br /&gt;
    case MEDIUM:&lt;br /&gt;
      Serial.print(&amp;quot;MOYEN (4 niveaux)&amp;quot;);&lt;br /&gt;
      break;&lt;br /&gt;
    case HARD:&lt;br /&gt;
      Serial.print(&amp;quot;DIFFICILE (6 niveaux)&amp;quot;);&lt;br /&gt;
      break;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Conception des boutons &amp;lt;br&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
- Au départ : Bouton lumineux rouge à disposition, le problème est qu'il faut plusieurs couleurs. Alors nous changeons de couleur de la led et voulons remplacer l'opercule rouge par du plexiglass, cependant cela ne se colle pas au bouton. &amp;lt;br&amp;gt;&lt;br /&gt;
- Alors : Nous avons pris des boutons plus petit de plusieurs couleur (rouge, bleu, vert et jaune). Pour les rendre plus grands, nous avons décider de couper du plexiglass en plusieurs formes : bonhomme de neige, sapin, renne, et pain d'épice, nous avons laissé un trou (de 27mm de diamètre) dans chacune des formes afin de mettre les boutons dedans. Le fichier prototype a été réalisé avec inkscape et la découpe avec une découpeuse laser. &amp;lt;br&amp;gt;&lt;br /&gt;
- Pour finir, nous avons rajouté du vinyl de la même couleur que les boutons pour les rendre plus visible sur la cheminée.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Prototype design bouton &amp;lt;br&amp;gt; ==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Fichier:Prototypes Boutons .pdf&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==premier diaporama : Alors ? Comment ça se passe ?==&lt;br /&gt;
Diaporama type '''Alors ?''': [[media:DiaporamaSuperBrest2024-Alors.odp|Téléchargez et adaptez-le !]]&lt;br /&gt;
&lt;br /&gt;
==second diaporama : Et voilà !==&lt;br /&gt;
Diaporama type '''Et Voilà !''' : [[media:DiaporamaSuperBrest2024-EtVoila.odp|Téléchargez et adaptez-le !]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Sciencehackdaybrest]]&lt;br /&gt;
[[Catégorie:Super Brest]]&lt;br /&gt;
[[Catégorie:Super Brest 2025]]&lt;/div&gt;</summary>
		<author><name>Emma</name></author>	</entry>

	<entry>
		<id>http://wiki.lesfabriquesduponant.net/index.php?title=Super_Brest_2025_:_L%27%C3%A9trange_no%C3%ABl_de_monsieur_Simon&amp;diff=35371</id>
		<title>Super Brest 2025 : L'étrange noël de monsieur Simon</title>
		<link rel="alternate" type="text/html" href="http://wiki.lesfabriquesduponant.net/index.php?title=Super_Brest_2025_:_L%27%C3%A9trange_no%C3%ABl_de_monsieur_Simon&amp;diff=35371"/>
				<updated>2025-11-30T10:43:37Z</updated>
		
		<summary type="html">&lt;p&gt;Emma : /* Prototype design bouton  */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Fichier:SuperBrest2025-BADGE.png|200px]]&lt;br /&gt;
&lt;br /&gt;
==résumé du projet==&lt;br /&gt;
Ce hackathon a pour objectif d'adapter le jeu Simon (mémoire des couleurs/sons) en l'adaptant spécifiquement pour la fête de Noël de l'école.&lt;br /&gt;
&lt;br /&gt;
Le projet consiste à :&lt;br /&gt;
&lt;br /&gt;
Utiliser une cheminée existante pour le jeu.&lt;br /&gt;
&lt;br /&gt;
Programmer l'électronique Arduino pour simuler les lumières et les sons de Simon.&lt;br /&gt;
&lt;br /&gt;
Intégrer une thématique Noël (couleurs/sons festifs) pour créer une animation ludique et éducative qui met en avant la créativité.&lt;br /&gt;
&lt;br /&gt;
==membres du projet==&lt;br /&gt;
&lt;br /&gt;
Audrey : Ailée créature &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Emma : Magique arc en ciel &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ewen: Magic flocon &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Syrielle: Espiegle corne &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nadia : Divinité flamboyante &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Bibliographie et webographie sur le projet==&lt;br /&gt;
[[https://www.wiki.lesfabriquesduponant.net/index.php?title=ENIB_2022_-_groupe_A_:_Simon]]&lt;br /&gt;
https://fr.wikipedia.org/wiki/Simon_(jeu)&lt;br /&gt;
==banque d'images==&lt;br /&gt;
[[Fichier:E3F3D4A8-ECC8-40C8-9B21-032B27D7E458 2.jpg|200Pxpx|vignette|centré]]&lt;br /&gt;
&lt;br /&gt;
==prototype qu'on souhaite réaliser ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Prototype simon.jpg|vignette|centré]]&lt;br /&gt;
&lt;br /&gt;
==Schema de cablage==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capture d’écran 2025-11-29 à 15.42.22.png|vignette|centré|schema de cablage]]&lt;br /&gt;
&lt;br /&gt;
==Programme arduino==&lt;br /&gt;
&lt;br /&gt;
Le code à ete crée par l'IA claude , voici le prompt : &amp;lt;br&amp;gt;&lt;br /&gt;
Crée un jeu Simon pour ESP32 avec :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- 4 boutons/LEDs (Rouge/GPIO12-25, Jaune/GPIO13-26, Vert/GPIO14-27, Bleu/GPIO15-33)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- DFPlayer Mini sur GPIO16-17 avec 6 sons Noël (0001-0006.mp3)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Ruban LED WS2812B 144 LEDs sur GPIO32 avec effet feu continu&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Potentiomètre GPIO34 pour 3 difficultés (3/4/6 niveaux)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Son 0005.mp3 pour victoire totale, 0006.mp3 pour échec immédiat&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Bibliothèques : DFRobotDFPlayerMini + FastLED&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Arduino&amp;quot; line&amp;gt;/*&lt;br /&gt;
 * JEU SIMON COMPLET - ESP32 + DFPlayer Mini + Ruban LED Feu&lt;br /&gt;
 * &lt;br /&gt;
 * Câblage:&lt;br /&gt;
 * ─────────────────────────────────────────────&lt;br /&gt;
 * DFPlayer Mini:&lt;br /&gt;
 *   - RX      → GPIO 17 (TX ESP32) + résistance 1kΩ&lt;br /&gt;
 *   - TX      → GPIO 16 (RX ESP32)&lt;br /&gt;
 *   - VCC     → 5V&lt;br /&gt;
 *   - GND     → GND&lt;br /&gt;
 *   - SPK_1/2 → Haut-parleur 3W (4-8Ω)&lt;br /&gt;
 * &lt;br /&gt;
 * 4 Boutons (avec pull-up interne):&lt;br /&gt;
 *   - Bouton ROUGE  → GPIO 12 → GND&lt;br /&gt;
 *   - Bouton VERT   → GPIO 13 → GND&lt;br /&gt;
 *   - Bouton BLEU   → GPIO 14 → GND&lt;br /&gt;
 *   - Bouton JAUNE  → GPIO 15 → GND&lt;br /&gt;
 * &lt;br /&gt;
 * 4 LEDs (avec résistances 220Ω):&lt;br /&gt;
 *   - LED ROUGE  → GPIO 25 → Résistance → GND&lt;br /&gt;
 *   - LED VERTE  → GPIO 26 → Résistance → GND&lt;br /&gt;
 *   - LED BLEUE  → GPIO 27 → Résistance → GND&lt;br /&gt;
 *   - LED JAUNE  → GPIO 33 → Résistance → GND&lt;br /&gt;
 * &lt;br /&gt;
 * Ruban LED (WS2812B - 144 LEDs):&lt;br /&gt;
 *   - DATA → GPIO 32&lt;br /&gt;
 *   - VCC  → 5V (alimentation externe recommandée si &amp;gt;30 LEDs)&lt;br /&gt;
 *   - GND  → GND (commun avec ESP32)&lt;br /&gt;
 * &lt;br /&gt;
 * Potentiomètre (sélection difficulté):&lt;br /&gt;
 *   - Broche gauche  → GND&lt;br /&gt;
 *   - Broche centrale → GPIO 34 (ADC)&lt;br /&gt;
 *   - Broche droite   → 3.3V&lt;br /&gt;
 * &lt;br /&gt;
 * Fichiers MP3 sur carte SD (FAT32):&lt;br /&gt;
 *   - 0001.mp3 : Son bouton ROUGE&lt;br /&gt;
 *   - 0002.mp3 : Son bouton JAUNE&lt;br /&gt;
 *   - 0003.mp3 : Son bouton VERT&lt;br /&gt;
 *   - 0004.mp3 : Son bouton BLEU&lt;br /&gt;
 *   - 0005.mp3 : Son VICTOIRE (après 5 niveaux réussis)&lt;br /&gt;
 *   - 0006.mp3 : Son ÉCHEC (erreur dans la séquence)&lt;br /&gt;
 * &lt;br /&gt;
 * IMPORTANT: Installez la bibliothèque FastLED&lt;br /&gt;
 * (Croquis → Inclure une bibliothèque → Gérer les bibliothèques → FastLED)&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;DFRobotDFPlayerMini.h&amp;gt;&lt;br /&gt;
#include &amp;lt;FastLED.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// Configuration DFPlayer&lt;br /&gt;
HardwareSerial mySoftwareSerial(2);&lt;br /&gt;
DFRobotDFPlayerMini myDFPlayer;&lt;br /&gt;
&lt;br /&gt;
// Configuration Ruban LED&lt;br /&gt;
#define LED_STRIP_PIN 32&lt;br /&gt;
#define NUM_LEDS 144&lt;br /&gt;
#define LED_TYPE WS2812B&lt;br /&gt;
#define COLOR_ORDER GRB&lt;br /&gt;
CRGB leds[NUM_LEDS];&lt;br /&gt;
&lt;br /&gt;
// Configuration Potentiomètre (sélection difficulté)&lt;br /&gt;
#define POTENTIOMETER_PIN 34  // GPIO 34 (ADC1_CH6)&lt;br /&gt;
&lt;br /&gt;
// Niveaux de difficulté&lt;br /&gt;
enum Difficulty {&lt;br /&gt;
  EASY = 0,    // 3 niveaux&lt;br /&gt;
  MEDIUM = 1,  // 4 niveaux&lt;br /&gt;
  HARD = 2     // 6 niveaux&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Difficulty currentDifficulty = MEDIUM;&lt;br /&gt;
int maxLevels = 4;  // Par défaut moyen&lt;br /&gt;
&lt;br /&gt;
// Configuration des pins boutons et LEDs&lt;br /&gt;
const int BUTTON_PINS[4] = {12, 13, 14, 15};  // Rouge, Jaune, Vert, Bleu&lt;br /&gt;
const int LED_PINS[4] = {25, 26, 27, 33};     // Rouge, Jaune, Vert, Bleu&lt;br /&gt;
&lt;br /&gt;
// Noms des couleurs pour l'affichage&lt;br /&gt;
const char* COLOR_NAMES[4] = {&amp;quot;ROUGE&amp;quot;, &amp;quot;JAUNE&amp;quot;, &amp;quot;VERT&amp;quot;, &amp;quot;BLEU&amp;quot;};&lt;br /&gt;
&lt;br /&gt;
// Correspondance couleur -&amp;gt; numéro de son&lt;br /&gt;
const int COLOR_TO_SOUND[4] = {1, 2, 3, 4};  // Rouge=1, Jaune=2, Vert=3, Bleu=4&lt;br /&gt;
&lt;br /&gt;
// Variables du jeu&lt;br /&gt;
int sequence[100];              // Séquence à mémoriser (max 100 niveaux)&lt;br /&gt;
int sequenceLength = 0;         // Longueur actuelle de la séquence&lt;br /&gt;
int playerInput[100];           // Saisie du joueur&lt;br /&gt;
int playerIndex = 0;            // Position dans la saisie&lt;br /&gt;
int level = 1;                  // Niveau actuel&lt;br /&gt;
bool gameActive = false;        // Jeu en cours&lt;br /&gt;
bool waitingForInput = false;   // En attente de la saisie du joueur&lt;br /&gt;
&lt;br /&gt;
// Débounce des boutons&lt;br /&gt;
unsigned long lastButtonPress[4] = {0, 0, 0, 0};&lt;br /&gt;
const unsigned long DEBOUNCE_DELAY = 250;&lt;br /&gt;
&lt;br /&gt;
// Timings du jeu (en millisecondes)&lt;br /&gt;
const int FLASH_DURATION = 500;      // Durée d'allumage d'une LED&lt;br /&gt;
const int PAUSE_BETWEEN_FLASH = 200; // Pause entre deux LEDs&lt;br /&gt;
const int DELAY_AFTER_SEQUENCE = 500;// Délai avant que le joueur joue&lt;br /&gt;
&lt;br /&gt;
// Variables pour l'effet feu&lt;br /&gt;
byte heat[NUM_LEDS];&lt;br /&gt;
unsigned long lastFireUpdate = 0;&lt;br /&gt;
const int FIRE_UPDATE_INTERVAL = 50; // Mise à jour toutes les 50ms&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(115200);&lt;br /&gt;
  delay(1000);&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\n╔═══════════════════════════════════╗&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;║      JEU SIMON - ESP32            ║&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;╚═══════════════════════════════════╝\n&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Configuration des boutons&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    pinMode(BUTTON_PINS[i], INPUT_PULLUP);&lt;br /&gt;
  }&lt;br /&gt;
  Serial.println(&amp;quot;✓ Boutons configurés&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Configuration des LEDs&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    pinMode(LED_PINS[i], OUTPUT);&lt;br /&gt;
    digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
  }&lt;br /&gt;
  Serial.println(&amp;quot;✓ LEDs configurées&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Configuration du ruban LED&lt;br /&gt;
  FastLED.addLeds&amp;lt;LED_TYPE, LED_STRIP_PIN, COLOR_ORDER&amp;gt;(leds, NUM_LEDS);&lt;br /&gt;
  FastLED.setBrightness(100); // Luminosité (0-255)&lt;br /&gt;
  FastLED.clear();&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
  Serial.println(&amp;quot;✓ Ruban LED configuré (144 LEDs)&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Configuration du potentiomètre&lt;br /&gt;
  pinMode(POTENTIOMETER_PIN, INPUT);&lt;br /&gt;
  Serial.println(&amp;quot;✓ Potentiomètre configuré sur GPIO 34&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Lire la difficulté initiale&lt;br /&gt;
  readDifficulty();&lt;br /&gt;
  &lt;br /&gt;
  // Configuration DFPlayer&lt;br /&gt;
  mySoftwareSerial.begin(9600, SERIAL_8N1, 16, 17);&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\nInitialisation du DFPlayer...&amp;quot;);&lt;br /&gt;
  if (!myDFPlayer.begin(mySoftwareSerial)) {&lt;br /&gt;
    Serial.println(&amp;quot;\n✗ ERREUR DFPlayer!&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;Vérifiez:&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;  - Carte SD insérée (FAT32)&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;  - Fichiers 0001.mp3 à 0006.mp3&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;  - Connexions RX/TX&amp;quot;);&lt;br /&gt;
    while(true) { delay(1000); }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;✓ DFPlayer OK!&amp;quot;);&lt;br /&gt;
  myDFPlayer.volume(25);  // Volume (0-30)&lt;br /&gt;
  delay(100);&lt;br /&gt;
  &lt;br /&gt;
  // Animation de démarrage&lt;br /&gt;
  startupAnimation();&lt;br /&gt;
  &lt;br /&gt;
  // Initialiser le générateur aléatoire&lt;br /&gt;
  randomSeed(analogRead(0));&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\n═══════════════════════════════════&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;  DIFFICULTÉ SÉLECTIONNÉE:&amp;quot;);&lt;br /&gt;
  printDifficulty();&lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;   Appuyez sur un bouton pour&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;        commencer le jeu!&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  // Mettre à jour l'effet feu en continu&lt;br /&gt;
  updateFireEffect();&lt;br /&gt;
  &lt;br /&gt;
  if (!gameActive) {&lt;br /&gt;
    // Attendre qu'un bouton soit pressé pour démarrer&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      if (digitalRead(BUTTON_PINS[i]) == LOW) {&lt;br /&gt;
        delay(300);&lt;br /&gt;
        startNewGame();&lt;br /&gt;
        break;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  } else if (waitingForInput) {&lt;br /&gt;
    checkPlayerInput();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void startNewGame() {&lt;br /&gt;
  // Lire la difficulté au début de chaque partie&lt;br /&gt;
  readDifficulty();&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\n╔═══════════════════════════════════╗&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;║      NOUVELLE PARTIE              ║&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;╚═══════════════════════════════════╝&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;\n  Difficulté: &amp;quot;);&lt;br /&gt;
  printDifficulty();&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  &lt;br /&gt;
  gameActive = true;&lt;br /&gt;
  level = 1;&lt;br /&gt;
  sequenceLength = 0;&lt;br /&gt;
  &lt;br /&gt;
  delay(1000);&lt;br /&gt;
  nextLevel();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void nextLevel() {&lt;br /&gt;
  Serial.println(&amp;quot;─────────────────────────────────────&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;         NIVEAU &amp;quot;);&lt;br /&gt;
  Serial.print(level);&lt;br /&gt;
  Serial.print(&amp;quot; / &amp;quot;);&lt;br /&gt;
  Serial.println(maxLevels);&lt;br /&gt;
  Serial.println(&amp;quot;─────────────────────────────────────\n&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Ajouter une couleur aléatoire à la séquence&lt;br /&gt;
  sequence[sequenceLength] = random(0, 4);&lt;br /&gt;
  sequenceLength++;&lt;br /&gt;
  &lt;br /&gt;
  delay(1000);&lt;br /&gt;
  &lt;br /&gt;
  // Afficher la séquence au joueur&lt;br /&gt;
  playSequence();&lt;br /&gt;
  &lt;br /&gt;
  // Attendre la saisie du joueur&lt;br /&gt;
  playerIndex = 0;&lt;br /&gt;
  waitingForInput = true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void playSequence() {&lt;br /&gt;
  Serial.println(&amp;quot;👀 Mémorisez la séquence:\n&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  for (int i = 0; i &amp;lt; sequenceLength; i++) {&lt;br /&gt;
    int color = sequence[i];&lt;br /&gt;
    &lt;br /&gt;
    Serial.print(&amp;quot;   &amp;quot;);&lt;br /&gt;
    Serial.print(i + 1);&lt;br /&gt;
    Serial.print(&amp;quot;. &amp;quot;);&lt;br /&gt;
    Serial.println(COLOR_NAMES[color]);&lt;br /&gt;
    &lt;br /&gt;
    // Allumer la LED et jouer le son&lt;br /&gt;
    digitalWrite(LED_PINS[color], HIGH);&lt;br /&gt;
    myDFPlayer.play(COLOR_TO_SOUND[color]);  // Rouge=1, Jaune=2, Vert=3, Bleu=4&lt;br /&gt;
    &lt;br /&gt;
    delay(FLASH_DURATION);&lt;br /&gt;
    &lt;br /&gt;
    // Éteindre la LED&lt;br /&gt;
    digitalWrite(LED_PINS[color], LOW);&lt;br /&gt;
    &lt;br /&gt;
    // Pause entre les flashs&lt;br /&gt;
    if (i &amp;lt; sequenceLength - 1) {&lt;br /&gt;
      delay(PAUSE_BETWEEN_FLASH);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  delay(DELAY_AFTER_SEQUENCE);&lt;br /&gt;
  Serial.println(&amp;quot;\n🎮 À vous de jouer!\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void checkPlayerInput() {&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    if (digitalRead(BUTTON_PINS[i]) == LOW) {&lt;br /&gt;
      unsigned long currentTime = millis();&lt;br /&gt;
      &lt;br /&gt;
      // Débounce&lt;br /&gt;
      if (currentTime - lastButtonPress[i] &amp;gt; DEBOUNCE_DELAY) {&lt;br /&gt;
        lastButtonPress[i] = currentTime;&lt;br /&gt;
        &lt;br /&gt;
        // Feedback visuel et sonore&lt;br /&gt;
        digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
        myDFPlayer.play(COLOR_TO_SOUND[i]);  // Jouer le son correspondant&lt;br /&gt;
        &lt;br /&gt;
        Serial.print(&amp;quot;   → &amp;quot;);&lt;br /&gt;
        Serial.println(COLOR_NAMES[i]);&lt;br /&gt;
        &lt;br /&gt;
        // Enregistrer la saisie&lt;br /&gt;
        playerInput[playerIndex] = i;&lt;br /&gt;
        &lt;br /&gt;
        delay(300);&lt;br /&gt;
        digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
        &lt;br /&gt;
        // Vérifier si c'est correct&lt;br /&gt;
        if (playerInput[playerIndex] != sequence[playerIndex]) {&lt;br /&gt;
          gameLost();&lt;br /&gt;
          return;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        playerIndex++;&lt;br /&gt;
        &lt;br /&gt;
        // Vérifier si la séquence complète est correcte&lt;br /&gt;
        if (playerIndex &amp;gt;= sequenceLength) {&lt;br /&gt;
          sequenceComplete();&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void sequenceComplete() {&lt;br /&gt;
  Serial.println(&amp;quot;\n✅ Séquence correcte!\n&amp;quot;);&lt;br /&gt;
  waitingForInput = false;&lt;br /&gt;
  &lt;br /&gt;
  level++;&lt;br /&gt;
  &lt;br /&gt;
  // Vérifier si on a atteint le niveau maximum selon la difficulté&lt;br /&gt;
  if (level &amp;gt; maxLevels) {&lt;br /&gt;
    gameWon();&lt;br /&gt;
  } else {&lt;br /&gt;
    delay(500);&lt;br /&gt;
    &lt;br /&gt;
    // Animation de succès (rapide entre chaque niveau)&lt;br /&gt;
    for (int j = 0; j &amp;lt; 2; j++) {&lt;br /&gt;
      for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
        digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
      }&lt;br /&gt;
      delay(100);&lt;br /&gt;
      for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
        digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
      }&lt;br /&gt;
      delay(100);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    delay(1000);&lt;br /&gt;
    nextLevel();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void gameLost() {&lt;br /&gt;
  Serial.println(&amp;quot;\n╔═══════════════════════════════════╗&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;║          ❌ ERREUR!               ║&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;╚═══════════════════════════════════╝&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;\n   Vous étiez au niveau &amp;quot;);&lt;br /&gt;
  Serial.println(level);&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  &lt;br /&gt;
  waitingForInput = false;&lt;br /&gt;
  gameActive = false;&lt;br /&gt;
  &lt;br /&gt;
  // Son d'échec (0006.mp3)&lt;br /&gt;
  myDFPlayer.play(6);&lt;br /&gt;
  &lt;br /&gt;
  // Animation d'échec (clignotement rapide)&lt;br /&gt;
  for (int j = 0; j &amp;lt; 5; j++) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
    }&lt;br /&gt;
    delay(150);&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
    }&lt;br /&gt;
    delay(150);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot; Appuyez sur un bouton pour rejouer&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void gameWon() {&lt;br /&gt;
  Serial.println(&amp;quot;\n╔═══════════════════════════════════╗&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;║      🎉 VICTOIRE! 🎉              ║&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;╚═══════════════════════════════════╝&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;\n  Vous avez réussi les &amp;quot;);&lt;br /&gt;
  Serial.print(maxLevels);&lt;br /&gt;
  Serial.println(&amp;quot; niveaux!&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;  Difficulté: &amp;quot;);&lt;br /&gt;
  printDifficulty();&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  &lt;br /&gt;
  gameActive = false;&lt;br /&gt;
  &lt;br /&gt;
  // Son de victoire (0005.mp3)&lt;br /&gt;
  myDFPlayer.play(5);&lt;br /&gt;
  &lt;br /&gt;
  // Animation de victoire spectaculaire&lt;br /&gt;
  // Vague de lumière rapide&lt;br /&gt;
  for (int j = 0; j &amp;lt; 8; j++) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
      delay(60);&lt;br /&gt;
      digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Clignotement final toutes ensemble&lt;br /&gt;
  for (int j = 0; j &amp;lt; 4; j++) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
    }&lt;br /&gt;
    delay(200);&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
    }&lt;br /&gt;
    delay(200);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\n═══════════════════════════════════&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot; Ajustez le potentiomètre pour&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot; changer de difficulté&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot; Appuyez sur un bouton pour rejouer&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void startupAnimation() {&lt;br /&gt;
  Serial.println(&amp;quot;\nAnimation de démarrage...\n&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Allumage séquentiel&lt;br /&gt;
  for (int j = 0; j &amp;lt; 2; j++) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
      delay(100);&lt;br /&gt;
    }&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
      delay(100);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Flash final&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
  }&lt;br /&gt;
  delay(300);&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Effet feu de bois pour le ruban LED&lt;br /&gt;
void updateFireEffect() {&lt;br /&gt;
  unsigned long currentTime = millis();&lt;br /&gt;
  &lt;br /&gt;
  // Mettre à jour seulement toutes les FIRE_UPDATE_INTERVAL ms&lt;br /&gt;
  if (currentTime - lastFireUpdate &amp;lt; FIRE_UPDATE_INTERVAL) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  lastFireUpdate = currentTime;&lt;br /&gt;
  &lt;br /&gt;
  // Refroidissement: chaque cellule perd un peu de chaleur&lt;br /&gt;
  for (int i = 0; i &amp;lt; NUM_LEDS; i++) {&lt;br /&gt;
    int cooldown = random(0, ((55 * 10) / NUM_LEDS) + 2);&lt;br /&gt;
    if (cooldown &amp;gt;= heat[i]) {&lt;br /&gt;
      heat[i] = 0;&lt;br /&gt;
    } else {&lt;br /&gt;
      heat[i] = heat[i] - cooldown;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Diffusion de chaleur vers le haut&lt;br /&gt;
  for (int k = NUM_LEDS - 1; k &amp;gt;= 2; k--) {&lt;br /&gt;
    heat[k] = (heat[k - 1] + heat[k - 2] + heat[k - 2]) / 3;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Ajout de nouvelles étincelles aléatoires en bas&lt;br /&gt;
  if (random(255) &amp;lt; 120) {&lt;br /&gt;
    int y = random(7);&lt;br /&gt;
    heat[y] = heat[y] + random(160, 255);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Conversion de la chaleur en couleurs&lt;br /&gt;
  for (int j = 0; j &amp;lt; NUM_LEDS; j++) {&lt;br /&gt;
    // Palette de couleurs feu: noir → rouge → orange → jaune → blanc&lt;br /&gt;
    byte temperature = heat[j];&lt;br /&gt;
    &lt;br /&gt;
    // Noir → Rouge foncé&lt;br /&gt;
    byte t192 = scale8_video(temperature, 191);&lt;br /&gt;
    byte heatramp = t192 &amp;amp; 0x3F; // 0..63&lt;br /&gt;
    heatramp &amp;lt;&amp;lt;= 2; // 0..252&lt;br /&gt;
    &lt;br /&gt;
    if (t192 &amp;amp; 0x80) {&lt;br /&gt;
      // Partie la plus chaude - jaune vers blanc&lt;br /&gt;
      leds[j].r = 255;&lt;br /&gt;
      leds[j].g = 255;&lt;br /&gt;
      leds[j].b = heatramp;&lt;br /&gt;
    } else if (t192 &amp;amp; 0x40) {&lt;br /&gt;
      // Partie chaude - rouge vers jaune&lt;br /&gt;
      leds[j].r = 255;&lt;br /&gt;
      leds[j].g = heatramp;&lt;br /&gt;
      leds[j].b = 0;&lt;br /&gt;
    } else {&lt;br /&gt;
      // Partie froide - noir vers rouge&lt;br /&gt;
      leds[j].r = heatramp;&lt;br /&gt;
      leds[j].g = 0;&lt;br /&gt;
      leds[j].b = 0;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  FastLED.show();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Lire le potentiomètre et déterminer la difficulté&lt;br /&gt;
void readDifficulty() {&lt;br /&gt;
  int potValue = analogRead(POTENTIOMETER_PIN);  // 0-4095 sur ESP32&lt;br /&gt;
  &lt;br /&gt;
  // Diviser en 3 zones&lt;br /&gt;
  if (potValue &amp;lt; 1365) {&lt;br /&gt;
    // Zone 1: FACILE (0-1365)&lt;br /&gt;
    currentDifficulty = EASY;&lt;br /&gt;
    maxLevels = 3;&lt;br /&gt;
  } else if (potValue &amp;lt; 2730) {&lt;br /&gt;
    // Zone 2: MOYEN (1365-2730)&lt;br /&gt;
    currentDifficulty = MEDIUM;&lt;br /&gt;
    maxLevels = 4;&lt;br /&gt;
  } else {&lt;br /&gt;
    // Zone 3: DIFFICILE (2730-4095)&lt;br /&gt;
    currentDifficulty = HARD;&lt;br /&gt;
    maxLevels = 6;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Afficher la difficulté actuelle&lt;br /&gt;
void printDifficulty() {&lt;br /&gt;
  switch(currentDifficulty) {&lt;br /&gt;
    case EASY:&lt;br /&gt;
      Serial.print(&amp;quot;FACILE (3 niveaux)&amp;quot;);&lt;br /&gt;
      break;&lt;br /&gt;
    case MEDIUM:&lt;br /&gt;
      Serial.print(&amp;quot;MOYEN (4 niveaux)&amp;quot;);&lt;br /&gt;
      break;&lt;br /&gt;
    case HARD:&lt;br /&gt;
      Serial.print(&amp;quot;DIFFICILE (6 niveaux)&amp;quot;);&lt;br /&gt;
      break;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Conception des boutons &amp;lt;br&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
- Au départ : Bouton rouge à disposition, le problème est qu'il faut plusieur couleur. Alors nous changeons de couleur la led et voulons remplacer l'opercule rouge par du plexiglass, cependant cela ne se colle pas au bouton. &amp;lt;br&amp;gt;&lt;br /&gt;
- Alors : Nous avons pris des boutons plus petit de plusieurs couleur (rouge, bleu, vert et jaune). Pour les rendre plus grands, nous avons decider de couper du plexiglass en plusieur forme, bonhomme de neige, sapin, renne, et pain d'épice, nous avons laissé un trou (de 27mm de diamètre) dans chacune des formes afin de mettre les boutons dedans.&amp;lt;br&amp;gt;&lt;br /&gt;
- Pour finir, nous avons rajouté du vinyl de la même couleur que les boutons pour les rendre plus visible sur la cheminée.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Prototype design bouton &amp;lt;br&amp;gt; ==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Fichier:Prototypes Boutons .pdf&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==premier diaporama : Alors ? Comment ça se passe ?==&lt;br /&gt;
Diaporama type '''Alors ?''': [[media:DiaporamaSuperBrest2024-Alors.odp|Téléchargez et adaptez-le !]]&lt;br /&gt;
&lt;br /&gt;
==second diaporama : Et voilà !==&lt;br /&gt;
Diaporama type '''Et Voilà !''' : [[media:DiaporamaSuperBrest2024-EtVoila.odp|Téléchargez et adaptez-le !]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Sciencehackdaybrest]]&lt;br /&gt;
[[Catégorie:Super Brest]]&lt;br /&gt;
[[Catégorie:Super Brest 2025]]&lt;/div&gt;</summary>
		<author><name>Emma</name></author>	</entry>

	<entry>
		<id>http://wiki.lesfabriquesduponant.net/index.php?title=Super_Brest_2025_:_L%27%C3%A9trange_no%C3%ABl_de_monsieur_Simon&amp;diff=35370</id>
		<title>Super Brest 2025 : L'étrange noël de monsieur Simon</title>
		<link rel="alternate" type="text/html" href="http://wiki.lesfabriquesduponant.net/index.php?title=Super_Brest_2025_:_L%27%C3%A9trange_no%C3%ABl_de_monsieur_Simon&amp;diff=35370"/>
				<updated>2025-11-30T10:42:34Z</updated>
		
		<summary type="html">&lt;p&gt;Emma : /* Prototype design bouton  */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Fichier:SuperBrest2025-BADGE.png|200px]]&lt;br /&gt;
&lt;br /&gt;
==résumé du projet==&lt;br /&gt;
Ce hackathon a pour objectif d'adapter le jeu Simon (mémoire des couleurs/sons) en l'adaptant spécifiquement pour la fête de Noël de l'école.&lt;br /&gt;
&lt;br /&gt;
Le projet consiste à :&lt;br /&gt;
&lt;br /&gt;
Utiliser une cheminée existante pour le jeu.&lt;br /&gt;
&lt;br /&gt;
Programmer l'électronique Arduino pour simuler les lumières et les sons de Simon.&lt;br /&gt;
&lt;br /&gt;
Intégrer une thématique Noël (couleurs/sons festifs) pour créer une animation ludique et éducative qui met en avant la créativité.&lt;br /&gt;
&lt;br /&gt;
==membres du projet==&lt;br /&gt;
&lt;br /&gt;
Audrey : Ailée créature &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Emma : Magique arc en ciel &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ewen: Magic flocon &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Syrielle: Espiegle corne &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nadia : Divinité flamboyante &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Bibliographie et webographie sur le projet==&lt;br /&gt;
[[https://www.wiki.lesfabriquesduponant.net/index.php?title=ENIB_2022_-_groupe_A_:_Simon]]&lt;br /&gt;
https://fr.wikipedia.org/wiki/Simon_(jeu)&lt;br /&gt;
==banque d'images==&lt;br /&gt;
[[Fichier:E3F3D4A8-ECC8-40C8-9B21-032B27D7E458 2.jpg|200Pxpx|vignette|centré]]&lt;br /&gt;
&lt;br /&gt;
==prototype qu'on souhaite réaliser ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Prototype simon.jpg|vignette|centré]]&lt;br /&gt;
&lt;br /&gt;
==Schema de cablage==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capture d’écran 2025-11-29 à 15.42.22.png|vignette|centré|schema de cablage]]&lt;br /&gt;
&lt;br /&gt;
==Programme arduino==&lt;br /&gt;
&lt;br /&gt;
Le code à ete crée par l'IA claude , voici le prompt : &amp;lt;br&amp;gt;&lt;br /&gt;
Crée un jeu Simon pour ESP32 avec :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- 4 boutons/LEDs (Rouge/GPIO12-25, Jaune/GPIO13-26, Vert/GPIO14-27, Bleu/GPIO15-33)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- DFPlayer Mini sur GPIO16-17 avec 6 sons Noël (0001-0006.mp3)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Ruban LED WS2812B 144 LEDs sur GPIO32 avec effet feu continu&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Potentiomètre GPIO34 pour 3 difficultés (3/4/6 niveaux)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Son 0005.mp3 pour victoire totale, 0006.mp3 pour échec immédiat&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Bibliothèques : DFRobotDFPlayerMini + FastLED&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Arduino&amp;quot; line&amp;gt;/*&lt;br /&gt;
 * JEU SIMON COMPLET - ESP32 + DFPlayer Mini + Ruban LED Feu&lt;br /&gt;
 * &lt;br /&gt;
 * Câblage:&lt;br /&gt;
 * ─────────────────────────────────────────────&lt;br /&gt;
 * DFPlayer Mini:&lt;br /&gt;
 *   - RX      → GPIO 17 (TX ESP32) + résistance 1kΩ&lt;br /&gt;
 *   - TX      → GPIO 16 (RX ESP32)&lt;br /&gt;
 *   - VCC     → 5V&lt;br /&gt;
 *   - GND     → GND&lt;br /&gt;
 *   - SPK_1/2 → Haut-parleur 3W (4-8Ω)&lt;br /&gt;
 * &lt;br /&gt;
 * 4 Boutons (avec pull-up interne):&lt;br /&gt;
 *   - Bouton ROUGE  → GPIO 12 → GND&lt;br /&gt;
 *   - Bouton VERT   → GPIO 13 → GND&lt;br /&gt;
 *   - Bouton BLEU   → GPIO 14 → GND&lt;br /&gt;
 *   - Bouton JAUNE  → GPIO 15 → GND&lt;br /&gt;
 * &lt;br /&gt;
 * 4 LEDs (avec résistances 220Ω):&lt;br /&gt;
 *   - LED ROUGE  → GPIO 25 → Résistance → GND&lt;br /&gt;
 *   - LED VERTE  → GPIO 26 → Résistance → GND&lt;br /&gt;
 *   - LED BLEUE  → GPIO 27 → Résistance → GND&lt;br /&gt;
 *   - LED JAUNE  → GPIO 33 → Résistance → GND&lt;br /&gt;
 * &lt;br /&gt;
 * Ruban LED (WS2812B - 144 LEDs):&lt;br /&gt;
 *   - DATA → GPIO 32&lt;br /&gt;
 *   - VCC  → 5V (alimentation externe recommandée si &amp;gt;30 LEDs)&lt;br /&gt;
 *   - GND  → GND (commun avec ESP32)&lt;br /&gt;
 * &lt;br /&gt;
 * Potentiomètre (sélection difficulté):&lt;br /&gt;
 *   - Broche gauche  → GND&lt;br /&gt;
 *   - Broche centrale → GPIO 34 (ADC)&lt;br /&gt;
 *   - Broche droite   → 3.3V&lt;br /&gt;
 * &lt;br /&gt;
 * Fichiers MP3 sur carte SD (FAT32):&lt;br /&gt;
 *   - 0001.mp3 : Son bouton ROUGE&lt;br /&gt;
 *   - 0002.mp3 : Son bouton JAUNE&lt;br /&gt;
 *   - 0003.mp3 : Son bouton VERT&lt;br /&gt;
 *   - 0004.mp3 : Son bouton BLEU&lt;br /&gt;
 *   - 0005.mp3 : Son VICTOIRE (après 5 niveaux réussis)&lt;br /&gt;
 *   - 0006.mp3 : Son ÉCHEC (erreur dans la séquence)&lt;br /&gt;
 * &lt;br /&gt;
 * IMPORTANT: Installez la bibliothèque FastLED&lt;br /&gt;
 * (Croquis → Inclure une bibliothèque → Gérer les bibliothèques → FastLED)&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;DFRobotDFPlayerMini.h&amp;gt;&lt;br /&gt;
#include &amp;lt;FastLED.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// Configuration DFPlayer&lt;br /&gt;
HardwareSerial mySoftwareSerial(2);&lt;br /&gt;
DFRobotDFPlayerMini myDFPlayer;&lt;br /&gt;
&lt;br /&gt;
// Configuration Ruban LED&lt;br /&gt;
#define LED_STRIP_PIN 32&lt;br /&gt;
#define NUM_LEDS 144&lt;br /&gt;
#define LED_TYPE WS2812B&lt;br /&gt;
#define COLOR_ORDER GRB&lt;br /&gt;
CRGB leds[NUM_LEDS];&lt;br /&gt;
&lt;br /&gt;
// Configuration Potentiomètre (sélection difficulté)&lt;br /&gt;
#define POTENTIOMETER_PIN 34  // GPIO 34 (ADC1_CH6)&lt;br /&gt;
&lt;br /&gt;
// Niveaux de difficulté&lt;br /&gt;
enum Difficulty {&lt;br /&gt;
  EASY = 0,    // 3 niveaux&lt;br /&gt;
  MEDIUM = 1,  // 4 niveaux&lt;br /&gt;
  HARD = 2     // 6 niveaux&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Difficulty currentDifficulty = MEDIUM;&lt;br /&gt;
int maxLevels = 4;  // Par défaut moyen&lt;br /&gt;
&lt;br /&gt;
// Configuration des pins boutons et LEDs&lt;br /&gt;
const int BUTTON_PINS[4] = {12, 13, 14, 15};  // Rouge, Jaune, Vert, Bleu&lt;br /&gt;
const int LED_PINS[4] = {25, 26, 27, 33};     // Rouge, Jaune, Vert, Bleu&lt;br /&gt;
&lt;br /&gt;
// Noms des couleurs pour l'affichage&lt;br /&gt;
const char* COLOR_NAMES[4] = {&amp;quot;ROUGE&amp;quot;, &amp;quot;JAUNE&amp;quot;, &amp;quot;VERT&amp;quot;, &amp;quot;BLEU&amp;quot;};&lt;br /&gt;
&lt;br /&gt;
// Correspondance couleur -&amp;gt; numéro de son&lt;br /&gt;
const int COLOR_TO_SOUND[4] = {1, 2, 3, 4};  // Rouge=1, Jaune=2, Vert=3, Bleu=4&lt;br /&gt;
&lt;br /&gt;
// Variables du jeu&lt;br /&gt;
int sequence[100];              // Séquence à mémoriser (max 100 niveaux)&lt;br /&gt;
int sequenceLength = 0;         // Longueur actuelle de la séquence&lt;br /&gt;
int playerInput[100];           // Saisie du joueur&lt;br /&gt;
int playerIndex = 0;            // Position dans la saisie&lt;br /&gt;
int level = 1;                  // Niveau actuel&lt;br /&gt;
bool gameActive = false;        // Jeu en cours&lt;br /&gt;
bool waitingForInput = false;   // En attente de la saisie du joueur&lt;br /&gt;
&lt;br /&gt;
// Débounce des boutons&lt;br /&gt;
unsigned long lastButtonPress[4] = {0, 0, 0, 0};&lt;br /&gt;
const unsigned long DEBOUNCE_DELAY = 250;&lt;br /&gt;
&lt;br /&gt;
// Timings du jeu (en millisecondes)&lt;br /&gt;
const int FLASH_DURATION = 500;      // Durée d'allumage d'une LED&lt;br /&gt;
const int PAUSE_BETWEEN_FLASH = 200; // Pause entre deux LEDs&lt;br /&gt;
const int DELAY_AFTER_SEQUENCE = 500;// Délai avant que le joueur joue&lt;br /&gt;
&lt;br /&gt;
// Variables pour l'effet feu&lt;br /&gt;
byte heat[NUM_LEDS];&lt;br /&gt;
unsigned long lastFireUpdate = 0;&lt;br /&gt;
const int FIRE_UPDATE_INTERVAL = 50; // Mise à jour toutes les 50ms&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(115200);&lt;br /&gt;
  delay(1000);&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\n╔═══════════════════════════════════╗&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;║      JEU SIMON - ESP32            ║&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;╚═══════════════════════════════════╝\n&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Configuration des boutons&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    pinMode(BUTTON_PINS[i], INPUT_PULLUP);&lt;br /&gt;
  }&lt;br /&gt;
  Serial.println(&amp;quot;✓ Boutons configurés&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Configuration des LEDs&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    pinMode(LED_PINS[i], OUTPUT);&lt;br /&gt;
    digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
  }&lt;br /&gt;
  Serial.println(&amp;quot;✓ LEDs configurées&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Configuration du ruban LED&lt;br /&gt;
  FastLED.addLeds&amp;lt;LED_TYPE, LED_STRIP_PIN, COLOR_ORDER&amp;gt;(leds, NUM_LEDS);&lt;br /&gt;
  FastLED.setBrightness(100); // Luminosité (0-255)&lt;br /&gt;
  FastLED.clear();&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
  Serial.println(&amp;quot;✓ Ruban LED configuré (144 LEDs)&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Configuration du potentiomètre&lt;br /&gt;
  pinMode(POTENTIOMETER_PIN, INPUT);&lt;br /&gt;
  Serial.println(&amp;quot;✓ Potentiomètre configuré sur GPIO 34&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Lire la difficulté initiale&lt;br /&gt;
  readDifficulty();&lt;br /&gt;
  &lt;br /&gt;
  // Configuration DFPlayer&lt;br /&gt;
  mySoftwareSerial.begin(9600, SERIAL_8N1, 16, 17);&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\nInitialisation du DFPlayer...&amp;quot;);&lt;br /&gt;
  if (!myDFPlayer.begin(mySoftwareSerial)) {&lt;br /&gt;
    Serial.println(&amp;quot;\n✗ ERREUR DFPlayer!&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;Vérifiez:&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;  - Carte SD insérée (FAT32)&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;  - Fichiers 0001.mp3 à 0006.mp3&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;  - Connexions RX/TX&amp;quot;);&lt;br /&gt;
    while(true) { delay(1000); }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;✓ DFPlayer OK!&amp;quot;);&lt;br /&gt;
  myDFPlayer.volume(25);  // Volume (0-30)&lt;br /&gt;
  delay(100);&lt;br /&gt;
  &lt;br /&gt;
  // Animation de démarrage&lt;br /&gt;
  startupAnimation();&lt;br /&gt;
  &lt;br /&gt;
  // Initialiser le générateur aléatoire&lt;br /&gt;
  randomSeed(analogRead(0));&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\n═══════════════════════════════════&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;  DIFFICULTÉ SÉLECTIONNÉE:&amp;quot;);&lt;br /&gt;
  printDifficulty();&lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;   Appuyez sur un bouton pour&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;        commencer le jeu!&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  // Mettre à jour l'effet feu en continu&lt;br /&gt;
  updateFireEffect();&lt;br /&gt;
  &lt;br /&gt;
  if (!gameActive) {&lt;br /&gt;
    // Attendre qu'un bouton soit pressé pour démarrer&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      if (digitalRead(BUTTON_PINS[i]) == LOW) {&lt;br /&gt;
        delay(300);&lt;br /&gt;
        startNewGame();&lt;br /&gt;
        break;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  } else if (waitingForInput) {&lt;br /&gt;
    checkPlayerInput();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void startNewGame() {&lt;br /&gt;
  // Lire la difficulté au début de chaque partie&lt;br /&gt;
  readDifficulty();&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\n╔═══════════════════════════════════╗&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;║      NOUVELLE PARTIE              ║&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;╚═══════════════════════════════════╝&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;\n  Difficulté: &amp;quot;);&lt;br /&gt;
  printDifficulty();&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  &lt;br /&gt;
  gameActive = true;&lt;br /&gt;
  level = 1;&lt;br /&gt;
  sequenceLength = 0;&lt;br /&gt;
  &lt;br /&gt;
  delay(1000);&lt;br /&gt;
  nextLevel();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void nextLevel() {&lt;br /&gt;
  Serial.println(&amp;quot;─────────────────────────────────────&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;         NIVEAU &amp;quot;);&lt;br /&gt;
  Serial.print(level);&lt;br /&gt;
  Serial.print(&amp;quot; / &amp;quot;);&lt;br /&gt;
  Serial.println(maxLevels);&lt;br /&gt;
  Serial.println(&amp;quot;─────────────────────────────────────\n&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Ajouter une couleur aléatoire à la séquence&lt;br /&gt;
  sequence[sequenceLength] = random(0, 4);&lt;br /&gt;
  sequenceLength++;&lt;br /&gt;
  &lt;br /&gt;
  delay(1000);&lt;br /&gt;
  &lt;br /&gt;
  // Afficher la séquence au joueur&lt;br /&gt;
  playSequence();&lt;br /&gt;
  &lt;br /&gt;
  // Attendre la saisie du joueur&lt;br /&gt;
  playerIndex = 0;&lt;br /&gt;
  waitingForInput = true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void playSequence() {&lt;br /&gt;
  Serial.println(&amp;quot;👀 Mémorisez la séquence:\n&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  for (int i = 0; i &amp;lt; sequenceLength; i++) {&lt;br /&gt;
    int color = sequence[i];&lt;br /&gt;
    &lt;br /&gt;
    Serial.print(&amp;quot;   &amp;quot;);&lt;br /&gt;
    Serial.print(i + 1);&lt;br /&gt;
    Serial.print(&amp;quot;. &amp;quot;);&lt;br /&gt;
    Serial.println(COLOR_NAMES[color]);&lt;br /&gt;
    &lt;br /&gt;
    // Allumer la LED et jouer le son&lt;br /&gt;
    digitalWrite(LED_PINS[color], HIGH);&lt;br /&gt;
    myDFPlayer.play(COLOR_TO_SOUND[color]);  // Rouge=1, Jaune=2, Vert=3, Bleu=4&lt;br /&gt;
    &lt;br /&gt;
    delay(FLASH_DURATION);&lt;br /&gt;
    &lt;br /&gt;
    // Éteindre la LED&lt;br /&gt;
    digitalWrite(LED_PINS[color], LOW);&lt;br /&gt;
    &lt;br /&gt;
    // Pause entre les flashs&lt;br /&gt;
    if (i &amp;lt; sequenceLength - 1) {&lt;br /&gt;
      delay(PAUSE_BETWEEN_FLASH);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  delay(DELAY_AFTER_SEQUENCE);&lt;br /&gt;
  Serial.println(&amp;quot;\n🎮 À vous de jouer!\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void checkPlayerInput() {&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    if (digitalRead(BUTTON_PINS[i]) == LOW) {&lt;br /&gt;
      unsigned long currentTime = millis();&lt;br /&gt;
      &lt;br /&gt;
      // Débounce&lt;br /&gt;
      if (currentTime - lastButtonPress[i] &amp;gt; DEBOUNCE_DELAY) {&lt;br /&gt;
        lastButtonPress[i] = currentTime;&lt;br /&gt;
        &lt;br /&gt;
        // Feedback visuel et sonore&lt;br /&gt;
        digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
        myDFPlayer.play(COLOR_TO_SOUND[i]);  // Jouer le son correspondant&lt;br /&gt;
        &lt;br /&gt;
        Serial.print(&amp;quot;   → &amp;quot;);&lt;br /&gt;
        Serial.println(COLOR_NAMES[i]);&lt;br /&gt;
        &lt;br /&gt;
        // Enregistrer la saisie&lt;br /&gt;
        playerInput[playerIndex] = i;&lt;br /&gt;
        &lt;br /&gt;
        delay(300);&lt;br /&gt;
        digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
        &lt;br /&gt;
        // Vérifier si c'est correct&lt;br /&gt;
        if (playerInput[playerIndex] != sequence[playerIndex]) {&lt;br /&gt;
          gameLost();&lt;br /&gt;
          return;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        playerIndex++;&lt;br /&gt;
        &lt;br /&gt;
        // Vérifier si la séquence complète est correcte&lt;br /&gt;
        if (playerIndex &amp;gt;= sequenceLength) {&lt;br /&gt;
          sequenceComplete();&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void sequenceComplete() {&lt;br /&gt;
  Serial.println(&amp;quot;\n✅ Séquence correcte!\n&amp;quot;);&lt;br /&gt;
  waitingForInput = false;&lt;br /&gt;
  &lt;br /&gt;
  level++;&lt;br /&gt;
  &lt;br /&gt;
  // Vérifier si on a atteint le niveau maximum selon la difficulté&lt;br /&gt;
  if (level &amp;gt; maxLevels) {&lt;br /&gt;
    gameWon();&lt;br /&gt;
  } else {&lt;br /&gt;
    delay(500);&lt;br /&gt;
    &lt;br /&gt;
    // Animation de succès (rapide entre chaque niveau)&lt;br /&gt;
    for (int j = 0; j &amp;lt; 2; j++) {&lt;br /&gt;
      for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
        digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
      }&lt;br /&gt;
      delay(100);&lt;br /&gt;
      for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
        digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
      }&lt;br /&gt;
      delay(100);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    delay(1000);&lt;br /&gt;
    nextLevel();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void gameLost() {&lt;br /&gt;
  Serial.println(&amp;quot;\n╔═══════════════════════════════════╗&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;║          ❌ ERREUR!               ║&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;╚═══════════════════════════════════╝&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;\n   Vous étiez au niveau &amp;quot;);&lt;br /&gt;
  Serial.println(level);&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  &lt;br /&gt;
  waitingForInput = false;&lt;br /&gt;
  gameActive = false;&lt;br /&gt;
  &lt;br /&gt;
  // Son d'échec (0006.mp3)&lt;br /&gt;
  myDFPlayer.play(6);&lt;br /&gt;
  &lt;br /&gt;
  // Animation d'échec (clignotement rapide)&lt;br /&gt;
  for (int j = 0; j &amp;lt; 5; j++) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
    }&lt;br /&gt;
    delay(150);&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
    }&lt;br /&gt;
    delay(150);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot; Appuyez sur un bouton pour rejouer&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void gameWon() {&lt;br /&gt;
  Serial.println(&amp;quot;\n╔═══════════════════════════════════╗&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;║      🎉 VICTOIRE! 🎉              ║&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;╚═══════════════════════════════════╝&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;\n  Vous avez réussi les &amp;quot;);&lt;br /&gt;
  Serial.print(maxLevels);&lt;br /&gt;
  Serial.println(&amp;quot; niveaux!&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;  Difficulté: &amp;quot;);&lt;br /&gt;
  printDifficulty();&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  &lt;br /&gt;
  gameActive = false;&lt;br /&gt;
  &lt;br /&gt;
  // Son de victoire (0005.mp3)&lt;br /&gt;
  myDFPlayer.play(5);&lt;br /&gt;
  &lt;br /&gt;
  // Animation de victoire spectaculaire&lt;br /&gt;
  // Vague de lumière rapide&lt;br /&gt;
  for (int j = 0; j &amp;lt; 8; j++) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
      delay(60);&lt;br /&gt;
      digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Clignotement final toutes ensemble&lt;br /&gt;
  for (int j = 0; j &amp;lt; 4; j++) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
    }&lt;br /&gt;
    delay(200);&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
    }&lt;br /&gt;
    delay(200);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\n═══════════════════════════════════&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot; Ajustez le potentiomètre pour&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot; changer de difficulté&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot; Appuyez sur un bouton pour rejouer&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void startupAnimation() {&lt;br /&gt;
  Serial.println(&amp;quot;\nAnimation de démarrage...\n&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Allumage séquentiel&lt;br /&gt;
  for (int j = 0; j &amp;lt; 2; j++) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
      delay(100);&lt;br /&gt;
    }&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
      delay(100);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Flash final&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
  }&lt;br /&gt;
  delay(300);&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Effet feu de bois pour le ruban LED&lt;br /&gt;
void updateFireEffect() {&lt;br /&gt;
  unsigned long currentTime = millis();&lt;br /&gt;
  &lt;br /&gt;
  // Mettre à jour seulement toutes les FIRE_UPDATE_INTERVAL ms&lt;br /&gt;
  if (currentTime - lastFireUpdate &amp;lt; FIRE_UPDATE_INTERVAL) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  lastFireUpdate = currentTime;&lt;br /&gt;
  &lt;br /&gt;
  // Refroidissement: chaque cellule perd un peu de chaleur&lt;br /&gt;
  for (int i = 0; i &amp;lt; NUM_LEDS; i++) {&lt;br /&gt;
    int cooldown = random(0, ((55 * 10) / NUM_LEDS) + 2);&lt;br /&gt;
    if (cooldown &amp;gt;= heat[i]) {&lt;br /&gt;
      heat[i] = 0;&lt;br /&gt;
    } else {&lt;br /&gt;
      heat[i] = heat[i] - cooldown;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Diffusion de chaleur vers le haut&lt;br /&gt;
  for (int k = NUM_LEDS - 1; k &amp;gt;= 2; k--) {&lt;br /&gt;
    heat[k] = (heat[k - 1] + heat[k - 2] + heat[k - 2]) / 3;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Ajout de nouvelles étincelles aléatoires en bas&lt;br /&gt;
  if (random(255) &amp;lt; 120) {&lt;br /&gt;
    int y = random(7);&lt;br /&gt;
    heat[y] = heat[y] + random(160, 255);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Conversion de la chaleur en couleurs&lt;br /&gt;
  for (int j = 0; j &amp;lt; NUM_LEDS; j++) {&lt;br /&gt;
    // Palette de couleurs feu: noir → rouge → orange → jaune → blanc&lt;br /&gt;
    byte temperature = heat[j];&lt;br /&gt;
    &lt;br /&gt;
    // Noir → Rouge foncé&lt;br /&gt;
    byte t192 = scale8_video(temperature, 191);&lt;br /&gt;
    byte heatramp = t192 &amp;amp; 0x3F; // 0..63&lt;br /&gt;
    heatramp &amp;lt;&amp;lt;= 2; // 0..252&lt;br /&gt;
    &lt;br /&gt;
    if (t192 &amp;amp; 0x80) {&lt;br /&gt;
      // Partie la plus chaude - jaune vers blanc&lt;br /&gt;
      leds[j].r = 255;&lt;br /&gt;
      leds[j].g = 255;&lt;br /&gt;
      leds[j].b = heatramp;&lt;br /&gt;
    } else if (t192 &amp;amp; 0x40) {&lt;br /&gt;
      // Partie chaude - rouge vers jaune&lt;br /&gt;
      leds[j].r = 255;&lt;br /&gt;
      leds[j].g = heatramp;&lt;br /&gt;
      leds[j].b = 0;&lt;br /&gt;
    } else {&lt;br /&gt;
      // Partie froide - noir vers rouge&lt;br /&gt;
      leds[j].r = heatramp;&lt;br /&gt;
      leds[j].g = 0;&lt;br /&gt;
      leds[j].b = 0;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  FastLED.show();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Lire le potentiomètre et déterminer la difficulté&lt;br /&gt;
void readDifficulty() {&lt;br /&gt;
  int potValue = analogRead(POTENTIOMETER_PIN);  // 0-4095 sur ESP32&lt;br /&gt;
  &lt;br /&gt;
  // Diviser en 3 zones&lt;br /&gt;
  if (potValue &amp;lt; 1365) {&lt;br /&gt;
    // Zone 1: FACILE (0-1365)&lt;br /&gt;
    currentDifficulty = EASY;&lt;br /&gt;
    maxLevels = 3;&lt;br /&gt;
  } else if (potValue &amp;lt; 2730) {&lt;br /&gt;
    // Zone 2: MOYEN (1365-2730)&lt;br /&gt;
    currentDifficulty = MEDIUM;&lt;br /&gt;
    maxLevels = 4;&lt;br /&gt;
  } else {&lt;br /&gt;
    // Zone 3: DIFFICILE (2730-4095)&lt;br /&gt;
    currentDifficulty = HARD;&lt;br /&gt;
    maxLevels = 6;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Afficher la difficulté actuelle&lt;br /&gt;
void printDifficulty() {&lt;br /&gt;
  switch(currentDifficulty) {&lt;br /&gt;
    case EASY:&lt;br /&gt;
      Serial.print(&amp;quot;FACILE (3 niveaux)&amp;quot;);&lt;br /&gt;
      break;&lt;br /&gt;
    case MEDIUM:&lt;br /&gt;
      Serial.print(&amp;quot;MOYEN (4 niveaux)&amp;quot;);&lt;br /&gt;
      break;&lt;br /&gt;
    case HARD:&lt;br /&gt;
      Serial.print(&amp;quot;DIFFICILE (6 niveaux)&amp;quot;);&lt;br /&gt;
      break;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Conception des boutons &amp;lt;br&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
- Au départ : Bouton rouge à disposition, le problème est qu'il faut plusieur couleur. Alors nous changeons de couleur la led et voulons remplacer l'opercule rouge par du plexiglass, cependant cela ne se colle pas au bouton. &amp;lt;br&amp;gt;&lt;br /&gt;
- Alors : Nous avons pris des boutons plus petit de plusieurs couleur (rouge, bleu, vert et jaune). Pour les rendre plus grands, nous avons decider de couper du plexiglass en plusieur forme, bonhomme de neige, sapin, renne, et pain d'épice, nous avons laissé un trou (de 27mm de diamètre) dans chacune des formes afin de mettre les boutons dedans.&amp;lt;br&amp;gt;&lt;br /&gt;
- Pour finir, nous avons rajouté du vinyl de la même couleur que les boutons pour les rendre plus visible sur la cheminée.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Prototype design bouton &amp;lt;br&amp;gt; ==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Fichier:Trappe.svg|&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==premier diaporama : Alors ? Comment ça se passe ?==&lt;br /&gt;
Diaporama type '''Alors ?''': [[media:DiaporamaSuperBrest2024-Alors.odp|Téléchargez et adaptez-le !]]&lt;br /&gt;
&lt;br /&gt;
==second diaporama : Et voilà !==&lt;br /&gt;
Diaporama type '''Et Voilà !''' : [[media:DiaporamaSuperBrest2024-EtVoila.odp|Téléchargez et adaptez-le !]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Sciencehackdaybrest]]&lt;br /&gt;
[[Catégorie:Super Brest]]&lt;br /&gt;
[[Catégorie:Super Brest 2025]]&lt;/div&gt;</summary>
		<author><name>Emma</name></author>	</entry>

	<entry>
		<id>http://wiki.lesfabriquesduponant.net/index.php?title=Super_Brest_2025_:_L%27%C3%A9trange_no%C3%ABl_de_monsieur_Simon&amp;diff=35369</id>
		<title>Super Brest 2025 : L'étrange noël de monsieur Simon</title>
		<link rel="alternate" type="text/html" href="http://wiki.lesfabriquesduponant.net/index.php?title=Super_Brest_2025_:_L%27%C3%A9trange_no%C3%ABl_de_monsieur_Simon&amp;diff=35369"/>
				<updated>2025-11-30T10:42:11Z</updated>
		
		<summary type="html">&lt;p&gt;Emma : /* Prototype design bouton  */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Fichier:SuperBrest2025-BADGE.png|200px]]&lt;br /&gt;
&lt;br /&gt;
==résumé du projet==&lt;br /&gt;
Ce hackathon a pour objectif d'adapter le jeu Simon (mémoire des couleurs/sons) en l'adaptant spécifiquement pour la fête de Noël de l'école.&lt;br /&gt;
&lt;br /&gt;
Le projet consiste à :&lt;br /&gt;
&lt;br /&gt;
Utiliser une cheminée existante pour le jeu.&lt;br /&gt;
&lt;br /&gt;
Programmer l'électronique Arduino pour simuler les lumières et les sons de Simon.&lt;br /&gt;
&lt;br /&gt;
Intégrer une thématique Noël (couleurs/sons festifs) pour créer une animation ludique et éducative qui met en avant la créativité.&lt;br /&gt;
&lt;br /&gt;
==membres du projet==&lt;br /&gt;
&lt;br /&gt;
Audrey : Ailée créature &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Emma : Magique arc en ciel &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ewen: Magic flocon &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Syrielle: Espiegle corne &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nadia : Divinité flamboyante &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Bibliographie et webographie sur le projet==&lt;br /&gt;
[[https://www.wiki.lesfabriquesduponant.net/index.php?title=ENIB_2022_-_groupe_A_:_Simon]]&lt;br /&gt;
https://fr.wikipedia.org/wiki/Simon_(jeu)&lt;br /&gt;
==banque d'images==&lt;br /&gt;
[[Fichier:E3F3D4A8-ECC8-40C8-9B21-032B27D7E458 2.jpg|200Pxpx|vignette|centré]]&lt;br /&gt;
&lt;br /&gt;
==prototype qu'on souhaite réaliser ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Prototype simon.jpg|vignette|centré]]&lt;br /&gt;
&lt;br /&gt;
==Schema de cablage==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capture d’écran 2025-11-29 à 15.42.22.png|vignette|centré|schema de cablage]]&lt;br /&gt;
&lt;br /&gt;
==Programme arduino==&lt;br /&gt;
&lt;br /&gt;
Le code à ete crée par l'IA claude , voici le prompt : &amp;lt;br&amp;gt;&lt;br /&gt;
Crée un jeu Simon pour ESP32 avec :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- 4 boutons/LEDs (Rouge/GPIO12-25, Jaune/GPIO13-26, Vert/GPIO14-27, Bleu/GPIO15-33)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- DFPlayer Mini sur GPIO16-17 avec 6 sons Noël (0001-0006.mp3)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Ruban LED WS2812B 144 LEDs sur GPIO32 avec effet feu continu&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Potentiomètre GPIO34 pour 3 difficultés (3/4/6 niveaux)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Son 0005.mp3 pour victoire totale, 0006.mp3 pour échec immédiat&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Bibliothèques : DFRobotDFPlayerMini + FastLED&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Arduino&amp;quot; line&amp;gt;/*&lt;br /&gt;
 * JEU SIMON COMPLET - ESP32 + DFPlayer Mini + Ruban LED Feu&lt;br /&gt;
 * &lt;br /&gt;
 * Câblage:&lt;br /&gt;
 * ─────────────────────────────────────────────&lt;br /&gt;
 * DFPlayer Mini:&lt;br /&gt;
 *   - RX      → GPIO 17 (TX ESP32) + résistance 1kΩ&lt;br /&gt;
 *   - TX      → GPIO 16 (RX ESP32)&lt;br /&gt;
 *   - VCC     → 5V&lt;br /&gt;
 *   - GND     → GND&lt;br /&gt;
 *   - SPK_1/2 → Haut-parleur 3W (4-8Ω)&lt;br /&gt;
 * &lt;br /&gt;
 * 4 Boutons (avec pull-up interne):&lt;br /&gt;
 *   - Bouton ROUGE  → GPIO 12 → GND&lt;br /&gt;
 *   - Bouton VERT   → GPIO 13 → GND&lt;br /&gt;
 *   - Bouton BLEU   → GPIO 14 → GND&lt;br /&gt;
 *   - Bouton JAUNE  → GPIO 15 → GND&lt;br /&gt;
 * &lt;br /&gt;
 * 4 LEDs (avec résistances 220Ω):&lt;br /&gt;
 *   - LED ROUGE  → GPIO 25 → Résistance → GND&lt;br /&gt;
 *   - LED VERTE  → GPIO 26 → Résistance → GND&lt;br /&gt;
 *   - LED BLEUE  → GPIO 27 → Résistance → GND&lt;br /&gt;
 *   - LED JAUNE  → GPIO 33 → Résistance → GND&lt;br /&gt;
 * &lt;br /&gt;
 * Ruban LED (WS2812B - 144 LEDs):&lt;br /&gt;
 *   - DATA → GPIO 32&lt;br /&gt;
 *   - VCC  → 5V (alimentation externe recommandée si &amp;gt;30 LEDs)&lt;br /&gt;
 *   - GND  → GND (commun avec ESP32)&lt;br /&gt;
 * &lt;br /&gt;
 * Potentiomètre (sélection difficulté):&lt;br /&gt;
 *   - Broche gauche  → GND&lt;br /&gt;
 *   - Broche centrale → GPIO 34 (ADC)&lt;br /&gt;
 *   - Broche droite   → 3.3V&lt;br /&gt;
 * &lt;br /&gt;
 * Fichiers MP3 sur carte SD (FAT32):&lt;br /&gt;
 *   - 0001.mp3 : Son bouton ROUGE&lt;br /&gt;
 *   - 0002.mp3 : Son bouton JAUNE&lt;br /&gt;
 *   - 0003.mp3 : Son bouton VERT&lt;br /&gt;
 *   - 0004.mp3 : Son bouton BLEU&lt;br /&gt;
 *   - 0005.mp3 : Son VICTOIRE (après 5 niveaux réussis)&lt;br /&gt;
 *   - 0006.mp3 : Son ÉCHEC (erreur dans la séquence)&lt;br /&gt;
 * &lt;br /&gt;
 * IMPORTANT: Installez la bibliothèque FastLED&lt;br /&gt;
 * (Croquis → Inclure une bibliothèque → Gérer les bibliothèques → FastLED)&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;DFRobotDFPlayerMini.h&amp;gt;&lt;br /&gt;
#include &amp;lt;FastLED.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// Configuration DFPlayer&lt;br /&gt;
HardwareSerial mySoftwareSerial(2);&lt;br /&gt;
DFRobotDFPlayerMini myDFPlayer;&lt;br /&gt;
&lt;br /&gt;
// Configuration Ruban LED&lt;br /&gt;
#define LED_STRIP_PIN 32&lt;br /&gt;
#define NUM_LEDS 144&lt;br /&gt;
#define LED_TYPE WS2812B&lt;br /&gt;
#define COLOR_ORDER GRB&lt;br /&gt;
CRGB leds[NUM_LEDS];&lt;br /&gt;
&lt;br /&gt;
// Configuration Potentiomètre (sélection difficulté)&lt;br /&gt;
#define POTENTIOMETER_PIN 34  // GPIO 34 (ADC1_CH6)&lt;br /&gt;
&lt;br /&gt;
// Niveaux de difficulté&lt;br /&gt;
enum Difficulty {&lt;br /&gt;
  EASY = 0,    // 3 niveaux&lt;br /&gt;
  MEDIUM = 1,  // 4 niveaux&lt;br /&gt;
  HARD = 2     // 6 niveaux&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Difficulty currentDifficulty = MEDIUM;&lt;br /&gt;
int maxLevels = 4;  // Par défaut moyen&lt;br /&gt;
&lt;br /&gt;
// Configuration des pins boutons et LEDs&lt;br /&gt;
const int BUTTON_PINS[4] = {12, 13, 14, 15};  // Rouge, Jaune, Vert, Bleu&lt;br /&gt;
const int LED_PINS[4] = {25, 26, 27, 33};     // Rouge, Jaune, Vert, Bleu&lt;br /&gt;
&lt;br /&gt;
// Noms des couleurs pour l'affichage&lt;br /&gt;
const char* COLOR_NAMES[4] = {&amp;quot;ROUGE&amp;quot;, &amp;quot;JAUNE&amp;quot;, &amp;quot;VERT&amp;quot;, &amp;quot;BLEU&amp;quot;};&lt;br /&gt;
&lt;br /&gt;
// Correspondance couleur -&amp;gt; numéro de son&lt;br /&gt;
const int COLOR_TO_SOUND[4] = {1, 2, 3, 4};  // Rouge=1, Jaune=2, Vert=3, Bleu=4&lt;br /&gt;
&lt;br /&gt;
// Variables du jeu&lt;br /&gt;
int sequence[100];              // Séquence à mémoriser (max 100 niveaux)&lt;br /&gt;
int sequenceLength = 0;         // Longueur actuelle de la séquence&lt;br /&gt;
int playerInput[100];           // Saisie du joueur&lt;br /&gt;
int playerIndex = 0;            // Position dans la saisie&lt;br /&gt;
int level = 1;                  // Niveau actuel&lt;br /&gt;
bool gameActive = false;        // Jeu en cours&lt;br /&gt;
bool waitingForInput = false;   // En attente de la saisie du joueur&lt;br /&gt;
&lt;br /&gt;
// Débounce des boutons&lt;br /&gt;
unsigned long lastButtonPress[4] = {0, 0, 0, 0};&lt;br /&gt;
const unsigned long DEBOUNCE_DELAY = 250;&lt;br /&gt;
&lt;br /&gt;
// Timings du jeu (en millisecondes)&lt;br /&gt;
const int FLASH_DURATION = 500;      // Durée d'allumage d'une LED&lt;br /&gt;
const int PAUSE_BETWEEN_FLASH = 200; // Pause entre deux LEDs&lt;br /&gt;
const int DELAY_AFTER_SEQUENCE = 500;// Délai avant que le joueur joue&lt;br /&gt;
&lt;br /&gt;
// Variables pour l'effet feu&lt;br /&gt;
byte heat[NUM_LEDS];&lt;br /&gt;
unsigned long lastFireUpdate = 0;&lt;br /&gt;
const int FIRE_UPDATE_INTERVAL = 50; // Mise à jour toutes les 50ms&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(115200);&lt;br /&gt;
  delay(1000);&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\n╔═══════════════════════════════════╗&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;║      JEU SIMON - ESP32            ║&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;╚═══════════════════════════════════╝\n&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Configuration des boutons&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    pinMode(BUTTON_PINS[i], INPUT_PULLUP);&lt;br /&gt;
  }&lt;br /&gt;
  Serial.println(&amp;quot;✓ Boutons configurés&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Configuration des LEDs&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    pinMode(LED_PINS[i], OUTPUT);&lt;br /&gt;
    digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
  }&lt;br /&gt;
  Serial.println(&amp;quot;✓ LEDs configurées&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Configuration du ruban LED&lt;br /&gt;
  FastLED.addLeds&amp;lt;LED_TYPE, LED_STRIP_PIN, COLOR_ORDER&amp;gt;(leds, NUM_LEDS);&lt;br /&gt;
  FastLED.setBrightness(100); // Luminosité (0-255)&lt;br /&gt;
  FastLED.clear();&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
  Serial.println(&amp;quot;✓ Ruban LED configuré (144 LEDs)&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Configuration du potentiomètre&lt;br /&gt;
  pinMode(POTENTIOMETER_PIN, INPUT);&lt;br /&gt;
  Serial.println(&amp;quot;✓ Potentiomètre configuré sur GPIO 34&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Lire la difficulté initiale&lt;br /&gt;
  readDifficulty();&lt;br /&gt;
  &lt;br /&gt;
  // Configuration DFPlayer&lt;br /&gt;
  mySoftwareSerial.begin(9600, SERIAL_8N1, 16, 17);&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\nInitialisation du DFPlayer...&amp;quot;);&lt;br /&gt;
  if (!myDFPlayer.begin(mySoftwareSerial)) {&lt;br /&gt;
    Serial.println(&amp;quot;\n✗ ERREUR DFPlayer!&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;Vérifiez:&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;  - Carte SD insérée (FAT32)&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;  - Fichiers 0001.mp3 à 0006.mp3&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;  - Connexions RX/TX&amp;quot;);&lt;br /&gt;
    while(true) { delay(1000); }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;✓ DFPlayer OK!&amp;quot;);&lt;br /&gt;
  myDFPlayer.volume(25);  // Volume (0-30)&lt;br /&gt;
  delay(100);&lt;br /&gt;
  &lt;br /&gt;
  // Animation de démarrage&lt;br /&gt;
  startupAnimation();&lt;br /&gt;
  &lt;br /&gt;
  // Initialiser le générateur aléatoire&lt;br /&gt;
  randomSeed(analogRead(0));&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\n═══════════════════════════════════&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;  DIFFICULTÉ SÉLECTIONNÉE:&amp;quot;);&lt;br /&gt;
  printDifficulty();&lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;   Appuyez sur un bouton pour&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;        commencer le jeu!&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  // Mettre à jour l'effet feu en continu&lt;br /&gt;
  updateFireEffect();&lt;br /&gt;
  &lt;br /&gt;
  if (!gameActive) {&lt;br /&gt;
    // Attendre qu'un bouton soit pressé pour démarrer&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      if (digitalRead(BUTTON_PINS[i]) == LOW) {&lt;br /&gt;
        delay(300);&lt;br /&gt;
        startNewGame();&lt;br /&gt;
        break;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  } else if (waitingForInput) {&lt;br /&gt;
    checkPlayerInput();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void startNewGame() {&lt;br /&gt;
  // Lire la difficulté au début de chaque partie&lt;br /&gt;
  readDifficulty();&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\n╔═══════════════════════════════════╗&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;║      NOUVELLE PARTIE              ║&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;╚═══════════════════════════════════╝&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;\n  Difficulté: &amp;quot;);&lt;br /&gt;
  printDifficulty();&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  &lt;br /&gt;
  gameActive = true;&lt;br /&gt;
  level = 1;&lt;br /&gt;
  sequenceLength = 0;&lt;br /&gt;
  &lt;br /&gt;
  delay(1000);&lt;br /&gt;
  nextLevel();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void nextLevel() {&lt;br /&gt;
  Serial.println(&amp;quot;─────────────────────────────────────&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;         NIVEAU &amp;quot;);&lt;br /&gt;
  Serial.print(level);&lt;br /&gt;
  Serial.print(&amp;quot; / &amp;quot;);&lt;br /&gt;
  Serial.println(maxLevels);&lt;br /&gt;
  Serial.println(&amp;quot;─────────────────────────────────────\n&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Ajouter une couleur aléatoire à la séquence&lt;br /&gt;
  sequence[sequenceLength] = random(0, 4);&lt;br /&gt;
  sequenceLength++;&lt;br /&gt;
  &lt;br /&gt;
  delay(1000);&lt;br /&gt;
  &lt;br /&gt;
  // Afficher la séquence au joueur&lt;br /&gt;
  playSequence();&lt;br /&gt;
  &lt;br /&gt;
  // Attendre la saisie du joueur&lt;br /&gt;
  playerIndex = 0;&lt;br /&gt;
  waitingForInput = true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void playSequence() {&lt;br /&gt;
  Serial.println(&amp;quot;👀 Mémorisez la séquence:\n&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  for (int i = 0; i &amp;lt; sequenceLength; i++) {&lt;br /&gt;
    int color = sequence[i];&lt;br /&gt;
    &lt;br /&gt;
    Serial.print(&amp;quot;   &amp;quot;);&lt;br /&gt;
    Serial.print(i + 1);&lt;br /&gt;
    Serial.print(&amp;quot;. &amp;quot;);&lt;br /&gt;
    Serial.println(COLOR_NAMES[color]);&lt;br /&gt;
    &lt;br /&gt;
    // Allumer la LED et jouer le son&lt;br /&gt;
    digitalWrite(LED_PINS[color], HIGH);&lt;br /&gt;
    myDFPlayer.play(COLOR_TO_SOUND[color]);  // Rouge=1, Jaune=2, Vert=3, Bleu=4&lt;br /&gt;
    &lt;br /&gt;
    delay(FLASH_DURATION);&lt;br /&gt;
    &lt;br /&gt;
    // Éteindre la LED&lt;br /&gt;
    digitalWrite(LED_PINS[color], LOW);&lt;br /&gt;
    &lt;br /&gt;
    // Pause entre les flashs&lt;br /&gt;
    if (i &amp;lt; sequenceLength - 1) {&lt;br /&gt;
      delay(PAUSE_BETWEEN_FLASH);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  delay(DELAY_AFTER_SEQUENCE);&lt;br /&gt;
  Serial.println(&amp;quot;\n🎮 À vous de jouer!\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void checkPlayerInput() {&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    if (digitalRead(BUTTON_PINS[i]) == LOW) {&lt;br /&gt;
      unsigned long currentTime = millis();&lt;br /&gt;
      &lt;br /&gt;
      // Débounce&lt;br /&gt;
      if (currentTime - lastButtonPress[i] &amp;gt; DEBOUNCE_DELAY) {&lt;br /&gt;
        lastButtonPress[i] = currentTime;&lt;br /&gt;
        &lt;br /&gt;
        // Feedback visuel et sonore&lt;br /&gt;
        digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
        myDFPlayer.play(COLOR_TO_SOUND[i]);  // Jouer le son correspondant&lt;br /&gt;
        &lt;br /&gt;
        Serial.print(&amp;quot;   → &amp;quot;);&lt;br /&gt;
        Serial.println(COLOR_NAMES[i]);&lt;br /&gt;
        &lt;br /&gt;
        // Enregistrer la saisie&lt;br /&gt;
        playerInput[playerIndex] = i;&lt;br /&gt;
        &lt;br /&gt;
        delay(300);&lt;br /&gt;
        digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
        &lt;br /&gt;
        // Vérifier si c'est correct&lt;br /&gt;
        if (playerInput[playerIndex] != sequence[playerIndex]) {&lt;br /&gt;
          gameLost();&lt;br /&gt;
          return;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        playerIndex++;&lt;br /&gt;
        &lt;br /&gt;
        // Vérifier si la séquence complète est correcte&lt;br /&gt;
        if (playerIndex &amp;gt;= sequenceLength) {&lt;br /&gt;
          sequenceComplete();&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void sequenceComplete() {&lt;br /&gt;
  Serial.println(&amp;quot;\n✅ Séquence correcte!\n&amp;quot;);&lt;br /&gt;
  waitingForInput = false;&lt;br /&gt;
  &lt;br /&gt;
  level++;&lt;br /&gt;
  &lt;br /&gt;
  // Vérifier si on a atteint le niveau maximum selon la difficulté&lt;br /&gt;
  if (level &amp;gt; maxLevels) {&lt;br /&gt;
    gameWon();&lt;br /&gt;
  } else {&lt;br /&gt;
    delay(500);&lt;br /&gt;
    &lt;br /&gt;
    // Animation de succès (rapide entre chaque niveau)&lt;br /&gt;
    for (int j = 0; j &amp;lt; 2; j++) {&lt;br /&gt;
      for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
        digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
      }&lt;br /&gt;
      delay(100);&lt;br /&gt;
      for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
        digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
      }&lt;br /&gt;
      delay(100);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    delay(1000);&lt;br /&gt;
    nextLevel();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void gameLost() {&lt;br /&gt;
  Serial.println(&amp;quot;\n╔═══════════════════════════════════╗&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;║          ❌ ERREUR!               ║&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;╚═══════════════════════════════════╝&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;\n   Vous étiez au niveau &amp;quot;);&lt;br /&gt;
  Serial.println(level);&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  &lt;br /&gt;
  waitingForInput = false;&lt;br /&gt;
  gameActive = false;&lt;br /&gt;
  &lt;br /&gt;
  // Son d'échec (0006.mp3)&lt;br /&gt;
  myDFPlayer.play(6);&lt;br /&gt;
  &lt;br /&gt;
  // Animation d'échec (clignotement rapide)&lt;br /&gt;
  for (int j = 0; j &amp;lt; 5; j++) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
    }&lt;br /&gt;
    delay(150);&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
    }&lt;br /&gt;
    delay(150);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot; Appuyez sur un bouton pour rejouer&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void gameWon() {&lt;br /&gt;
  Serial.println(&amp;quot;\n╔═══════════════════════════════════╗&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;║      🎉 VICTOIRE! 🎉              ║&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;╚═══════════════════════════════════╝&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;\n  Vous avez réussi les &amp;quot;);&lt;br /&gt;
  Serial.print(maxLevels);&lt;br /&gt;
  Serial.println(&amp;quot; niveaux!&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;  Difficulté: &amp;quot;);&lt;br /&gt;
  printDifficulty();&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  &lt;br /&gt;
  gameActive = false;&lt;br /&gt;
  &lt;br /&gt;
  // Son de victoire (0005.mp3)&lt;br /&gt;
  myDFPlayer.play(5);&lt;br /&gt;
  &lt;br /&gt;
  // Animation de victoire spectaculaire&lt;br /&gt;
  // Vague de lumière rapide&lt;br /&gt;
  for (int j = 0; j &amp;lt; 8; j++) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
      delay(60);&lt;br /&gt;
      digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Clignotement final toutes ensemble&lt;br /&gt;
  for (int j = 0; j &amp;lt; 4; j++) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
    }&lt;br /&gt;
    delay(200);&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
    }&lt;br /&gt;
    delay(200);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\n═══════════════════════════════════&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot; Ajustez le potentiomètre pour&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot; changer de difficulté&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot; Appuyez sur un bouton pour rejouer&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void startupAnimation() {&lt;br /&gt;
  Serial.println(&amp;quot;\nAnimation de démarrage...\n&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Allumage séquentiel&lt;br /&gt;
  for (int j = 0; j &amp;lt; 2; j++) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
      delay(100);&lt;br /&gt;
    }&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
      delay(100);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Flash final&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
  }&lt;br /&gt;
  delay(300);&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Effet feu de bois pour le ruban LED&lt;br /&gt;
void updateFireEffect() {&lt;br /&gt;
  unsigned long currentTime = millis();&lt;br /&gt;
  &lt;br /&gt;
  // Mettre à jour seulement toutes les FIRE_UPDATE_INTERVAL ms&lt;br /&gt;
  if (currentTime - lastFireUpdate &amp;lt; FIRE_UPDATE_INTERVAL) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  lastFireUpdate = currentTime;&lt;br /&gt;
  &lt;br /&gt;
  // Refroidissement: chaque cellule perd un peu de chaleur&lt;br /&gt;
  for (int i = 0; i &amp;lt; NUM_LEDS; i++) {&lt;br /&gt;
    int cooldown = random(0, ((55 * 10) / NUM_LEDS) + 2);&lt;br /&gt;
    if (cooldown &amp;gt;= heat[i]) {&lt;br /&gt;
      heat[i] = 0;&lt;br /&gt;
    } else {&lt;br /&gt;
      heat[i] = heat[i] - cooldown;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Diffusion de chaleur vers le haut&lt;br /&gt;
  for (int k = NUM_LEDS - 1; k &amp;gt;= 2; k--) {&lt;br /&gt;
    heat[k] = (heat[k - 1] + heat[k - 2] + heat[k - 2]) / 3;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Ajout de nouvelles étincelles aléatoires en bas&lt;br /&gt;
  if (random(255) &amp;lt; 120) {&lt;br /&gt;
    int y = random(7);&lt;br /&gt;
    heat[y] = heat[y] + random(160, 255);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Conversion de la chaleur en couleurs&lt;br /&gt;
  for (int j = 0; j &amp;lt; NUM_LEDS; j++) {&lt;br /&gt;
    // Palette de couleurs feu: noir → rouge → orange → jaune → blanc&lt;br /&gt;
    byte temperature = heat[j];&lt;br /&gt;
    &lt;br /&gt;
    // Noir → Rouge foncé&lt;br /&gt;
    byte t192 = scale8_video(temperature, 191);&lt;br /&gt;
    byte heatramp = t192 &amp;amp; 0x3F; // 0..63&lt;br /&gt;
    heatramp &amp;lt;&amp;lt;= 2; // 0..252&lt;br /&gt;
    &lt;br /&gt;
    if (t192 &amp;amp; 0x80) {&lt;br /&gt;
      // Partie la plus chaude - jaune vers blanc&lt;br /&gt;
      leds[j].r = 255;&lt;br /&gt;
      leds[j].g = 255;&lt;br /&gt;
      leds[j].b = heatramp;&lt;br /&gt;
    } else if (t192 &amp;amp; 0x40) {&lt;br /&gt;
      // Partie chaude - rouge vers jaune&lt;br /&gt;
      leds[j].r = 255;&lt;br /&gt;
      leds[j].g = heatramp;&lt;br /&gt;
      leds[j].b = 0;&lt;br /&gt;
    } else {&lt;br /&gt;
      // Partie froide - noir vers rouge&lt;br /&gt;
      leds[j].r = heatramp;&lt;br /&gt;
      leds[j].g = 0;&lt;br /&gt;
      leds[j].b = 0;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  FastLED.show();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Lire le potentiomètre et déterminer la difficulté&lt;br /&gt;
void readDifficulty() {&lt;br /&gt;
  int potValue = analogRead(POTENTIOMETER_PIN);  // 0-4095 sur ESP32&lt;br /&gt;
  &lt;br /&gt;
  // Diviser en 3 zones&lt;br /&gt;
  if (potValue &amp;lt; 1365) {&lt;br /&gt;
    // Zone 1: FACILE (0-1365)&lt;br /&gt;
    currentDifficulty = EASY;&lt;br /&gt;
    maxLevels = 3;&lt;br /&gt;
  } else if (potValue &amp;lt; 2730) {&lt;br /&gt;
    // Zone 2: MOYEN (1365-2730)&lt;br /&gt;
    currentDifficulty = MEDIUM;&lt;br /&gt;
    maxLevels = 4;&lt;br /&gt;
  } else {&lt;br /&gt;
    // Zone 3: DIFFICILE (2730-4095)&lt;br /&gt;
    currentDifficulty = HARD;&lt;br /&gt;
    maxLevels = 6;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Afficher la difficulté actuelle&lt;br /&gt;
void printDifficulty() {&lt;br /&gt;
  switch(currentDifficulty) {&lt;br /&gt;
    case EASY:&lt;br /&gt;
      Serial.print(&amp;quot;FACILE (3 niveaux)&amp;quot;);&lt;br /&gt;
      break;&lt;br /&gt;
    case MEDIUM:&lt;br /&gt;
      Serial.print(&amp;quot;MOYEN (4 niveaux)&amp;quot;);&lt;br /&gt;
      break;&lt;br /&gt;
    case HARD:&lt;br /&gt;
      Serial.print(&amp;quot;DIFFICILE (6 niveaux)&amp;quot;);&lt;br /&gt;
      break;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Conception des boutons &amp;lt;br&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
- Au départ : Bouton rouge à disposition, le problème est qu'il faut plusieur couleur. Alors nous changeons de couleur la led et voulons remplacer l'opercule rouge par du plexiglass, cependant cela ne se colle pas au bouton. &amp;lt;br&amp;gt;&lt;br /&gt;
- Alors : Nous avons pris des boutons plus petit de plusieurs couleur (rouge, bleu, vert et jaune). Pour les rendre plus grands, nous avons decider de couper du plexiglass en plusieur forme, bonhomme de neige, sapin, renne, et pain d'épice, nous avons laissé un trou (de 27mm de diamètre) dans chacune des formes afin de mettre les boutons dedans.&amp;lt;br&amp;gt;&lt;br /&gt;
- Pour finir, nous avons rajouté du vinyl de la même couleur que les boutons pour les rendre plus visible sur la cheminée.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Prototype design bouton &amp;lt;br&amp;gt; ==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Fichier:Prototypes Boutons .pdf|&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==premier diaporama : Alors ? Comment ça se passe ?==&lt;br /&gt;
Diaporama type '''Alors ?''': [[media:DiaporamaSuperBrest2024-Alors.odp|Téléchargez et adaptez-le !]]&lt;br /&gt;
&lt;br /&gt;
==second diaporama : Et voilà !==&lt;br /&gt;
Diaporama type '''Et Voilà !''' : [[media:DiaporamaSuperBrest2024-EtVoila.odp|Téléchargez et adaptez-le !]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Sciencehackdaybrest]]&lt;br /&gt;
[[Catégorie:Super Brest]]&lt;br /&gt;
[[Catégorie:Super Brest 2025]]&lt;/div&gt;</summary>
		<author><name>Emma</name></author>	</entry>

	<entry>
		<id>http://wiki.lesfabriquesduponant.net/index.php?title=Fichier:Trappe.svg&amp;diff=35368</id>
		<title>Fichier:Trappe.svg</title>
		<link rel="alternate" type="text/html" href="http://wiki.lesfabriquesduponant.net/index.php?title=Fichier:Trappe.svg&amp;diff=35368"/>
				<updated>2025-11-30T10:41:47Z</updated>
		
		<summary type="html">&lt;p&gt;Emma : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Emma</name></author>	</entry>

	<entry>
		<id>http://wiki.lesfabriquesduponant.net/index.php?title=Super_Brest_2025_:_L%27%C3%A9trange_no%C3%ABl_de_monsieur_Simon&amp;diff=35367</id>
		<title>Super Brest 2025 : L'étrange noël de monsieur Simon</title>
		<link rel="alternate" type="text/html" href="http://wiki.lesfabriquesduponant.net/index.php?title=Super_Brest_2025_:_L%27%C3%A9trange_no%C3%ABl_de_monsieur_Simon&amp;diff=35367"/>
				<updated>2025-11-30T10:40:23Z</updated>
		
		<summary type="html">&lt;p&gt;Emma : /* Prototype design bouton  */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Fichier:SuperBrest2025-BADGE.png|200px]]&lt;br /&gt;
&lt;br /&gt;
==résumé du projet==&lt;br /&gt;
Ce hackathon a pour objectif d'adapter le jeu Simon (mémoire des couleurs/sons) en l'adaptant spécifiquement pour la fête de Noël de l'école.&lt;br /&gt;
&lt;br /&gt;
Le projet consiste à :&lt;br /&gt;
&lt;br /&gt;
Utiliser une cheminée existante pour le jeu.&lt;br /&gt;
&lt;br /&gt;
Programmer l'électronique Arduino pour simuler les lumières et les sons de Simon.&lt;br /&gt;
&lt;br /&gt;
Intégrer une thématique Noël (couleurs/sons festifs) pour créer une animation ludique et éducative qui met en avant la créativité.&lt;br /&gt;
&lt;br /&gt;
==membres du projet==&lt;br /&gt;
&lt;br /&gt;
Audrey : Ailée créature &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Emma : Magique arc en ciel &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ewen: Magic flocon &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Syrielle: Espiegle corne &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nadia : Divinité flamboyante &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Bibliographie et webographie sur le projet==&lt;br /&gt;
[[https://www.wiki.lesfabriquesduponant.net/index.php?title=ENIB_2022_-_groupe_A_:_Simon]]&lt;br /&gt;
https://fr.wikipedia.org/wiki/Simon_(jeu)&lt;br /&gt;
==banque d'images==&lt;br /&gt;
[[Fichier:E3F3D4A8-ECC8-40C8-9B21-032B27D7E458 2.jpg|200Pxpx|vignette|centré]]&lt;br /&gt;
&lt;br /&gt;
==prototype qu'on souhaite réaliser ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Prototype simon.jpg|vignette|centré]]&lt;br /&gt;
&lt;br /&gt;
==Schema de cablage==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capture d’écran 2025-11-29 à 15.42.22.png|vignette|centré|schema de cablage]]&lt;br /&gt;
&lt;br /&gt;
==Programme arduino==&lt;br /&gt;
&lt;br /&gt;
Le code à ete crée par l'IA claude , voici le prompt : &amp;lt;br&amp;gt;&lt;br /&gt;
Crée un jeu Simon pour ESP32 avec :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- 4 boutons/LEDs (Rouge/GPIO12-25, Jaune/GPIO13-26, Vert/GPIO14-27, Bleu/GPIO15-33)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- DFPlayer Mini sur GPIO16-17 avec 6 sons Noël (0001-0006.mp3)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Ruban LED WS2812B 144 LEDs sur GPIO32 avec effet feu continu&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Potentiomètre GPIO34 pour 3 difficultés (3/4/6 niveaux)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Son 0005.mp3 pour victoire totale, 0006.mp3 pour échec immédiat&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Bibliothèques : DFRobotDFPlayerMini + FastLED&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Arduino&amp;quot; line&amp;gt;/*&lt;br /&gt;
 * JEU SIMON COMPLET - ESP32 + DFPlayer Mini + Ruban LED Feu&lt;br /&gt;
 * &lt;br /&gt;
 * Câblage:&lt;br /&gt;
 * ─────────────────────────────────────────────&lt;br /&gt;
 * DFPlayer Mini:&lt;br /&gt;
 *   - RX      → GPIO 17 (TX ESP32) + résistance 1kΩ&lt;br /&gt;
 *   - TX      → GPIO 16 (RX ESP32)&lt;br /&gt;
 *   - VCC     → 5V&lt;br /&gt;
 *   - GND     → GND&lt;br /&gt;
 *   - SPK_1/2 → Haut-parleur 3W (4-8Ω)&lt;br /&gt;
 * &lt;br /&gt;
 * 4 Boutons (avec pull-up interne):&lt;br /&gt;
 *   - Bouton ROUGE  → GPIO 12 → GND&lt;br /&gt;
 *   - Bouton VERT   → GPIO 13 → GND&lt;br /&gt;
 *   - Bouton BLEU   → GPIO 14 → GND&lt;br /&gt;
 *   - Bouton JAUNE  → GPIO 15 → GND&lt;br /&gt;
 * &lt;br /&gt;
 * 4 LEDs (avec résistances 220Ω):&lt;br /&gt;
 *   - LED ROUGE  → GPIO 25 → Résistance → GND&lt;br /&gt;
 *   - LED VERTE  → GPIO 26 → Résistance → GND&lt;br /&gt;
 *   - LED BLEUE  → GPIO 27 → Résistance → GND&lt;br /&gt;
 *   - LED JAUNE  → GPIO 33 → Résistance → GND&lt;br /&gt;
 * &lt;br /&gt;
 * Ruban LED (WS2812B - 144 LEDs):&lt;br /&gt;
 *   - DATA → GPIO 32&lt;br /&gt;
 *   - VCC  → 5V (alimentation externe recommandée si &amp;gt;30 LEDs)&lt;br /&gt;
 *   - GND  → GND (commun avec ESP32)&lt;br /&gt;
 * &lt;br /&gt;
 * Potentiomètre (sélection difficulté):&lt;br /&gt;
 *   - Broche gauche  → GND&lt;br /&gt;
 *   - Broche centrale → GPIO 34 (ADC)&lt;br /&gt;
 *   - Broche droite   → 3.3V&lt;br /&gt;
 * &lt;br /&gt;
 * Fichiers MP3 sur carte SD (FAT32):&lt;br /&gt;
 *   - 0001.mp3 : Son bouton ROUGE&lt;br /&gt;
 *   - 0002.mp3 : Son bouton JAUNE&lt;br /&gt;
 *   - 0003.mp3 : Son bouton VERT&lt;br /&gt;
 *   - 0004.mp3 : Son bouton BLEU&lt;br /&gt;
 *   - 0005.mp3 : Son VICTOIRE (après 5 niveaux réussis)&lt;br /&gt;
 *   - 0006.mp3 : Son ÉCHEC (erreur dans la séquence)&lt;br /&gt;
 * &lt;br /&gt;
 * IMPORTANT: Installez la bibliothèque FastLED&lt;br /&gt;
 * (Croquis → Inclure une bibliothèque → Gérer les bibliothèques → FastLED)&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;DFRobotDFPlayerMini.h&amp;gt;&lt;br /&gt;
#include &amp;lt;FastLED.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// Configuration DFPlayer&lt;br /&gt;
HardwareSerial mySoftwareSerial(2);&lt;br /&gt;
DFRobotDFPlayerMini myDFPlayer;&lt;br /&gt;
&lt;br /&gt;
// Configuration Ruban LED&lt;br /&gt;
#define LED_STRIP_PIN 32&lt;br /&gt;
#define NUM_LEDS 144&lt;br /&gt;
#define LED_TYPE WS2812B&lt;br /&gt;
#define COLOR_ORDER GRB&lt;br /&gt;
CRGB leds[NUM_LEDS];&lt;br /&gt;
&lt;br /&gt;
// Configuration Potentiomètre (sélection difficulté)&lt;br /&gt;
#define POTENTIOMETER_PIN 34  // GPIO 34 (ADC1_CH6)&lt;br /&gt;
&lt;br /&gt;
// Niveaux de difficulté&lt;br /&gt;
enum Difficulty {&lt;br /&gt;
  EASY = 0,    // 3 niveaux&lt;br /&gt;
  MEDIUM = 1,  // 4 niveaux&lt;br /&gt;
  HARD = 2     // 6 niveaux&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Difficulty currentDifficulty = MEDIUM;&lt;br /&gt;
int maxLevels = 4;  // Par défaut moyen&lt;br /&gt;
&lt;br /&gt;
// Configuration des pins boutons et LEDs&lt;br /&gt;
const int BUTTON_PINS[4] = {12, 13, 14, 15};  // Rouge, Jaune, Vert, Bleu&lt;br /&gt;
const int LED_PINS[4] = {25, 26, 27, 33};     // Rouge, Jaune, Vert, Bleu&lt;br /&gt;
&lt;br /&gt;
// Noms des couleurs pour l'affichage&lt;br /&gt;
const char* COLOR_NAMES[4] = {&amp;quot;ROUGE&amp;quot;, &amp;quot;JAUNE&amp;quot;, &amp;quot;VERT&amp;quot;, &amp;quot;BLEU&amp;quot;};&lt;br /&gt;
&lt;br /&gt;
// Correspondance couleur -&amp;gt; numéro de son&lt;br /&gt;
const int COLOR_TO_SOUND[4] = {1, 2, 3, 4};  // Rouge=1, Jaune=2, Vert=3, Bleu=4&lt;br /&gt;
&lt;br /&gt;
// Variables du jeu&lt;br /&gt;
int sequence[100];              // Séquence à mémoriser (max 100 niveaux)&lt;br /&gt;
int sequenceLength = 0;         // Longueur actuelle de la séquence&lt;br /&gt;
int playerInput[100];           // Saisie du joueur&lt;br /&gt;
int playerIndex = 0;            // Position dans la saisie&lt;br /&gt;
int level = 1;                  // Niveau actuel&lt;br /&gt;
bool gameActive = false;        // Jeu en cours&lt;br /&gt;
bool waitingForInput = false;   // En attente de la saisie du joueur&lt;br /&gt;
&lt;br /&gt;
// Débounce des boutons&lt;br /&gt;
unsigned long lastButtonPress[4] = {0, 0, 0, 0};&lt;br /&gt;
const unsigned long DEBOUNCE_DELAY = 250;&lt;br /&gt;
&lt;br /&gt;
// Timings du jeu (en millisecondes)&lt;br /&gt;
const int FLASH_DURATION = 500;      // Durée d'allumage d'une LED&lt;br /&gt;
const int PAUSE_BETWEEN_FLASH = 200; // Pause entre deux LEDs&lt;br /&gt;
const int DELAY_AFTER_SEQUENCE = 500;// Délai avant que le joueur joue&lt;br /&gt;
&lt;br /&gt;
// Variables pour l'effet feu&lt;br /&gt;
byte heat[NUM_LEDS];&lt;br /&gt;
unsigned long lastFireUpdate = 0;&lt;br /&gt;
const int FIRE_UPDATE_INTERVAL = 50; // Mise à jour toutes les 50ms&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(115200);&lt;br /&gt;
  delay(1000);&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\n╔═══════════════════════════════════╗&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;║      JEU SIMON - ESP32            ║&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;╚═══════════════════════════════════╝\n&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Configuration des boutons&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    pinMode(BUTTON_PINS[i], INPUT_PULLUP);&lt;br /&gt;
  }&lt;br /&gt;
  Serial.println(&amp;quot;✓ Boutons configurés&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Configuration des LEDs&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    pinMode(LED_PINS[i], OUTPUT);&lt;br /&gt;
    digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
  }&lt;br /&gt;
  Serial.println(&amp;quot;✓ LEDs configurées&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Configuration du ruban LED&lt;br /&gt;
  FastLED.addLeds&amp;lt;LED_TYPE, LED_STRIP_PIN, COLOR_ORDER&amp;gt;(leds, NUM_LEDS);&lt;br /&gt;
  FastLED.setBrightness(100); // Luminosité (0-255)&lt;br /&gt;
  FastLED.clear();&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
  Serial.println(&amp;quot;✓ Ruban LED configuré (144 LEDs)&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Configuration du potentiomètre&lt;br /&gt;
  pinMode(POTENTIOMETER_PIN, INPUT);&lt;br /&gt;
  Serial.println(&amp;quot;✓ Potentiomètre configuré sur GPIO 34&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Lire la difficulté initiale&lt;br /&gt;
  readDifficulty();&lt;br /&gt;
  &lt;br /&gt;
  // Configuration DFPlayer&lt;br /&gt;
  mySoftwareSerial.begin(9600, SERIAL_8N1, 16, 17);&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\nInitialisation du DFPlayer...&amp;quot;);&lt;br /&gt;
  if (!myDFPlayer.begin(mySoftwareSerial)) {&lt;br /&gt;
    Serial.println(&amp;quot;\n✗ ERREUR DFPlayer!&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;Vérifiez:&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;  - Carte SD insérée (FAT32)&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;  - Fichiers 0001.mp3 à 0006.mp3&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;  - Connexions RX/TX&amp;quot;);&lt;br /&gt;
    while(true) { delay(1000); }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;✓ DFPlayer OK!&amp;quot;);&lt;br /&gt;
  myDFPlayer.volume(25);  // Volume (0-30)&lt;br /&gt;
  delay(100);&lt;br /&gt;
  &lt;br /&gt;
  // Animation de démarrage&lt;br /&gt;
  startupAnimation();&lt;br /&gt;
  &lt;br /&gt;
  // Initialiser le générateur aléatoire&lt;br /&gt;
  randomSeed(analogRead(0));&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\n═══════════════════════════════════&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;  DIFFICULTÉ SÉLECTIONNÉE:&amp;quot;);&lt;br /&gt;
  printDifficulty();&lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;   Appuyez sur un bouton pour&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;        commencer le jeu!&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  // Mettre à jour l'effet feu en continu&lt;br /&gt;
  updateFireEffect();&lt;br /&gt;
  &lt;br /&gt;
  if (!gameActive) {&lt;br /&gt;
    // Attendre qu'un bouton soit pressé pour démarrer&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      if (digitalRead(BUTTON_PINS[i]) == LOW) {&lt;br /&gt;
        delay(300);&lt;br /&gt;
        startNewGame();&lt;br /&gt;
        break;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  } else if (waitingForInput) {&lt;br /&gt;
    checkPlayerInput();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void startNewGame() {&lt;br /&gt;
  // Lire la difficulté au début de chaque partie&lt;br /&gt;
  readDifficulty();&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\n╔═══════════════════════════════════╗&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;║      NOUVELLE PARTIE              ║&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;╚═══════════════════════════════════╝&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;\n  Difficulté: &amp;quot;);&lt;br /&gt;
  printDifficulty();&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  &lt;br /&gt;
  gameActive = true;&lt;br /&gt;
  level = 1;&lt;br /&gt;
  sequenceLength = 0;&lt;br /&gt;
  &lt;br /&gt;
  delay(1000);&lt;br /&gt;
  nextLevel();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void nextLevel() {&lt;br /&gt;
  Serial.println(&amp;quot;─────────────────────────────────────&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;         NIVEAU &amp;quot;);&lt;br /&gt;
  Serial.print(level);&lt;br /&gt;
  Serial.print(&amp;quot; / &amp;quot;);&lt;br /&gt;
  Serial.println(maxLevels);&lt;br /&gt;
  Serial.println(&amp;quot;─────────────────────────────────────\n&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Ajouter une couleur aléatoire à la séquence&lt;br /&gt;
  sequence[sequenceLength] = random(0, 4);&lt;br /&gt;
  sequenceLength++;&lt;br /&gt;
  &lt;br /&gt;
  delay(1000);&lt;br /&gt;
  &lt;br /&gt;
  // Afficher la séquence au joueur&lt;br /&gt;
  playSequence();&lt;br /&gt;
  &lt;br /&gt;
  // Attendre la saisie du joueur&lt;br /&gt;
  playerIndex = 0;&lt;br /&gt;
  waitingForInput = true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void playSequence() {&lt;br /&gt;
  Serial.println(&amp;quot;👀 Mémorisez la séquence:\n&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  for (int i = 0; i &amp;lt; sequenceLength; i++) {&lt;br /&gt;
    int color = sequence[i];&lt;br /&gt;
    &lt;br /&gt;
    Serial.print(&amp;quot;   &amp;quot;);&lt;br /&gt;
    Serial.print(i + 1);&lt;br /&gt;
    Serial.print(&amp;quot;. &amp;quot;);&lt;br /&gt;
    Serial.println(COLOR_NAMES[color]);&lt;br /&gt;
    &lt;br /&gt;
    // Allumer la LED et jouer le son&lt;br /&gt;
    digitalWrite(LED_PINS[color], HIGH);&lt;br /&gt;
    myDFPlayer.play(COLOR_TO_SOUND[color]);  // Rouge=1, Jaune=2, Vert=3, Bleu=4&lt;br /&gt;
    &lt;br /&gt;
    delay(FLASH_DURATION);&lt;br /&gt;
    &lt;br /&gt;
    // Éteindre la LED&lt;br /&gt;
    digitalWrite(LED_PINS[color], LOW);&lt;br /&gt;
    &lt;br /&gt;
    // Pause entre les flashs&lt;br /&gt;
    if (i &amp;lt; sequenceLength - 1) {&lt;br /&gt;
      delay(PAUSE_BETWEEN_FLASH);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  delay(DELAY_AFTER_SEQUENCE);&lt;br /&gt;
  Serial.println(&amp;quot;\n🎮 À vous de jouer!\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void checkPlayerInput() {&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    if (digitalRead(BUTTON_PINS[i]) == LOW) {&lt;br /&gt;
      unsigned long currentTime = millis();&lt;br /&gt;
      &lt;br /&gt;
      // Débounce&lt;br /&gt;
      if (currentTime - lastButtonPress[i] &amp;gt; DEBOUNCE_DELAY) {&lt;br /&gt;
        lastButtonPress[i] = currentTime;&lt;br /&gt;
        &lt;br /&gt;
        // Feedback visuel et sonore&lt;br /&gt;
        digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
        myDFPlayer.play(COLOR_TO_SOUND[i]);  // Jouer le son correspondant&lt;br /&gt;
        &lt;br /&gt;
        Serial.print(&amp;quot;   → &amp;quot;);&lt;br /&gt;
        Serial.println(COLOR_NAMES[i]);&lt;br /&gt;
        &lt;br /&gt;
        // Enregistrer la saisie&lt;br /&gt;
        playerInput[playerIndex] = i;&lt;br /&gt;
        &lt;br /&gt;
        delay(300);&lt;br /&gt;
        digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
        &lt;br /&gt;
        // Vérifier si c'est correct&lt;br /&gt;
        if (playerInput[playerIndex] != sequence[playerIndex]) {&lt;br /&gt;
          gameLost();&lt;br /&gt;
          return;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        playerIndex++;&lt;br /&gt;
        &lt;br /&gt;
        // Vérifier si la séquence complète est correcte&lt;br /&gt;
        if (playerIndex &amp;gt;= sequenceLength) {&lt;br /&gt;
          sequenceComplete();&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void sequenceComplete() {&lt;br /&gt;
  Serial.println(&amp;quot;\n✅ Séquence correcte!\n&amp;quot;);&lt;br /&gt;
  waitingForInput = false;&lt;br /&gt;
  &lt;br /&gt;
  level++;&lt;br /&gt;
  &lt;br /&gt;
  // Vérifier si on a atteint le niveau maximum selon la difficulté&lt;br /&gt;
  if (level &amp;gt; maxLevels) {&lt;br /&gt;
    gameWon();&lt;br /&gt;
  } else {&lt;br /&gt;
    delay(500);&lt;br /&gt;
    &lt;br /&gt;
    // Animation de succès (rapide entre chaque niveau)&lt;br /&gt;
    for (int j = 0; j &amp;lt; 2; j++) {&lt;br /&gt;
      for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
        digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
      }&lt;br /&gt;
      delay(100);&lt;br /&gt;
      for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
        digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
      }&lt;br /&gt;
      delay(100);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    delay(1000);&lt;br /&gt;
    nextLevel();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void gameLost() {&lt;br /&gt;
  Serial.println(&amp;quot;\n╔═══════════════════════════════════╗&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;║          ❌ ERREUR!               ║&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;╚═══════════════════════════════════╝&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;\n   Vous étiez au niveau &amp;quot;);&lt;br /&gt;
  Serial.println(level);&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  &lt;br /&gt;
  waitingForInput = false;&lt;br /&gt;
  gameActive = false;&lt;br /&gt;
  &lt;br /&gt;
  // Son d'échec (0006.mp3)&lt;br /&gt;
  myDFPlayer.play(6);&lt;br /&gt;
  &lt;br /&gt;
  // Animation d'échec (clignotement rapide)&lt;br /&gt;
  for (int j = 0; j &amp;lt; 5; j++) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
    }&lt;br /&gt;
    delay(150);&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
    }&lt;br /&gt;
    delay(150);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot; Appuyez sur un bouton pour rejouer&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void gameWon() {&lt;br /&gt;
  Serial.println(&amp;quot;\n╔═══════════════════════════════════╗&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;║      🎉 VICTOIRE! 🎉              ║&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;╚═══════════════════════════════════╝&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;\n  Vous avez réussi les &amp;quot;);&lt;br /&gt;
  Serial.print(maxLevels);&lt;br /&gt;
  Serial.println(&amp;quot; niveaux!&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;  Difficulté: &amp;quot;);&lt;br /&gt;
  printDifficulty();&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  &lt;br /&gt;
  gameActive = false;&lt;br /&gt;
  &lt;br /&gt;
  // Son de victoire (0005.mp3)&lt;br /&gt;
  myDFPlayer.play(5);&lt;br /&gt;
  &lt;br /&gt;
  // Animation de victoire spectaculaire&lt;br /&gt;
  // Vague de lumière rapide&lt;br /&gt;
  for (int j = 0; j &amp;lt; 8; j++) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
      delay(60);&lt;br /&gt;
      digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Clignotement final toutes ensemble&lt;br /&gt;
  for (int j = 0; j &amp;lt; 4; j++) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
    }&lt;br /&gt;
    delay(200);&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
    }&lt;br /&gt;
    delay(200);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\n═══════════════════════════════════&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot; Ajustez le potentiomètre pour&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot; changer de difficulté&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot; Appuyez sur un bouton pour rejouer&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void startupAnimation() {&lt;br /&gt;
  Serial.println(&amp;quot;\nAnimation de démarrage...\n&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Allumage séquentiel&lt;br /&gt;
  for (int j = 0; j &amp;lt; 2; j++) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
      delay(100);&lt;br /&gt;
    }&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
      delay(100);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Flash final&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
  }&lt;br /&gt;
  delay(300);&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Effet feu de bois pour le ruban LED&lt;br /&gt;
void updateFireEffect() {&lt;br /&gt;
  unsigned long currentTime = millis();&lt;br /&gt;
  &lt;br /&gt;
  // Mettre à jour seulement toutes les FIRE_UPDATE_INTERVAL ms&lt;br /&gt;
  if (currentTime - lastFireUpdate &amp;lt; FIRE_UPDATE_INTERVAL) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  lastFireUpdate = currentTime;&lt;br /&gt;
  &lt;br /&gt;
  // Refroidissement: chaque cellule perd un peu de chaleur&lt;br /&gt;
  for (int i = 0; i &amp;lt; NUM_LEDS; i++) {&lt;br /&gt;
    int cooldown = random(0, ((55 * 10) / NUM_LEDS) + 2);&lt;br /&gt;
    if (cooldown &amp;gt;= heat[i]) {&lt;br /&gt;
      heat[i] = 0;&lt;br /&gt;
    } else {&lt;br /&gt;
      heat[i] = heat[i] - cooldown;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Diffusion de chaleur vers le haut&lt;br /&gt;
  for (int k = NUM_LEDS - 1; k &amp;gt;= 2; k--) {&lt;br /&gt;
    heat[k] = (heat[k - 1] + heat[k - 2] + heat[k - 2]) / 3;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Ajout de nouvelles étincelles aléatoires en bas&lt;br /&gt;
  if (random(255) &amp;lt; 120) {&lt;br /&gt;
    int y = random(7);&lt;br /&gt;
    heat[y] = heat[y] + random(160, 255);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Conversion de la chaleur en couleurs&lt;br /&gt;
  for (int j = 0; j &amp;lt; NUM_LEDS; j++) {&lt;br /&gt;
    // Palette de couleurs feu: noir → rouge → orange → jaune → blanc&lt;br /&gt;
    byte temperature = heat[j];&lt;br /&gt;
    &lt;br /&gt;
    // Noir → Rouge foncé&lt;br /&gt;
    byte t192 = scale8_video(temperature, 191);&lt;br /&gt;
    byte heatramp = t192 &amp;amp; 0x3F; // 0..63&lt;br /&gt;
    heatramp &amp;lt;&amp;lt;= 2; // 0..252&lt;br /&gt;
    &lt;br /&gt;
    if (t192 &amp;amp; 0x80) {&lt;br /&gt;
      // Partie la plus chaude - jaune vers blanc&lt;br /&gt;
      leds[j].r = 255;&lt;br /&gt;
      leds[j].g = 255;&lt;br /&gt;
      leds[j].b = heatramp;&lt;br /&gt;
    } else if (t192 &amp;amp; 0x40) {&lt;br /&gt;
      // Partie chaude - rouge vers jaune&lt;br /&gt;
      leds[j].r = 255;&lt;br /&gt;
      leds[j].g = heatramp;&lt;br /&gt;
      leds[j].b = 0;&lt;br /&gt;
    } else {&lt;br /&gt;
      // Partie froide - noir vers rouge&lt;br /&gt;
      leds[j].r = heatramp;&lt;br /&gt;
      leds[j].g = 0;&lt;br /&gt;
      leds[j].b = 0;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  FastLED.show();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Lire le potentiomètre et déterminer la difficulté&lt;br /&gt;
void readDifficulty() {&lt;br /&gt;
  int potValue = analogRead(POTENTIOMETER_PIN);  // 0-4095 sur ESP32&lt;br /&gt;
  &lt;br /&gt;
  // Diviser en 3 zones&lt;br /&gt;
  if (potValue &amp;lt; 1365) {&lt;br /&gt;
    // Zone 1: FACILE (0-1365)&lt;br /&gt;
    currentDifficulty = EASY;&lt;br /&gt;
    maxLevels = 3;&lt;br /&gt;
  } else if (potValue &amp;lt; 2730) {&lt;br /&gt;
    // Zone 2: MOYEN (1365-2730)&lt;br /&gt;
    currentDifficulty = MEDIUM;&lt;br /&gt;
    maxLevels = 4;&lt;br /&gt;
  } else {&lt;br /&gt;
    // Zone 3: DIFFICILE (2730-4095)&lt;br /&gt;
    currentDifficulty = HARD;&lt;br /&gt;
    maxLevels = 6;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Afficher la difficulté actuelle&lt;br /&gt;
void printDifficulty() {&lt;br /&gt;
  switch(currentDifficulty) {&lt;br /&gt;
    case EASY:&lt;br /&gt;
      Serial.print(&amp;quot;FACILE (3 niveaux)&amp;quot;);&lt;br /&gt;
      break;&lt;br /&gt;
    case MEDIUM:&lt;br /&gt;
      Serial.print(&amp;quot;MOYEN (4 niveaux)&amp;quot;);&lt;br /&gt;
      break;&lt;br /&gt;
    case HARD:&lt;br /&gt;
      Serial.print(&amp;quot;DIFFICILE (6 niveaux)&amp;quot;);&lt;br /&gt;
      break;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Conception des boutons &amp;lt;br&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
- Au départ : Bouton rouge à disposition, le problème est qu'il faut plusieur couleur. Alors nous changeons de couleur la led et voulons remplacer l'opercule rouge par du plexiglass, cependant cela ne se colle pas au bouton. &amp;lt;br&amp;gt;&lt;br /&gt;
- Alors : Nous avons pris des boutons plus petit de plusieurs couleur (rouge, bleu, vert et jaune). Pour les rendre plus grands, nous avons decider de couper du plexiglass en plusieur forme, bonhomme de neige, sapin, renne, et pain d'épice, nous avons laissé un trou (de 27mm de diamètre) dans chacune des formes afin de mettre les boutons dedans.&amp;lt;br&amp;gt;&lt;br /&gt;
- Pour finir, nous avons rajouté du vinyl de la même couleur que les boutons pour les rendre plus visible sur la cheminée.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Prototype design bouton &amp;lt;br&amp;gt; ==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Fichier:Prototypes Boutons .pdf|Description 1&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==premier diaporama : Alors ? Comment ça se passe ?==&lt;br /&gt;
Diaporama type '''Alors ?''': [[media:DiaporamaSuperBrest2024-Alors.odp|Téléchargez et adaptez-le !]]&lt;br /&gt;
&lt;br /&gt;
==second diaporama : Et voilà !==&lt;br /&gt;
Diaporama type '''Et Voilà !''' : [[media:DiaporamaSuperBrest2024-EtVoila.odp|Téléchargez et adaptez-le !]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Sciencehackdaybrest]]&lt;br /&gt;
[[Catégorie:Super Brest]]&lt;br /&gt;
[[Catégorie:Super Brest 2025]]&lt;/div&gt;</summary>
		<author><name>Emma</name></author>	</entry>

	<entry>
		<id>http://wiki.lesfabriquesduponant.net/index.php?title=Super_Brest_2025_:_L%27%C3%A9trange_no%C3%ABl_de_monsieur_Simon&amp;diff=35365</id>
		<title>Super Brest 2025 : L'étrange noël de monsieur Simon</title>
		<link rel="alternate" type="text/html" href="http://wiki.lesfabriquesduponant.net/index.php?title=Super_Brest_2025_:_L%27%C3%A9trange_no%C3%ABl_de_monsieur_Simon&amp;diff=35365"/>
				<updated>2025-11-30T10:36:40Z</updated>
		
		<summary type="html">&lt;p&gt;Emma : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Fichier:SuperBrest2025-BADGE.png|200px]]&lt;br /&gt;
&lt;br /&gt;
==résumé du projet==&lt;br /&gt;
Ce hackathon a pour objectif d'adapter le jeu Simon (mémoire des couleurs/sons) en l'adaptant spécifiquement pour la fête de Noël de l'école.&lt;br /&gt;
&lt;br /&gt;
Le projet consiste à :&lt;br /&gt;
&lt;br /&gt;
Utiliser une cheminée existante pour le jeu.&lt;br /&gt;
&lt;br /&gt;
Programmer l'électronique Arduino pour simuler les lumières et les sons de Simon.&lt;br /&gt;
&lt;br /&gt;
Intégrer une thématique Noël (couleurs/sons festifs) pour créer une animation ludique et éducative qui met en avant la créativité.&lt;br /&gt;
&lt;br /&gt;
==membres du projet==&lt;br /&gt;
&lt;br /&gt;
Audrey : Ailée créature &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Emma : Magique arc en ciel &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ewen: Magic flocon &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Syrielle: Espiegle corne &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nadia : Divinité flamboyante &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Bibliographie et webographie sur le projet==&lt;br /&gt;
[[https://www.wiki.lesfabriquesduponant.net/index.php?title=ENIB_2022_-_groupe_A_:_Simon]]&lt;br /&gt;
https://fr.wikipedia.org/wiki/Simon_(jeu)&lt;br /&gt;
==banque d'images==&lt;br /&gt;
[[Fichier:E3F3D4A8-ECC8-40C8-9B21-032B27D7E458 2.jpg|200Pxpx|vignette|centré]]&lt;br /&gt;
&lt;br /&gt;
==prototype qu'on souhaite réaliser ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Prototype simon.jpg|vignette|centré]]&lt;br /&gt;
&lt;br /&gt;
==Schema de cablage==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capture d’écran 2025-11-29 à 15.42.22.png|vignette|centré|schema de cablage]]&lt;br /&gt;
&lt;br /&gt;
==Programme arduino==&lt;br /&gt;
&lt;br /&gt;
Le code à ete crée par l'IA claude , voici le prompt : &amp;lt;br&amp;gt;&lt;br /&gt;
Crée un jeu Simon pour ESP32 avec :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- 4 boutons/LEDs (Rouge/GPIO12-25, Jaune/GPIO13-26, Vert/GPIO14-27, Bleu/GPIO15-33)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- DFPlayer Mini sur GPIO16-17 avec 6 sons Noël (0001-0006.mp3)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Ruban LED WS2812B 144 LEDs sur GPIO32 avec effet feu continu&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Potentiomètre GPIO34 pour 3 difficultés (3/4/6 niveaux)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Son 0005.mp3 pour victoire totale, 0006.mp3 pour échec immédiat&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Bibliothèques : DFRobotDFPlayerMini + FastLED&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Arduino&amp;quot; line&amp;gt;/*&lt;br /&gt;
 * JEU SIMON COMPLET - ESP32 + DFPlayer Mini + Ruban LED Feu&lt;br /&gt;
 * &lt;br /&gt;
 * Câblage:&lt;br /&gt;
 * ─────────────────────────────────────────────&lt;br /&gt;
 * DFPlayer Mini:&lt;br /&gt;
 *   - RX      → GPIO 17 (TX ESP32) + résistance 1kΩ&lt;br /&gt;
 *   - TX      → GPIO 16 (RX ESP32)&lt;br /&gt;
 *   - VCC     → 5V&lt;br /&gt;
 *   - GND     → GND&lt;br /&gt;
 *   - SPK_1/2 → Haut-parleur 3W (4-8Ω)&lt;br /&gt;
 * &lt;br /&gt;
 * 4 Boutons (avec pull-up interne):&lt;br /&gt;
 *   - Bouton ROUGE  → GPIO 12 → GND&lt;br /&gt;
 *   - Bouton VERT   → GPIO 13 → GND&lt;br /&gt;
 *   - Bouton BLEU   → GPIO 14 → GND&lt;br /&gt;
 *   - Bouton JAUNE  → GPIO 15 → GND&lt;br /&gt;
 * &lt;br /&gt;
 * 4 LEDs (avec résistances 220Ω):&lt;br /&gt;
 *   - LED ROUGE  → GPIO 25 → Résistance → GND&lt;br /&gt;
 *   - LED VERTE  → GPIO 26 → Résistance → GND&lt;br /&gt;
 *   - LED BLEUE  → GPIO 27 → Résistance → GND&lt;br /&gt;
 *   - LED JAUNE  → GPIO 33 → Résistance → GND&lt;br /&gt;
 * &lt;br /&gt;
 * Ruban LED (WS2812B - 144 LEDs):&lt;br /&gt;
 *   - DATA → GPIO 32&lt;br /&gt;
 *   - VCC  → 5V (alimentation externe recommandée si &amp;gt;30 LEDs)&lt;br /&gt;
 *   - GND  → GND (commun avec ESP32)&lt;br /&gt;
 * &lt;br /&gt;
 * Potentiomètre (sélection difficulté):&lt;br /&gt;
 *   - Broche gauche  → GND&lt;br /&gt;
 *   - Broche centrale → GPIO 34 (ADC)&lt;br /&gt;
 *   - Broche droite   → 3.3V&lt;br /&gt;
 * &lt;br /&gt;
 * Fichiers MP3 sur carte SD (FAT32):&lt;br /&gt;
 *   - 0001.mp3 : Son bouton ROUGE&lt;br /&gt;
 *   - 0002.mp3 : Son bouton JAUNE&lt;br /&gt;
 *   - 0003.mp3 : Son bouton VERT&lt;br /&gt;
 *   - 0004.mp3 : Son bouton BLEU&lt;br /&gt;
 *   - 0005.mp3 : Son VICTOIRE (après 5 niveaux réussis)&lt;br /&gt;
 *   - 0006.mp3 : Son ÉCHEC (erreur dans la séquence)&lt;br /&gt;
 * &lt;br /&gt;
 * IMPORTANT: Installez la bibliothèque FastLED&lt;br /&gt;
 * (Croquis → Inclure une bibliothèque → Gérer les bibliothèques → FastLED)&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;DFRobotDFPlayerMini.h&amp;gt;&lt;br /&gt;
#include &amp;lt;FastLED.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// Configuration DFPlayer&lt;br /&gt;
HardwareSerial mySoftwareSerial(2);&lt;br /&gt;
DFRobotDFPlayerMini myDFPlayer;&lt;br /&gt;
&lt;br /&gt;
// Configuration Ruban LED&lt;br /&gt;
#define LED_STRIP_PIN 32&lt;br /&gt;
#define NUM_LEDS 144&lt;br /&gt;
#define LED_TYPE WS2812B&lt;br /&gt;
#define COLOR_ORDER GRB&lt;br /&gt;
CRGB leds[NUM_LEDS];&lt;br /&gt;
&lt;br /&gt;
// Configuration Potentiomètre (sélection difficulté)&lt;br /&gt;
#define POTENTIOMETER_PIN 34  // GPIO 34 (ADC1_CH6)&lt;br /&gt;
&lt;br /&gt;
// Niveaux de difficulté&lt;br /&gt;
enum Difficulty {&lt;br /&gt;
  EASY = 0,    // 3 niveaux&lt;br /&gt;
  MEDIUM = 1,  // 4 niveaux&lt;br /&gt;
  HARD = 2     // 6 niveaux&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Difficulty currentDifficulty = MEDIUM;&lt;br /&gt;
int maxLevels = 4;  // Par défaut moyen&lt;br /&gt;
&lt;br /&gt;
// Configuration des pins boutons et LEDs&lt;br /&gt;
const int BUTTON_PINS[4] = {12, 13, 14, 15};  // Rouge, Jaune, Vert, Bleu&lt;br /&gt;
const int LED_PINS[4] = {25, 26, 27, 33};     // Rouge, Jaune, Vert, Bleu&lt;br /&gt;
&lt;br /&gt;
// Noms des couleurs pour l'affichage&lt;br /&gt;
const char* COLOR_NAMES[4] = {&amp;quot;ROUGE&amp;quot;, &amp;quot;JAUNE&amp;quot;, &amp;quot;VERT&amp;quot;, &amp;quot;BLEU&amp;quot;};&lt;br /&gt;
&lt;br /&gt;
// Correspondance couleur -&amp;gt; numéro de son&lt;br /&gt;
const int COLOR_TO_SOUND[4] = {1, 2, 3, 4};  // Rouge=1, Jaune=2, Vert=3, Bleu=4&lt;br /&gt;
&lt;br /&gt;
// Variables du jeu&lt;br /&gt;
int sequence[100];              // Séquence à mémoriser (max 100 niveaux)&lt;br /&gt;
int sequenceLength = 0;         // Longueur actuelle de la séquence&lt;br /&gt;
int playerInput[100];           // Saisie du joueur&lt;br /&gt;
int playerIndex = 0;            // Position dans la saisie&lt;br /&gt;
int level = 1;                  // Niveau actuel&lt;br /&gt;
bool gameActive = false;        // Jeu en cours&lt;br /&gt;
bool waitingForInput = false;   // En attente de la saisie du joueur&lt;br /&gt;
&lt;br /&gt;
// Débounce des boutons&lt;br /&gt;
unsigned long lastButtonPress[4] = {0, 0, 0, 0};&lt;br /&gt;
const unsigned long DEBOUNCE_DELAY = 250;&lt;br /&gt;
&lt;br /&gt;
// Timings du jeu (en millisecondes)&lt;br /&gt;
const int FLASH_DURATION = 500;      // Durée d'allumage d'une LED&lt;br /&gt;
const int PAUSE_BETWEEN_FLASH = 200; // Pause entre deux LEDs&lt;br /&gt;
const int DELAY_AFTER_SEQUENCE = 500;// Délai avant que le joueur joue&lt;br /&gt;
&lt;br /&gt;
// Variables pour l'effet feu&lt;br /&gt;
byte heat[NUM_LEDS];&lt;br /&gt;
unsigned long lastFireUpdate = 0;&lt;br /&gt;
const int FIRE_UPDATE_INTERVAL = 50; // Mise à jour toutes les 50ms&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(115200);&lt;br /&gt;
  delay(1000);&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\n╔═══════════════════════════════════╗&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;║      JEU SIMON - ESP32            ║&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;╚═══════════════════════════════════╝\n&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Configuration des boutons&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    pinMode(BUTTON_PINS[i], INPUT_PULLUP);&lt;br /&gt;
  }&lt;br /&gt;
  Serial.println(&amp;quot;✓ Boutons configurés&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Configuration des LEDs&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    pinMode(LED_PINS[i], OUTPUT);&lt;br /&gt;
    digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
  }&lt;br /&gt;
  Serial.println(&amp;quot;✓ LEDs configurées&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Configuration du ruban LED&lt;br /&gt;
  FastLED.addLeds&amp;lt;LED_TYPE, LED_STRIP_PIN, COLOR_ORDER&amp;gt;(leds, NUM_LEDS);&lt;br /&gt;
  FastLED.setBrightness(100); // Luminosité (0-255)&lt;br /&gt;
  FastLED.clear();&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
  Serial.println(&amp;quot;✓ Ruban LED configuré (144 LEDs)&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Configuration du potentiomètre&lt;br /&gt;
  pinMode(POTENTIOMETER_PIN, INPUT);&lt;br /&gt;
  Serial.println(&amp;quot;✓ Potentiomètre configuré sur GPIO 34&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Lire la difficulté initiale&lt;br /&gt;
  readDifficulty();&lt;br /&gt;
  &lt;br /&gt;
  // Configuration DFPlayer&lt;br /&gt;
  mySoftwareSerial.begin(9600, SERIAL_8N1, 16, 17);&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\nInitialisation du DFPlayer...&amp;quot;);&lt;br /&gt;
  if (!myDFPlayer.begin(mySoftwareSerial)) {&lt;br /&gt;
    Serial.println(&amp;quot;\n✗ ERREUR DFPlayer!&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;Vérifiez:&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;  - Carte SD insérée (FAT32)&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;  - Fichiers 0001.mp3 à 0006.mp3&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;  - Connexions RX/TX&amp;quot;);&lt;br /&gt;
    while(true) { delay(1000); }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;✓ DFPlayer OK!&amp;quot;);&lt;br /&gt;
  myDFPlayer.volume(25);  // Volume (0-30)&lt;br /&gt;
  delay(100);&lt;br /&gt;
  &lt;br /&gt;
  // Animation de démarrage&lt;br /&gt;
  startupAnimation();&lt;br /&gt;
  &lt;br /&gt;
  // Initialiser le générateur aléatoire&lt;br /&gt;
  randomSeed(analogRead(0));&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\n═══════════════════════════════════&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;  DIFFICULTÉ SÉLECTIONNÉE:&amp;quot;);&lt;br /&gt;
  printDifficulty();&lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;   Appuyez sur un bouton pour&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;        commencer le jeu!&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  // Mettre à jour l'effet feu en continu&lt;br /&gt;
  updateFireEffect();&lt;br /&gt;
  &lt;br /&gt;
  if (!gameActive) {&lt;br /&gt;
    // Attendre qu'un bouton soit pressé pour démarrer&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      if (digitalRead(BUTTON_PINS[i]) == LOW) {&lt;br /&gt;
        delay(300);&lt;br /&gt;
        startNewGame();&lt;br /&gt;
        break;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  } else if (waitingForInput) {&lt;br /&gt;
    checkPlayerInput();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void startNewGame() {&lt;br /&gt;
  // Lire la difficulté au début de chaque partie&lt;br /&gt;
  readDifficulty();&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\n╔═══════════════════════════════════╗&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;║      NOUVELLE PARTIE              ║&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;╚═══════════════════════════════════╝&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;\n  Difficulté: &amp;quot;);&lt;br /&gt;
  printDifficulty();&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  &lt;br /&gt;
  gameActive = true;&lt;br /&gt;
  level = 1;&lt;br /&gt;
  sequenceLength = 0;&lt;br /&gt;
  &lt;br /&gt;
  delay(1000);&lt;br /&gt;
  nextLevel();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void nextLevel() {&lt;br /&gt;
  Serial.println(&amp;quot;─────────────────────────────────────&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;         NIVEAU &amp;quot;);&lt;br /&gt;
  Serial.print(level);&lt;br /&gt;
  Serial.print(&amp;quot; / &amp;quot;);&lt;br /&gt;
  Serial.println(maxLevels);&lt;br /&gt;
  Serial.println(&amp;quot;─────────────────────────────────────\n&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Ajouter une couleur aléatoire à la séquence&lt;br /&gt;
  sequence[sequenceLength] = random(0, 4);&lt;br /&gt;
  sequenceLength++;&lt;br /&gt;
  &lt;br /&gt;
  delay(1000);&lt;br /&gt;
  &lt;br /&gt;
  // Afficher la séquence au joueur&lt;br /&gt;
  playSequence();&lt;br /&gt;
  &lt;br /&gt;
  // Attendre la saisie du joueur&lt;br /&gt;
  playerIndex = 0;&lt;br /&gt;
  waitingForInput = true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void playSequence() {&lt;br /&gt;
  Serial.println(&amp;quot;👀 Mémorisez la séquence:\n&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  for (int i = 0; i &amp;lt; sequenceLength; i++) {&lt;br /&gt;
    int color = sequence[i];&lt;br /&gt;
    &lt;br /&gt;
    Serial.print(&amp;quot;   &amp;quot;);&lt;br /&gt;
    Serial.print(i + 1);&lt;br /&gt;
    Serial.print(&amp;quot;. &amp;quot;);&lt;br /&gt;
    Serial.println(COLOR_NAMES[color]);&lt;br /&gt;
    &lt;br /&gt;
    // Allumer la LED et jouer le son&lt;br /&gt;
    digitalWrite(LED_PINS[color], HIGH);&lt;br /&gt;
    myDFPlayer.play(COLOR_TO_SOUND[color]);  // Rouge=1, Jaune=2, Vert=3, Bleu=4&lt;br /&gt;
    &lt;br /&gt;
    delay(FLASH_DURATION);&lt;br /&gt;
    &lt;br /&gt;
    // Éteindre la LED&lt;br /&gt;
    digitalWrite(LED_PINS[color], LOW);&lt;br /&gt;
    &lt;br /&gt;
    // Pause entre les flashs&lt;br /&gt;
    if (i &amp;lt; sequenceLength - 1) {&lt;br /&gt;
      delay(PAUSE_BETWEEN_FLASH);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  delay(DELAY_AFTER_SEQUENCE);&lt;br /&gt;
  Serial.println(&amp;quot;\n🎮 À vous de jouer!\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void checkPlayerInput() {&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    if (digitalRead(BUTTON_PINS[i]) == LOW) {&lt;br /&gt;
      unsigned long currentTime = millis();&lt;br /&gt;
      &lt;br /&gt;
      // Débounce&lt;br /&gt;
      if (currentTime - lastButtonPress[i] &amp;gt; DEBOUNCE_DELAY) {&lt;br /&gt;
        lastButtonPress[i] = currentTime;&lt;br /&gt;
        &lt;br /&gt;
        // Feedback visuel et sonore&lt;br /&gt;
        digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
        myDFPlayer.play(COLOR_TO_SOUND[i]);  // Jouer le son correspondant&lt;br /&gt;
        &lt;br /&gt;
        Serial.print(&amp;quot;   → &amp;quot;);&lt;br /&gt;
        Serial.println(COLOR_NAMES[i]);&lt;br /&gt;
        &lt;br /&gt;
        // Enregistrer la saisie&lt;br /&gt;
        playerInput[playerIndex] = i;&lt;br /&gt;
        &lt;br /&gt;
        delay(300);&lt;br /&gt;
        digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
        &lt;br /&gt;
        // Vérifier si c'est correct&lt;br /&gt;
        if (playerInput[playerIndex] != sequence[playerIndex]) {&lt;br /&gt;
          gameLost();&lt;br /&gt;
          return;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        playerIndex++;&lt;br /&gt;
        &lt;br /&gt;
        // Vérifier si la séquence complète est correcte&lt;br /&gt;
        if (playerIndex &amp;gt;= sequenceLength) {&lt;br /&gt;
          sequenceComplete();&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void sequenceComplete() {&lt;br /&gt;
  Serial.println(&amp;quot;\n✅ Séquence correcte!\n&amp;quot;);&lt;br /&gt;
  waitingForInput = false;&lt;br /&gt;
  &lt;br /&gt;
  level++;&lt;br /&gt;
  &lt;br /&gt;
  // Vérifier si on a atteint le niveau maximum selon la difficulté&lt;br /&gt;
  if (level &amp;gt; maxLevels) {&lt;br /&gt;
    gameWon();&lt;br /&gt;
  } else {&lt;br /&gt;
    delay(500);&lt;br /&gt;
    &lt;br /&gt;
    // Animation de succès (rapide entre chaque niveau)&lt;br /&gt;
    for (int j = 0; j &amp;lt; 2; j++) {&lt;br /&gt;
      for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
        digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
      }&lt;br /&gt;
      delay(100);&lt;br /&gt;
      for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
        digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
      }&lt;br /&gt;
      delay(100);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    delay(1000);&lt;br /&gt;
    nextLevel();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void gameLost() {&lt;br /&gt;
  Serial.println(&amp;quot;\n╔═══════════════════════════════════╗&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;║          ❌ ERREUR!               ║&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;╚═══════════════════════════════════╝&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;\n   Vous étiez au niveau &amp;quot;);&lt;br /&gt;
  Serial.println(level);&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  &lt;br /&gt;
  waitingForInput = false;&lt;br /&gt;
  gameActive = false;&lt;br /&gt;
  &lt;br /&gt;
  // Son d'échec (0006.mp3)&lt;br /&gt;
  myDFPlayer.play(6);&lt;br /&gt;
  &lt;br /&gt;
  // Animation d'échec (clignotement rapide)&lt;br /&gt;
  for (int j = 0; j &amp;lt; 5; j++) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
    }&lt;br /&gt;
    delay(150);&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
    }&lt;br /&gt;
    delay(150);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot; Appuyez sur un bouton pour rejouer&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void gameWon() {&lt;br /&gt;
  Serial.println(&amp;quot;\n╔═══════════════════════════════════╗&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;║      🎉 VICTOIRE! 🎉              ║&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;╚═══════════════════════════════════╝&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;\n  Vous avez réussi les &amp;quot;);&lt;br /&gt;
  Serial.print(maxLevels);&lt;br /&gt;
  Serial.println(&amp;quot; niveaux!&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;  Difficulté: &amp;quot;);&lt;br /&gt;
  printDifficulty();&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  &lt;br /&gt;
  gameActive = false;&lt;br /&gt;
  &lt;br /&gt;
  // Son de victoire (0005.mp3)&lt;br /&gt;
  myDFPlayer.play(5);&lt;br /&gt;
  &lt;br /&gt;
  // Animation de victoire spectaculaire&lt;br /&gt;
  // Vague de lumière rapide&lt;br /&gt;
  for (int j = 0; j &amp;lt; 8; j++) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
      delay(60);&lt;br /&gt;
      digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Clignotement final toutes ensemble&lt;br /&gt;
  for (int j = 0; j &amp;lt; 4; j++) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
    }&lt;br /&gt;
    delay(200);&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
    }&lt;br /&gt;
    delay(200);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\n═══════════════════════════════════&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot; Ajustez le potentiomètre pour&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot; changer de difficulté&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot; Appuyez sur un bouton pour rejouer&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void startupAnimation() {&lt;br /&gt;
  Serial.println(&amp;quot;\nAnimation de démarrage...\n&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Allumage séquentiel&lt;br /&gt;
  for (int j = 0; j &amp;lt; 2; j++) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
      delay(100);&lt;br /&gt;
    }&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
      delay(100);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Flash final&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
  }&lt;br /&gt;
  delay(300);&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Effet feu de bois pour le ruban LED&lt;br /&gt;
void updateFireEffect() {&lt;br /&gt;
  unsigned long currentTime = millis();&lt;br /&gt;
  &lt;br /&gt;
  // Mettre à jour seulement toutes les FIRE_UPDATE_INTERVAL ms&lt;br /&gt;
  if (currentTime - lastFireUpdate &amp;lt; FIRE_UPDATE_INTERVAL) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  lastFireUpdate = currentTime;&lt;br /&gt;
  &lt;br /&gt;
  // Refroidissement: chaque cellule perd un peu de chaleur&lt;br /&gt;
  for (int i = 0; i &amp;lt; NUM_LEDS; i++) {&lt;br /&gt;
    int cooldown = random(0, ((55 * 10) / NUM_LEDS) + 2);&lt;br /&gt;
    if (cooldown &amp;gt;= heat[i]) {&lt;br /&gt;
      heat[i] = 0;&lt;br /&gt;
    } else {&lt;br /&gt;
      heat[i] = heat[i] - cooldown;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Diffusion de chaleur vers le haut&lt;br /&gt;
  for (int k = NUM_LEDS - 1; k &amp;gt;= 2; k--) {&lt;br /&gt;
    heat[k] = (heat[k - 1] + heat[k - 2] + heat[k - 2]) / 3;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Ajout de nouvelles étincelles aléatoires en bas&lt;br /&gt;
  if (random(255) &amp;lt; 120) {&lt;br /&gt;
    int y = random(7);&lt;br /&gt;
    heat[y] = heat[y] + random(160, 255);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Conversion de la chaleur en couleurs&lt;br /&gt;
  for (int j = 0; j &amp;lt; NUM_LEDS; j++) {&lt;br /&gt;
    // Palette de couleurs feu: noir → rouge → orange → jaune → blanc&lt;br /&gt;
    byte temperature = heat[j];&lt;br /&gt;
    &lt;br /&gt;
    // Noir → Rouge foncé&lt;br /&gt;
    byte t192 = scale8_video(temperature, 191);&lt;br /&gt;
    byte heatramp = t192 &amp;amp; 0x3F; // 0..63&lt;br /&gt;
    heatramp &amp;lt;&amp;lt;= 2; // 0..252&lt;br /&gt;
    &lt;br /&gt;
    if (t192 &amp;amp; 0x80) {&lt;br /&gt;
      // Partie la plus chaude - jaune vers blanc&lt;br /&gt;
      leds[j].r = 255;&lt;br /&gt;
      leds[j].g = 255;&lt;br /&gt;
      leds[j].b = heatramp;&lt;br /&gt;
    } else if (t192 &amp;amp; 0x40) {&lt;br /&gt;
      // Partie chaude - rouge vers jaune&lt;br /&gt;
      leds[j].r = 255;&lt;br /&gt;
      leds[j].g = heatramp;&lt;br /&gt;
      leds[j].b = 0;&lt;br /&gt;
    } else {&lt;br /&gt;
      // Partie froide - noir vers rouge&lt;br /&gt;
      leds[j].r = heatramp;&lt;br /&gt;
      leds[j].g = 0;&lt;br /&gt;
      leds[j].b = 0;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  FastLED.show();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Lire le potentiomètre et déterminer la difficulté&lt;br /&gt;
void readDifficulty() {&lt;br /&gt;
  int potValue = analogRead(POTENTIOMETER_PIN);  // 0-4095 sur ESP32&lt;br /&gt;
  &lt;br /&gt;
  // Diviser en 3 zones&lt;br /&gt;
  if (potValue &amp;lt; 1365) {&lt;br /&gt;
    // Zone 1: FACILE (0-1365)&lt;br /&gt;
    currentDifficulty = EASY;&lt;br /&gt;
    maxLevels = 3;&lt;br /&gt;
  } else if (potValue &amp;lt; 2730) {&lt;br /&gt;
    // Zone 2: MOYEN (1365-2730)&lt;br /&gt;
    currentDifficulty = MEDIUM;&lt;br /&gt;
    maxLevels = 4;&lt;br /&gt;
  } else {&lt;br /&gt;
    // Zone 3: DIFFICILE (2730-4095)&lt;br /&gt;
    currentDifficulty = HARD;&lt;br /&gt;
    maxLevels = 6;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Afficher la difficulté actuelle&lt;br /&gt;
void printDifficulty() {&lt;br /&gt;
  switch(currentDifficulty) {&lt;br /&gt;
    case EASY:&lt;br /&gt;
      Serial.print(&amp;quot;FACILE (3 niveaux)&amp;quot;);&lt;br /&gt;
      break;&lt;br /&gt;
    case MEDIUM:&lt;br /&gt;
      Serial.print(&amp;quot;MOYEN (4 niveaux)&amp;quot;);&lt;br /&gt;
      break;&lt;br /&gt;
    case HARD:&lt;br /&gt;
      Serial.print(&amp;quot;DIFFICILE (6 niveaux)&amp;quot;);&lt;br /&gt;
      break;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Conception des boutons &amp;lt;br&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
- Au départ : Bouton rouge à disposition, le problème est qu'il faut plusieur couleur. Alors nous changeons de couleur la led et voulons remplacer l'opercule rouge par du plexiglass, cependant cela ne se colle pas au bouton. &amp;lt;br&amp;gt;&lt;br /&gt;
- Alors : Nous avons pris des boutons plus petit de plusieurs couleur (rouge, bleu, vert et jaune). Pour les rendre plus grands, nous avons decider de couper du plexiglass en plusieur forme, bonhomme de neige, sapin, renne, et pain d'épice, nous avons laissé un trou (de 27mm de diamètre) dans chacune des formes afin de mettre les boutons dedans.&amp;lt;br&amp;gt;&lt;br /&gt;
- Pour finir, nous avons rajouté du vinyl de la même couleur que les boutons pour les rendre plus visible sur la cheminée.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Prototype design bouton &amp;lt;br&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==premier diaporama : Alors ? Comment ça se passe ?==&lt;br /&gt;
Diaporama type '''Alors ?''': [[media:DiaporamaSuperBrest2024-Alors.odp|Téléchargez et adaptez-le !]]&lt;br /&gt;
&lt;br /&gt;
==second diaporama : Et voilà !==&lt;br /&gt;
Diaporama type '''Et Voilà !''' : [[media:DiaporamaSuperBrest2024-EtVoila.odp|Téléchargez et adaptez-le !]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Sciencehackdaybrest]]&lt;br /&gt;
[[Catégorie:Super Brest]]&lt;br /&gt;
[[Catégorie:Super Brest 2025]]&lt;/div&gt;</summary>
		<author><name>Emma</name></author>	</entry>

	<entry>
		<id>http://wiki.lesfabriquesduponant.net/index.php?title=Super_Brest_2025_:_L%27%C3%A9trange_no%C3%ABl_de_monsieur_Simon&amp;diff=35359</id>
		<title>Super Brest 2025 : L'étrange noël de monsieur Simon</title>
		<link rel="alternate" type="text/html" href="http://wiki.lesfabriquesduponant.net/index.php?title=Super_Brest_2025_:_L%27%C3%A9trange_no%C3%ABl_de_monsieur_Simon&amp;diff=35359"/>
				<updated>2025-11-30T10:30:02Z</updated>
		
		<summary type="html">&lt;p&gt;Emma : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Fichier:SuperBrest2025-BADGE.png|200px]]&lt;br /&gt;
&lt;br /&gt;
==résumé du projet==&lt;br /&gt;
Ce hackathon a pour objectif d'adapter le jeu Simon (mémoire des couleurs/sons) en l'adaptant spécifiquement pour la fête de Noël de l'école.&lt;br /&gt;
&lt;br /&gt;
Le projet consiste à :&lt;br /&gt;
&lt;br /&gt;
Utiliser une cheminée existante pour le jeu.&lt;br /&gt;
&lt;br /&gt;
Programmer l'électronique Arduino pour simuler les lumières et les sons de Simon.&lt;br /&gt;
&lt;br /&gt;
Intégrer une thématique Noël (couleurs/sons festifs) pour créer une animation ludique et éducative qui met en avant la créativité.&lt;br /&gt;
&lt;br /&gt;
==membres du projet==&lt;br /&gt;
&lt;br /&gt;
Audrey : Ailée créature &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Emma : Magique arc en ciel &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ewen: Magic flocon &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Syrielle: Espiegle corne &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nadia : Divinité flamboyante &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Bibliographie et webographie sur le projet==&lt;br /&gt;
[[https://www.wiki.lesfabriquesduponant.net/index.php?title=ENIB_2022_-_groupe_A_:_Simon]]&lt;br /&gt;
https://fr.wikipedia.org/wiki/Simon_(jeu)&lt;br /&gt;
==banque d'images==&lt;br /&gt;
[[Fichier:E3F3D4A8-ECC8-40C8-9B21-032B27D7E458 2.jpg|200Pxpx|vignette|centré]]&lt;br /&gt;
&lt;br /&gt;
==prototype qu'on souhaite réaliser ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Prototype simon.jpg|vignette|centré]]&lt;br /&gt;
&lt;br /&gt;
==Schema de cablage==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capture d’écran 2025-11-29 à 15.42.22.png|vignette|centré|schema de cablage]]&lt;br /&gt;
&lt;br /&gt;
==Programme arduino==&lt;br /&gt;
&lt;br /&gt;
Le code à ete crée par l'IA claude , voici le prompt : &amp;lt;br&amp;gt;&lt;br /&gt;
Crée un jeu Simon pour ESP32 avec :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- 4 boutons/LEDs (Rouge/GPIO12-25, Jaune/GPIO13-26, Vert/GPIO14-27, Bleu/GPIO15-33)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- DFPlayer Mini sur GPIO16-17 avec 6 sons Noël (0001-0006.mp3)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Ruban LED WS2812B 144 LEDs sur GPIO32 avec effet feu continu&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Potentiomètre GPIO34 pour 3 difficultés (3/4/6 niveaux)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Son 0005.mp3 pour victoire totale, 0006.mp3 pour échec immédiat&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Bibliothèques : DFRobotDFPlayerMini + FastLED&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Arduino&amp;quot; line&amp;gt;/*&lt;br /&gt;
 * JEU SIMON COMPLET - ESP32 + DFPlayer Mini + Ruban LED Feu&lt;br /&gt;
 * &lt;br /&gt;
 * Câblage:&lt;br /&gt;
 * ─────────────────────────────────────────────&lt;br /&gt;
 * DFPlayer Mini:&lt;br /&gt;
 *   - RX      → GPIO 17 (TX ESP32) + résistance 1kΩ&lt;br /&gt;
 *   - TX      → GPIO 16 (RX ESP32)&lt;br /&gt;
 *   - VCC     → 5V&lt;br /&gt;
 *   - GND     → GND&lt;br /&gt;
 *   - SPK_1/2 → Haut-parleur 3W (4-8Ω)&lt;br /&gt;
 * &lt;br /&gt;
 * 4 Boutons (avec pull-up interne):&lt;br /&gt;
 *   - Bouton ROUGE  → GPIO 12 → GND&lt;br /&gt;
 *   - Bouton VERT   → GPIO 13 → GND&lt;br /&gt;
 *   - Bouton BLEU   → GPIO 14 → GND&lt;br /&gt;
 *   - Bouton JAUNE  → GPIO 15 → GND&lt;br /&gt;
 * &lt;br /&gt;
 * 4 LEDs (avec résistances 220Ω):&lt;br /&gt;
 *   - LED ROUGE  → GPIO 25 → Résistance → GND&lt;br /&gt;
 *   - LED VERTE  → GPIO 26 → Résistance → GND&lt;br /&gt;
 *   - LED BLEUE  → GPIO 27 → Résistance → GND&lt;br /&gt;
 *   - LED JAUNE  → GPIO 33 → Résistance → GND&lt;br /&gt;
 * &lt;br /&gt;
 * Ruban LED (WS2812B - 144 LEDs):&lt;br /&gt;
 *   - DATA → GPIO 32&lt;br /&gt;
 *   - VCC  → 5V (alimentation externe recommandée si &amp;gt;30 LEDs)&lt;br /&gt;
 *   - GND  → GND (commun avec ESP32)&lt;br /&gt;
 * &lt;br /&gt;
 * Potentiomètre (sélection difficulté):&lt;br /&gt;
 *   - Broche gauche  → GND&lt;br /&gt;
 *   - Broche centrale → GPIO 34 (ADC)&lt;br /&gt;
 *   - Broche droite   → 3.3V&lt;br /&gt;
 * &lt;br /&gt;
 * Fichiers MP3 sur carte SD (FAT32):&lt;br /&gt;
 *   - 0001.mp3 : Son bouton ROUGE&lt;br /&gt;
 *   - 0002.mp3 : Son bouton JAUNE&lt;br /&gt;
 *   - 0003.mp3 : Son bouton VERT&lt;br /&gt;
 *   - 0004.mp3 : Son bouton BLEU&lt;br /&gt;
 *   - 0005.mp3 : Son VICTOIRE (après 5 niveaux réussis)&lt;br /&gt;
 *   - 0006.mp3 : Son ÉCHEC (erreur dans la séquence)&lt;br /&gt;
 * &lt;br /&gt;
 * IMPORTANT: Installez la bibliothèque FastLED&lt;br /&gt;
 * (Croquis → Inclure une bibliothèque → Gérer les bibliothèques → FastLED)&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;DFRobotDFPlayerMini.h&amp;gt;&lt;br /&gt;
#include &amp;lt;FastLED.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// Configuration DFPlayer&lt;br /&gt;
HardwareSerial mySoftwareSerial(2);&lt;br /&gt;
DFRobotDFPlayerMini myDFPlayer;&lt;br /&gt;
&lt;br /&gt;
// Configuration Ruban LED&lt;br /&gt;
#define LED_STRIP_PIN 32&lt;br /&gt;
#define NUM_LEDS 144&lt;br /&gt;
#define LED_TYPE WS2812B&lt;br /&gt;
#define COLOR_ORDER GRB&lt;br /&gt;
CRGB leds[NUM_LEDS];&lt;br /&gt;
&lt;br /&gt;
// Configuration Potentiomètre (sélection difficulté)&lt;br /&gt;
#define POTENTIOMETER_PIN 34  // GPIO 34 (ADC1_CH6)&lt;br /&gt;
&lt;br /&gt;
// Niveaux de difficulté&lt;br /&gt;
enum Difficulty {&lt;br /&gt;
  EASY = 0,    // 3 niveaux&lt;br /&gt;
  MEDIUM = 1,  // 4 niveaux&lt;br /&gt;
  HARD = 2     // 6 niveaux&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Difficulty currentDifficulty = MEDIUM;&lt;br /&gt;
int maxLevels = 4;  // Par défaut moyen&lt;br /&gt;
&lt;br /&gt;
// Configuration des pins boutons et LEDs&lt;br /&gt;
const int BUTTON_PINS[4] = {12, 13, 14, 15};  // Rouge, Jaune, Vert, Bleu&lt;br /&gt;
const int LED_PINS[4] = {25, 26, 27, 33};     // Rouge, Jaune, Vert, Bleu&lt;br /&gt;
&lt;br /&gt;
// Noms des couleurs pour l'affichage&lt;br /&gt;
const char* COLOR_NAMES[4] = {&amp;quot;ROUGE&amp;quot;, &amp;quot;JAUNE&amp;quot;, &amp;quot;VERT&amp;quot;, &amp;quot;BLEU&amp;quot;};&lt;br /&gt;
&lt;br /&gt;
// Correspondance couleur -&amp;gt; numéro de son&lt;br /&gt;
const int COLOR_TO_SOUND[4] = {1, 2, 3, 4};  // Rouge=1, Jaune=2, Vert=3, Bleu=4&lt;br /&gt;
&lt;br /&gt;
// Variables du jeu&lt;br /&gt;
int sequence[100];              // Séquence à mémoriser (max 100 niveaux)&lt;br /&gt;
int sequenceLength = 0;         // Longueur actuelle de la séquence&lt;br /&gt;
int playerInput[100];           // Saisie du joueur&lt;br /&gt;
int playerIndex = 0;            // Position dans la saisie&lt;br /&gt;
int level = 1;                  // Niveau actuel&lt;br /&gt;
bool gameActive = false;        // Jeu en cours&lt;br /&gt;
bool waitingForInput = false;   // En attente de la saisie du joueur&lt;br /&gt;
&lt;br /&gt;
// Débounce des boutons&lt;br /&gt;
unsigned long lastButtonPress[4] = {0, 0, 0, 0};&lt;br /&gt;
const unsigned long DEBOUNCE_DELAY = 250;&lt;br /&gt;
&lt;br /&gt;
// Timings du jeu (en millisecondes)&lt;br /&gt;
const int FLASH_DURATION = 500;      // Durée d'allumage d'une LED&lt;br /&gt;
const int PAUSE_BETWEEN_FLASH = 200; // Pause entre deux LEDs&lt;br /&gt;
const int DELAY_AFTER_SEQUENCE = 500;// Délai avant que le joueur joue&lt;br /&gt;
&lt;br /&gt;
// Variables pour l'effet feu&lt;br /&gt;
byte heat[NUM_LEDS];&lt;br /&gt;
unsigned long lastFireUpdate = 0;&lt;br /&gt;
const int FIRE_UPDATE_INTERVAL = 50; // Mise à jour toutes les 50ms&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(115200);&lt;br /&gt;
  delay(1000);&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\n╔═══════════════════════════════════╗&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;║      JEU SIMON - ESP32            ║&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;╚═══════════════════════════════════╝\n&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Configuration des boutons&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    pinMode(BUTTON_PINS[i], INPUT_PULLUP);&lt;br /&gt;
  }&lt;br /&gt;
  Serial.println(&amp;quot;✓ Boutons configurés&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Configuration des LEDs&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    pinMode(LED_PINS[i], OUTPUT);&lt;br /&gt;
    digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
  }&lt;br /&gt;
  Serial.println(&amp;quot;✓ LEDs configurées&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Configuration du ruban LED&lt;br /&gt;
  FastLED.addLeds&amp;lt;LED_TYPE, LED_STRIP_PIN, COLOR_ORDER&amp;gt;(leds, NUM_LEDS);&lt;br /&gt;
  FastLED.setBrightness(100); // Luminosité (0-255)&lt;br /&gt;
  FastLED.clear();&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
  Serial.println(&amp;quot;✓ Ruban LED configuré (144 LEDs)&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Configuration du potentiomètre&lt;br /&gt;
  pinMode(POTENTIOMETER_PIN, INPUT);&lt;br /&gt;
  Serial.println(&amp;quot;✓ Potentiomètre configuré sur GPIO 34&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Lire la difficulté initiale&lt;br /&gt;
  readDifficulty();&lt;br /&gt;
  &lt;br /&gt;
  // Configuration DFPlayer&lt;br /&gt;
  mySoftwareSerial.begin(9600, SERIAL_8N1, 16, 17);&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\nInitialisation du DFPlayer...&amp;quot;);&lt;br /&gt;
  if (!myDFPlayer.begin(mySoftwareSerial)) {&lt;br /&gt;
    Serial.println(&amp;quot;\n✗ ERREUR DFPlayer!&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;Vérifiez:&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;  - Carte SD insérée (FAT32)&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;  - Fichiers 0001.mp3 à 0006.mp3&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;  - Connexions RX/TX&amp;quot;);&lt;br /&gt;
    while(true) { delay(1000); }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;✓ DFPlayer OK!&amp;quot;);&lt;br /&gt;
  myDFPlayer.volume(25);  // Volume (0-30)&lt;br /&gt;
  delay(100);&lt;br /&gt;
  &lt;br /&gt;
  // Animation de démarrage&lt;br /&gt;
  startupAnimation();&lt;br /&gt;
  &lt;br /&gt;
  // Initialiser le générateur aléatoire&lt;br /&gt;
  randomSeed(analogRead(0));&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\n═══════════════════════════════════&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;  DIFFICULTÉ SÉLECTIONNÉE:&amp;quot;);&lt;br /&gt;
  printDifficulty();&lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;   Appuyez sur un bouton pour&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;        commencer le jeu!&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  // Mettre à jour l'effet feu en continu&lt;br /&gt;
  updateFireEffect();&lt;br /&gt;
  &lt;br /&gt;
  if (!gameActive) {&lt;br /&gt;
    // Attendre qu'un bouton soit pressé pour démarrer&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      if (digitalRead(BUTTON_PINS[i]) == LOW) {&lt;br /&gt;
        delay(300);&lt;br /&gt;
        startNewGame();&lt;br /&gt;
        break;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  } else if (waitingForInput) {&lt;br /&gt;
    checkPlayerInput();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void startNewGame() {&lt;br /&gt;
  // Lire la difficulté au début de chaque partie&lt;br /&gt;
  readDifficulty();&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\n╔═══════════════════════════════════╗&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;║      NOUVELLE PARTIE              ║&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;╚═══════════════════════════════════╝&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;\n  Difficulté: &amp;quot;);&lt;br /&gt;
  printDifficulty();&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  &lt;br /&gt;
  gameActive = true;&lt;br /&gt;
  level = 1;&lt;br /&gt;
  sequenceLength = 0;&lt;br /&gt;
  &lt;br /&gt;
  delay(1000);&lt;br /&gt;
  nextLevel();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void nextLevel() {&lt;br /&gt;
  Serial.println(&amp;quot;─────────────────────────────────────&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;         NIVEAU &amp;quot;);&lt;br /&gt;
  Serial.print(level);&lt;br /&gt;
  Serial.print(&amp;quot; / &amp;quot;);&lt;br /&gt;
  Serial.println(maxLevels);&lt;br /&gt;
  Serial.println(&amp;quot;─────────────────────────────────────\n&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Ajouter une couleur aléatoire à la séquence&lt;br /&gt;
  sequence[sequenceLength] = random(0, 4);&lt;br /&gt;
  sequenceLength++;&lt;br /&gt;
  &lt;br /&gt;
  delay(1000);&lt;br /&gt;
  &lt;br /&gt;
  // Afficher la séquence au joueur&lt;br /&gt;
  playSequence();&lt;br /&gt;
  &lt;br /&gt;
  // Attendre la saisie du joueur&lt;br /&gt;
  playerIndex = 0;&lt;br /&gt;
  waitingForInput = true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void playSequence() {&lt;br /&gt;
  Serial.println(&amp;quot;👀 Mémorisez la séquence:\n&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  for (int i = 0; i &amp;lt; sequenceLength; i++) {&lt;br /&gt;
    int color = sequence[i];&lt;br /&gt;
    &lt;br /&gt;
    Serial.print(&amp;quot;   &amp;quot;);&lt;br /&gt;
    Serial.print(i + 1);&lt;br /&gt;
    Serial.print(&amp;quot;. &amp;quot;);&lt;br /&gt;
    Serial.println(COLOR_NAMES[color]);&lt;br /&gt;
    &lt;br /&gt;
    // Allumer la LED et jouer le son&lt;br /&gt;
    digitalWrite(LED_PINS[color], HIGH);&lt;br /&gt;
    myDFPlayer.play(COLOR_TO_SOUND[color]);  // Rouge=1, Jaune=2, Vert=3, Bleu=4&lt;br /&gt;
    &lt;br /&gt;
    delay(FLASH_DURATION);&lt;br /&gt;
    &lt;br /&gt;
    // Éteindre la LED&lt;br /&gt;
    digitalWrite(LED_PINS[color], LOW);&lt;br /&gt;
    &lt;br /&gt;
    // Pause entre les flashs&lt;br /&gt;
    if (i &amp;lt; sequenceLength - 1) {&lt;br /&gt;
      delay(PAUSE_BETWEEN_FLASH);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  delay(DELAY_AFTER_SEQUENCE);&lt;br /&gt;
  Serial.println(&amp;quot;\n🎮 À vous de jouer!\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void checkPlayerInput() {&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    if (digitalRead(BUTTON_PINS[i]) == LOW) {&lt;br /&gt;
      unsigned long currentTime = millis();&lt;br /&gt;
      &lt;br /&gt;
      // Débounce&lt;br /&gt;
      if (currentTime - lastButtonPress[i] &amp;gt; DEBOUNCE_DELAY) {&lt;br /&gt;
        lastButtonPress[i] = currentTime;&lt;br /&gt;
        &lt;br /&gt;
        // Feedback visuel et sonore&lt;br /&gt;
        digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
        myDFPlayer.play(COLOR_TO_SOUND[i]);  // Jouer le son correspondant&lt;br /&gt;
        &lt;br /&gt;
        Serial.print(&amp;quot;   → &amp;quot;);&lt;br /&gt;
        Serial.println(COLOR_NAMES[i]);&lt;br /&gt;
        &lt;br /&gt;
        // Enregistrer la saisie&lt;br /&gt;
        playerInput[playerIndex] = i;&lt;br /&gt;
        &lt;br /&gt;
        delay(300);&lt;br /&gt;
        digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
        &lt;br /&gt;
        // Vérifier si c'est correct&lt;br /&gt;
        if (playerInput[playerIndex] != sequence[playerIndex]) {&lt;br /&gt;
          gameLost();&lt;br /&gt;
          return;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        playerIndex++;&lt;br /&gt;
        &lt;br /&gt;
        // Vérifier si la séquence complète est correcte&lt;br /&gt;
        if (playerIndex &amp;gt;= sequenceLength) {&lt;br /&gt;
          sequenceComplete();&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void sequenceComplete() {&lt;br /&gt;
  Serial.println(&amp;quot;\n✅ Séquence correcte!\n&amp;quot;);&lt;br /&gt;
  waitingForInput = false;&lt;br /&gt;
  &lt;br /&gt;
  level++;&lt;br /&gt;
  &lt;br /&gt;
  // Vérifier si on a atteint le niveau maximum selon la difficulté&lt;br /&gt;
  if (level &amp;gt; maxLevels) {&lt;br /&gt;
    gameWon();&lt;br /&gt;
  } else {&lt;br /&gt;
    delay(500);&lt;br /&gt;
    &lt;br /&gt;
    // Animation de succès (rapide entre chaque niveau)&lt;br /&gt;
    for (int j = 0; j &amp;lt; 2; j++) {&lt;br /&gt;
      for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
        digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
      }&lt;br /&gt;
      delay(100);&lt;br /&gt;
      for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
        digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
      }&lt;br /&gt;
      delay(100);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    delay(1000);&lt;br /&gt;
    nextLevel();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void gameLost() {&lt;br /&gt;
  Serial.println(&amp;quot;\n╔═══════════════════════════════════╗&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;║          ❌ ERREUR!               ║&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;╚═══════════════════════════════════╝&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;\n   Vous étiez au niveau &amp;quot;);&lt;br /&gt;
  Serial.println(level);&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  &lt;br /&gt;
  waitingForInput = false;&lt;br /&gt;
  gameActive = false;&lt;br /&gt;
  &lt;br /&gt;
  // Son d'échec (0006.mp3)&lt;br /&gt;
  myDFPlayer.play(6);&lt;br /&gt;
  &lt;br /&gt;
  // Animation d'échec (clignotement rapide)&lt;br /&gt;
  for (int j = 0; j &amp;lt; 5; j++) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
    }&lt;br /&gt;
    delay(150);&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
    }&lt;br /&gt;
    delay(150);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot; Appuyez sur un bouton pour rejouer&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void gameWon() {&lt;br /&gt;
  Serial.println(&amp;quot;\n╔═══════════════════════════════════╗&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;║      🎉 VICTOIRE! 🎉              ║&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;╚═══════════════════════════════════╝&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;\n  Vous avez réussi les &amp;quot;);&lt;br /&gt;
  Serial.print(maxLevels);&lt;br /&gt;
  Serial.println(&amp;quot; niveaux!&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;  Difficulté: &amp;quot;);&lt;br /&gt;
  printDifficulty();&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  &lt;br /&gt;
  gameActive = false;&lt;br /&gt;
  &lt;br /&gt;
  // Son de victoire (0005.mp3)&lt;br /&gt;
  myDFPlayer.play(5);&lt;br /&gt;
  &lt;br /&gt;
  // Animation de victoire spectaculaire&lt;br /&gt;
  // Vague de lumière rapide&lt;br /&gt;
  for (int j = 0; j &amp;lt; 8; j++) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
      delay(60);&lt;br /&gt;
      digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Clignotement final toutes ensemble&lt;br /&gt;
  for (int j = 0; j &amp;lt; 4; j++) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
    }&lt;br /&gt;
    delay(200);&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
    }&lt;br /&gt;
    delay(200);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\n═══════════════════════════════════&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot; Ajustez le potentiomètre pour&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot; changer de difficulté&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot; Appuyez sur un bouton pour rejouer&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void startupAnimation() {&lt;br /&gt;
  Serial.println(&amp;quot;\nAnimation de démarrage...\n&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Allumage séquentiel&lt;br /&gt;
  for (int j = 0; j &amp;lt; 2; j++) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
      delay(100);&lt;br /&gt;
    }&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
      delay(100);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Flash final&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
  }&lt;br /&gt;
  delay(300);&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Effet feu de bois pour le ruban LED&lt;br /&gt;
void updateFireEffect() {&lt;br /&gt;
  unsigned long currentTime = millis();&lt;br /&gt;
  &lt;br /&gt;
  // Mettre à jour seulement toutes les FIRE_UPDATE_INTERVAL ms&lt;br /&gt;
  if (currentTime - lastFireUpdate &amp;lt; FIRE_UPDATE_INTERVAL) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  lastFireUpdate = currentTime;&lt;br /&gt;
  &lt;br /&gt;
  // Refroidissement: chaque cellule perd un peu de chaleur&lt;br /&gt;
  for (int i = 0; i &amp;lt; NUM_LEDS; i++) {&lt;br /&gt;
    int cooldown = random(0, ((55 * 10) / NUM_LEDS) + 2);&lt;br /&gt;
    if (cooldown &amp;gt;= heat[i]) {&lt;br /&gt;
      heat[i] = 0;&lt;br /&gt;
    } else {&lt;br /&gt;
      heat[i] = heat[i] - cooldown;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Diffusion de chaleur vers le haut&lt;br /&gt;
  for (int k = NUM_LEDS - 1; k &amp;gt;= 2; k--) {&lt;br /&gt;
    heat[k] = (heat[k - 1] + heat[k - 2] + heat[k - 2]) / 3;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Ajout de nouvelles étincelles aléatoires en bas&lt;br /&gt;
  if (random(255) &amp;lt; 120) {&lt;br /&gt;
    int y = random(7);&lt;br /&gt;
    heat[y] = heat[y] + random(160, 255);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Conversion de la chaleur en couleurs&lt;br /&gt;
  for (int j = 0; j &amp;lt; NUM_LEDS; j++) {&lt;br /&gt;
    // Palette de couleurs feu: noir → rouge → orange → jaune → blanc&lt;br /&gt;
    byte temperature = heat[j];&lt;br /&gt;
    &lt;br /&gt;
    // Noir → Rouge foncé&lt;br /&gt;
    byte t192 = scale8_video(temperature, 191);&lt;br /&gt;
    byte heatramp = t192 &amp;amp; 0x3F; // 0..63&lt;br /&gt;
    heatramp &amp;lt;&amp;lt;= 2; // 0..252&lt;br /&gt;
    &lt;br /&gt;
    if (t192 &amp;amp; 0x80) {&lt;br /&gt;
      // Partie la plus chaude - jaune vers blanc&lt;br /&gt;
      leds[j].r = 255;&lt;br /&gt;
      leds[j].g = 255;&lt;br /&gt;
      leds[j].b = heatramp;&lt;br /&gt;
    } else if (t192 &amp;amp; 0x40) {&lt;br /&gt;
      // Partie chaude - rouge vers jaune&lt;br /&gt;
      leds[j].r = 255;&lt;br /&gt;
      leds[j].g = heatramp;&lt;br /&gt;
      leds[j].b = 0;&lt;br /&gt;
    } else {&lt;br /&gt;
      // Partie froide - noir vers rouge&lt;br /&gt;
      leds[j].r = heatramp;&lt;br /&gt;
      leds[j].g = 0;&lt;br /&gt;
      leds[j].b = 0;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  FastLED.show();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Lire le potentiomètre et déterminer la difficulté&lt;br /&gt;
void readDifficulty() {&lt;br /&gt;
  int potValue = analogRead(POTENTIOMETER_PIN);  // 0-4095 sur ESP32&lt;br /&gt;
  &lt;br /&gt;
  // Diviser en 3 zones&lt;br /&gt;
  if (potValue &amp;lt; 1365) {&lt;br /&gt;
    // Zone 1: FACILE (0-1365)&lt;br /&gt;
    currentDifficulty = EASY;&lt;br /&gt;
    maxLevels = 3;&lt;br /&gt;
  } else if (potValue &amp;lt; 2730) {&lt;br /&gt;
    // Zone 2: MOYEN (1365-2730)&lt;br /&gt;
    currentDifficulty = MEDIUM;&lt;br /&gt;
    maxLevels = 4;&lt;br /&gt;
  } else {&lt;br /&gt;
    // Zone 3: DIFFICILE (2730-4095)&lt;br /&gt;
    currentDifficulty = HARD;&lt;br /&gt;
    maxLevels = 6;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Afficher la difficulté actuelle&lt;br /&gt;
void printDifficulty() {&lt;br /&gt;
  switch(currentDifficulty) {&lt;br /&gt;
    case EASY:&lt;br /&gt;
      Serial.print(&amp;quot;FACILE (3 niveaux)&amp;quot;);&lt;br /&gt;
      break;&lt;br /&gt;
    case MEDIUM:&lt;br /&gt;
      Serial.print(&amp;quot;MOYEN (4 niveaux)&amp;quot;);&lt;br /&gt;
      break;&lt;br /&gt;
    case HARD:&lt;br /&gt;
      Serial.print(&amp;quot;DIFFICILE (6 niveaux)&amp;quot;);&lt;br /&gt;
      break;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Conception des boutons :== &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Au départ : Bouton rouge à disposition, le problème est qu'il faut plusieur couleur. Alors nous changeons de couleur la led et voulons remplacer l'opercule rouge par du plexiglass, cependant cela ne se colle pas au bouton. &amp;lt;br&amp;gt;&lt;br /&gt;
- Alors : Nous avons pris des boutons plus petit de plusieurs couleur (rouge, bleu, vert et jaune). Pour les rendre plus grands, nous avons decider de couper du plexiglass en plusieur forme, bonhomme de neige, sapin, renne, et pain d'épice, nous avons laissé un trou (de 27mm de diamètre) dans chacune des formes afin de mettre les boutons dedans.&amp;lt;br&amp;gt;&lt;br /&gt;
- Pour finir, nous avons rajouté du vinyl de la même couleur que les boutons pour les rendre plus visible sur la cheminée.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Photo bouton== &amp;lt;br&amp;gt; &lt;br /&gt;
[[Fichier:Prototypes Boutons .pdf|200px|vignette|centré]]&lt;br /&gt;
&lt;br /&gt;
==premier diaporama : Alors ? Comment ça se passe ?==&lt;br /&gt;
Diaporama type '''Alors ?''': [[media:DiaporamaSuperBrest2024-Alors.odp|Téléchargez et adaptez-le !]]&lt;br /&gt;
&lt;br /&gt;
==second diaporama : Et voilà !==&lt;br /&gt;
Diaporama type '''Et Voilà !''' : [[media:DiaporamaSuperBrest2024-EtVoila.odp|Téléchargez et adaptez-le !]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Sciencehackdaybrest]]&lt;br /&gt;
[[Catégorie:Super Brest]]&lt;br /&gt;
[[Catégorie:Super Brest 2025]]&lt;/div&gt;</summary>
		<author><name>Emma</name></author>	</entry>

	<entry>
		<id>http://wiki.lesfabriquesduponant.net/index.php?title=Fichier:Prototypes_Boutons_.pdf&amp;diff=35357</id>
		<title>Fichier:Prototypes Boutons .pdf</title>
		<link rel="alternate" type="text/html" href="http://wiki.lesfabriquesduponant.net/index.php?title=Fichier:Prototypes_Boutons_.pdf&amp;diff=35357"/>
				<updated>2025-11-30T10:29:14Z</updated>
		
		<summary type="html">&lt;p&gt;Emma : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;prototype final des supports en plexiglass pour les boutons&lt;/div&gt;</summary>
		<author><name>Emma</name></author>	</entry>

	<entry>
		<id>http://wiki.lesfabriquesduponant.net/index.php?title=Super_Brest_2025_:_L%27%C3%A9trange_no%C3%ABl_de_monsieur_Simon&amp;diff=35353</id>
		<title>Super Brest 2025 : L'étrange noël de monsieur Simon</title>
		<link rel="alternate" type="text/html" href="http://wiki.lesfabriquesduponant.net/index.php?title=Super_Brest_2025_:_L%27%C3%A9trange_no%C3%ABl_de_monsieur_Simon&amp;diff=35353"/>
				<updated>2025-11-30T10:17:51Z</updated>
		
		<summary type="html">&lt;p&gt;Emma : /* Conception des boutons :  */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Fichier:SuperBrest2025-BADGE.png|200px]]&lt;br /&gt;
&lt;br /&gt;
==résumé du projet==&lt;br /&gt;
Ce hackathon a pour objectif d'adapter le jeu Simon (mémoire des couleurs/sons) en l'adaptant spécifiquement pour la fête de Noël de l'école.&lt;br /&gt;
&lt;br /&gt;
Le projet consiste à :&lt;br /&gt;
&lt;br /&gt;
Utiliser une cheminée existante pour le jeu.&lt;br /&gt;
&lt;br /&gt;
Programmer l'électronique Arduino pour simuler les lumières et les sons de Simon.&lt;br /&gt;
&lt;br /&gt;
Intégrer une thématique Noël (couleurs/sons festifs) pour créer une animation ludique et éducative qui met en avant la créativité.&lt;br /&gt;
&lt;br /&gt;
==membres du projet==&lt;br /&gt;
&lt;br /&gt;
Audrey : Ailée créature &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Emma : Magique arc en ciel &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ewen: Magic flocon &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Syrielle: Espiegle corne &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nadia : Divinité flamboyante &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Bibliographie et webographie sur le projet==&lt;br /&gt;
[[https://www.wiki.lesfabriquesduponant.net/index.php?title=ENIB_2022_-_groupe_A_:_Simon]]&lt;br /&gt;
https://fr.wikipedia.org/wiki/Simon_(jeu)&lt;br /&gt;
==banque d'images==&lt;br /&gt;
[[Fichier:E3F3D4A8-ECC8-40C8-9B21-032B27D7E458 2.jpg|200Pxpx|vignette|centré]]&lt;br /&gt;
&lt;br /&gt;
==prototype qu'on souhaite réaliser ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Prototype simon.jpg|vignette|centré]]&lt;br /&gt;
&lt;br /&gt;
==Schema de cablage==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capture d’écran 2025-11-29 à 15.42.22.png|vignette|centré|schema de cablage]]&lt;br /&gt;
&lt;br /&gt;
==Programme arduino==&lt;br /&gt;
&lt;br /&gt;
Le code à ete crée par l'IA claude , voici le prompt : &amp;lt;br&amp;gt;&lt;br /&gt;
Crée un jeu Simon pour ESP32 avec :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- 4 boutons/LEDs (Rouge/GPIO12-25, Jaune/GPIO13-26, Vert/GPIO14-27, Bleu/GPIO15-33)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- DFPlayer Mini sur GPIO16-17 avec 6 sons Noël (0001-0006.mp3)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Ruban LED WS2812B 144 LEDs sur GPIO32 avec effet feu continu&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Potentiomètre GPIO34 pour 3 difficultés (3/4/6 niveaux)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Son 0005.mp3 pour victoire totale, 0006.mp3 pour échec immédiat&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Bibliothèques : DFRobotDFPlayerMini + FastLED&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Arduino&amp;quot; line&amp;gt;/*&lt;br /&gt;
 * JEU SIMON COMPLET - ESP32 + DFPlayer Mini + Ruban LED Feu&lt;br /&gt;
 * &lt;br /&gt;
 * Câblage:&lt;br /&gt;
 * ─────────────────────────────────────────────&lt;br /&gt;
 * DFPlayer Mini:&lt;br /&gt;
 *   - RX      → GPIO 17 (TX ESP32) + résistance 1kΩ&lt;br /&gt;
 *   - TX      → GPIO 16 (RX ESP32)&lt;br /&gt;
 *   - VCC     → 5V&lt;br /&gt;
 *   - GND     → GND&lt;br /&gt;
 *   - SPK_1/2 → Haut-parleur 3W (4-8Ω)&lt;br /&gt;
 * &lt;br /&gt;
 * 4 Boutons (avec pull-up interne):&lt;br /&gt;
 *   - Bouton ROUGE  → GPIO 12 → GND&lt;br /&gt;
 *   - Bouton VERT   → GPIO 13 → GND&lt;br /&gt;
 *   - Bouton BLEU   → GPIO 14 → GND&lt;br /&gt;
 *   - Bouton JAUNE  → GPIO 15 → GND&lt;br /&gt;
 * &lt;br /&gt;
 * 4 LEDs (avec résistances 220Ω):&lt;br /&gt;
 *   - LED ROUGE  → GPIO 25 → Résistance → GND&lt;br /&gt;
 *   - LED VERTE  → GPIO 26 → Résistance → GND&lt;br /&gt;
 *   - LED BLEUE  → GPIO 27 → Résistance → GND&lt;br /&gt;
 *   - LED JAUNE  → GPIO 33 → Résistance → GND&lt;br /&gt;
 * &lt;br /&gt;
 * Ruban LED (WS2812B - 144 LEDs):&lt;br /&gt;
 *   - DATA → GPIO 32&lt;br /&gt;
 *   - VCC  → 5V (alimentation externe recommandée si &amp;gt;30 LEDs)&lt;br /&gt;
 *   - GND  → GND (commun avec ESP32)&lt;br /&gt;
 * &lt;br /&gt;
 * Potentiomètre (sélection difficulté):&lt;br /&gt;
 *   - Broche gauche  → GND&lt;br /&gt;
 *   - Broche centrale → GPIO 34 (ADC)&lt;br /&gt;
 *   - Broche droite   → 3.3V&lt;br /&gt;
 * &lt;br /&gt;
 * Fichiers MP3 sur carte SD (FAT32):&lt;br /&gt;
 *   - 0001.mp3 : Son bouton ROUGE&lt;br /&gt;
 *   - 0002.mp3 : Son bouton JAUNE&lt;br /&gt;
 *   - 0003.mp3 : Son bouton VERT&lt;br /&gt;
 *   - 0004.mp3 : Son bouton BLEU&lt;br /&gt;
 *   - 0005.mp3 : Son VICTOIRE (après 5 niveaux réussis)&lt;br /&gt;
 *   - 0006.mp3 : Son ÉCHEC (erreur dans la séquence)&lt;br /&gt;
 * &lt;br /&gt;
 * IMPORTANT: Installez la bibliothèque FastLED&lt;br /&gt;
 * (Croquis → Inclure une bibliothèque → Gérer les bibliothèques → FastLED)&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;DFRobotDFPlayerMini.h&amp;gt;&lt;br /&gt;
#include &amp;lt;FastLED.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// Configuration DFPlayer&lt;br /&gt;
HardwareSerial mySoftwareSerial(2);&lt;br /&gt;
DFRobotDFPlayerMini myDFPlayer;&lt;br /&gt;
&lt;br /&gt;
// Configuration Ruban LED&lt;br /&gt;
#define LED_STRIP_PIN 32&lt;br /&gt;
#define NUM_LEDS 144&lt;br /&gt;
#define LED_TYPE WS2812B&lt;br /&gt;
#define COLOR_ORDER GRB&lt;br /&gt;
CRGB leds[NUM_LEDS];&lt;br /&gt;
&lt;br /&gt;
// Configuration Potentiomètre (sélection difficulté)&lt;br /&gt;
#define POTENTIOMETER_PIN 34  // GPIO 34 (ADC1_CH6)&lt;br /&gt;
&lt;br /&gt;
// Niveaux de difficulté&lt;br /&gt;
enum Difficulty {&lt;br /&gt;
  EASY = 0,    // 3 niveaux&lt;br /&gt;
  MEDIUM = 1,  // 4 niveaux&lt;br /&gt;
  HARD = 2     // 6 niveaux&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Difficulty currentDifficulty = MEDIUM;&lt;br /&gt;
int maxLevels = 4;  // Par défaut moyen&lt;br /&gt;
&lt;br /&gt;
// Configuration des pins boutons et LEDs&lt;br /&gt;
const int BUTTON_PINS[4] = {12, 13, 14, 15};  // Rouge, Jaune, Vert, Bleu&lt;br /&gt;
const int LED_PINS[4] = {25, 26, 27, 33};     // Rouge, Jaune, Vert, Bleu&lt;br /&gt;
&lt;br /&gt;
// Noms des couleurs pour l'affichage&lt;br /&gt;
const char* COLOR_NAMES[4] = {&amp;quot;ROUGE&amp;quot;, &amp;quot;JAUNE&amp;quot;, &amp;quot;VERT&amp;quot;, &amp;quot;BLEU&amp;quot;};&lt;br /&gt;
&lt;br /&gt;
// Correspondance couleur -&amp;gt; numéro de son&lt;br /&gt;
const int COLOR_TO_SOUND[4] = {1, 2, 3, 4};  // Rouge=1, Jaune=2, Vert=3, Bleu=4&lt;br /&gt;
&lt;br /&gt;
// Variables du jeu&lt;br /&gt;
int sequence[100];              // Séquence à mémoriser (max 100 niveaux)&lt;br /&gt;
int sequenceLength = 0;         // Longueur actuelle de la séquence&lt;br /&gt;
int playerInput[100];           // Saisie du joueur&lt;br /&gt;
int playerIndex = 0;            // Position dans la saisie&lt;br /&gt;
int level = 1;                  // Niveau actuel&lt;br /&gt;
bool gameActive = false;        // Jeu en cours&lt;br /&gt;
bool waitingForInput = false;   // En attente de la saisie du joueur&lt;br /&gt;
&lt;br /&gt;
// Débounce des boutons&lt;br /&gt;
unsigned long lastButtonPress[4] = {0, 0, 0, 0};&lt;br /&gt;
const unsigned long DEBOUNCE_DELAY = 250;&lt;br /&gt;
&lt;br /&gt;
// Timings du jeu (en millisecondes)&lt;br /&gt;
const int FLASH_DURATION = 500;      // Durée d'allumage d'une LED&lt;br /&gt;
const int PAUSE_BETWEEN_FLASH = 200; // Pause entre deux LEDs&lt;br /&gt;
const int DELAY_AFTER_SEQUENCE = 500;// Délai avant que le joueur joue&lt;br /&gt;
&lt;br /&gt;
// Variables pour l'effet feu&lt;br /&gt;
byte heat[NUM_LEDS];&lt;br /&gt;
unsigned long lastFireUpdate = 0;&lt;br /&gt;
const int FIRE_UPDATE_INTERVAL = 50; // Mise à jour toutes les 50ms&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(115200);&lt;br /&gt;
  delay(1000);&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\n╔═══════════════════════════════════╗&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;║      JEU SIMON - ESP32            ║&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;╚═══════════════════════════════════╝\n&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Configuration des boutons&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    pinMode(BUTTON_PINS[i], INPUT_PULLUP);&lt;br /&gt;
  }&lt;br /&gt;
  Serial.println(&amp;quot;✓ Boutons configurés&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Configuration des LEDs&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    pinMode(LED_PINS[i], OUTPUT);&lt;br /&gt;
    digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
  }&lt;br /&gt;
  Serial.println(&amp;quot;✓ LEDs configurées&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Configuration du ruban LED&lt;br /&gt;
  FastLED.addLeds&amp;lt;LED_TYPE, LED_STRIP_PIN, COLOR_ORDER&amp;gt;(leds, NUM_LEDS);&lt;br /&gt;
  FastLED.setBrightness(100); // Luminosité (0-255)&lt;br /&gt;
  FastLED.clear();&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
  Serial.println(&amp;quot;✓ Ruban LED configuré (144 LEDs)&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Configuration du potentiomètre&lt;br /&gt;
  pinMode(POTENTIOMETER_PIN, INPUT);&lt;br /&gt;
  Serial.println(&amp;quot;✓ Potentiomètre configuré sur GPIO 34&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Lire la difficulté initiale&lt;br /&gt;
  readDifficulty();&lt;br /&gt;
  &lt;br /&gt;
  // Configuration DFPlayer&lt;br /&gt;
  mySoftwareSerial.begin(9600, SERIAL_8N1, 16, 17);&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\nInitialisation du DFPlayer...&amp;quot;);&lt;br /&gt;
  if (!myDFPlayer.begin(mySoftwareSerial)) {&lt;br /&gt;
    Serial.println(&amp;quot;\n✗ ERREUR DFPlayer!&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;Vérifiez:&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;  - Carte SD insérée (FAT32)&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;  - Fichiers 0001.mp3 à 0006.mp3&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;  - Connexions RX/TX&amp;quot;);&lt;br /&gt;
    while(true) { delay(1000); }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;✓ DFPlayer OK!&amp;quot;);&lt;br /&gt;
  myDFPlayer.volume(25);  // Volume (0-30)&lt;br /&gt;
  delay(100);&lt;br /&gt;
  &lt;br /&gt;
  // Animation de démarrage&lt;br /&gt;
  startupAnimation();&lt;br /&gt;
  &lt;br /&gt;
  // Initialiser le générateur aléatoire&lt;br /&gt;
  randomSeed(analogRead(0));&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\n═══════════════════════════════════&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;  DIFFICULTÉ SÉLECTIONNÉE:&amp;quot;);&lt;br /&gt;
  printDifficulty();&lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;   Appuyez sur un bouton pour&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;        commencer le jeu!&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  // Mettre à jour l'effet feu en continu&lt;br /&gt;
  updateFireEffect();&lt;br /&gt;
  &lt;br /&gt;
  if (!gameActive) {&lt;br /&gt;
    // Attendre qu'un bouton soit pressé pour démarrer&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      if (digitalRead(BUTTON_PINS[i]) == LOW) {&lt;br /&gt;
        delay(300);&lt;br /&gt;
        startNewGame();&lt;br /&gt;
        break;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  } else if (waitingForInput) {&lt;br /&gt;
    checkPlayerInput();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void startNewGame() {&lt;br /&gt;
  // Lire la difficulté au début de chaque partie&lt;br /&gt;
  readDifficulty();&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\n╔═══════════════════════════════════╗&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;║      NOUVELLE PARTIE              ║&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;╚═══════════════════════════════════╝&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;\n  Difficulté: &amp;quot;);&lt;br /&gt;
  printDifficulty();&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  &lt;br /&gt;
  gameActive = true;&lt;br /&gt;
  level = 1;&lt;br /&gt;
  sequenceLength = 0;&lt;br /&gt;
  &lt;br /&gt;
  delay(1000);&lt;br /&gt;
  nextLevel();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void nextLevel() {&lt;br /&gt;
  Serial.println(&amp;quot;─────────────────────────────────────&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;         NIVEAU &amp;quot;);&lt;br /&gt;
  Serial.print(level);&lt;br /&gt;
  Serial.print(&amp;quot; / &amp;quot;);&lt;br /&gt;
  Serial.println(maxLevels);&lt;br /&gt;
  Serial.println(&amp;quot;─────────────────────────────────────\n&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Ajouter une couleur aléatoire à la séquence&lt;br /&gt;
  sequence[sequenceLength] = random(0, 4);&lt;br /&gt;
  sequenceLength++;&lt;br /&gt;
  &lt;br /&gt;
  delay(1000);&lt;br /&gt;
  &lt;br /&gt;
  // Afficher la séquence au joueur&lt;br /&gt;
  playSequence();&lt;br /&gt;
  &lt;br /&gt;
  // Attendre la saisie du joueur&lt;br /&gt;
  playerIndex = 0;&lt;br /&gt;
  waitingForInput = true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void playSequence() {&lt;br /&gt;
  Serial.println(&amp;quot;👀 Mémorisez la séquence:\n&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  for (int i = 0; i &amp;lt; sequenceLength; i++) {&lt;br /&gt;
    int color = sequence[i];&lt;br /&gt;
    &lt;br /&gt;
    Serial.print(&amp;quot;   &amp;quot;);&lt;br /&gt;
    Serial.print(i + 1);&lt;br /&gt;
    Serial.print(&amp;quot;. &amp;quot;);&lt;br /&gt;
    Serial.println(COLOR_NAMES[color]);&lt;br /&gt;
    &lt;br /&gt;
    // Allumer la LED et jouer le son&lt;br /&gt;
    digitalWrite(LED_PINS[color], HIGH);&lt;br /&gt;
    myDFPlayer.play(COLOR_TO_SOUND[color]);  // Rouge=1, Jaune=2, Vert=3, Bleu=4&lt;br /&gt;
    &lt;br /&gt;
    delay(FLASH_DURATION);&lt;br /&gt;
    &lt;br /&gt;
    // Éteindre la LED&lt;br /&gt;
    digitalWrite(LED_PINS[color], LOW);&lt;br /&gt;
    &lt;br /&gt;
    // Pause entre les flashs&lt;br /&gt;
    if (i &amp;lt; sequenceLength - 1) {&lt;br /&gt;
      delay(PAUSE_BETWEEN_FLASH);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  delay(DELAY_AFTER_SEQUENCE);&lt;br /&gt;
  Serial.println(&amp;quot;\n🎮 À vous de jouer!\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void checkPlayerInput() {&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    if (digitalRead(BUTTON_PINS[i]) == LOW) {&lt;br /&gt;
      unsigned long currentTime = millis();&lt;br /&gt;
      &lt;br /&gt;
      // Débounce&lt;br /&gt;
      if (currentTime - lastButtonPress[i] &amp;gt; DEBOUNCE_DELAY) {&lt;br /&gt;
        lastButtonPress[i] = currentTime;&lt;br /&gt;
        &lt;br /&gt;
        // Feedback visuel et sonore&lt;br /&gt;
        digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
        myDFPlayer.play(COLOR_TO_SOUND[i]);  // Jouer le son correspondant&lt;br /&gt;
        &lt;br /&gt;
        Serial.print(&amp;quot;   → &amp;quot;);&lt;br /&gt;
        Serial.println(COLOR_NAMES[i]);&lt;br /&gt;
        &lt;br /&gt;
        // Enregistrer la saisie&lt;br /&gt;
        playerInput[playerIndex] = i;&lt;br /&gt;
        &lt;br /&gt;
        delay(300);&lt;br /&gt;
        digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
        &lt;br /&gt;
        // Vérifier si c'est correct&lt;br /&gt;
        if (playerInput[playerIndex] != sequence[playerIndex]) {&lt;br /&gt;
          gameLost();&lt;br /&gt;
          return;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        playerIndex++;&lt;br /&gt;
        &lt;br /&gt;
        // Vérifier si la séquence complète est correcte&lt;br /&gt;
        if (playerIndex &amp;gt;= sequenceLength) {&lt;br /&gt;
          sequenceComplete();&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void sequenceComplete() {&lt;br /&gt;
  Serial.println(&amp;quot;\n✅ Séquence correcte!\n&amp;quot;);&lt;br /&gt;
  waitingForInput = false;&lt;br /&gt;
  &lt;br /&gt;
  level++;&lt;br /&gt;
  &lt;br /&gt;
  // Vérifier si on a atteint le niveau maximum selon la difficulté&lt;br /&gt;
  if (level &amp;gt; maxLevels) {&lt;br /&gt;
    gameWon();&lt;br /&gt;
  } else {&lt;br /&gt;
    delay(500);&lt;br /&gt;
    &lt;br /&gt;
    // Animation de succès (rapide entre chaque niveau)&lt;br /&gt;
    for (int j = 0; j &amp;lt; 2; j++) {&lt;br /&gt;
      for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
        digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
      }&lt;br /&gt;
      delay(100);&lt;br /&gt;
      for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
        digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
      }&lt;br /&gt;
      delay(100);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    delay(1000);&lt;br /&gt;
    nextLevel();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void gameLost() {&lt;br /&gt;
  Serial.println(&amp;quot;\n╔═══════════════════════════════════╗&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;║          ❌ ERREUR!               ║&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;╚═══════════════════════════════════╝&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;\n   Vous étiez au niveau &amp;quot;);&lt;br /&gt;
  Serial.println(level);&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  &lt;br /&gt;
  waitingForInput = false;&lt;br /&gt;
  gameActive = false;&lt;br /&gt;
  &lt;br /&gt;
  // Son d'échec (0006.mp3)&lt;br /&gt;
  myDFPlayer.play(6);&lt;br /&gt;
  &lt;br /&gt;
  // Animation d'échec (clignotement rapide)&lt;br /&gt;
  for (int j = 0; j &amp;lt; 5; j++) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
    }&lt;br /&gt;
    delay(150);&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
    }&lt;br /&gt;
    delay(150);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot; Appuyez sur un bouton pour rejouer&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void gameWon() {&lt;br /&gt;
  Serial.println(&amp;quot;\n╔═══════════════════════════════════╗&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;║      🎉 VICTOIRE! 🎉              ║&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;╚═══════════════════════════════════╝&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;\n  Vous avez réussi les &amp;quot;);&lt;br /&gt;
  Serial.print(maxLevels);&lt;br /&gt;
  Serial.println(&amp;quot; niveaux!&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;  Difficulté: &amp;quot;);&lt;br /&gt;
  printDifficulty();&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  &lt;br /&gt;
  gameActive = false;&lt;br /&gt;
  &lt;br /&gt;
  // Son de victoire (0005.mp3)&lt;br /&gt;
  myDFPlayer.play(5);&lt;br /&gt;
  &lt;br /&gt;
  // Animation de victoire spectaculaire&lt;br /&gt;
  // Vague de lumière rapide&lt;br /&gt;
  for (int j = 0; j &amp;lt; 8; j++) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
      delay(60);&lt;br /&gt;
      digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Clignotement final toutes ensemble&lt;br /&gt;
  for (int j = 0; j &amp;lt; 4; j++) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
    }&lt;br /&gt;
    delay(200);&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
    }&lt;br /&gt;
    delay(200);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\n═══════════════════════════════════&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot; Ajustez le potentiomètre pour&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot; changer de difficulté&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot; Appuyez sur un bouton pour rejouer&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void startupAnimation() {&lt;br /&gt;
  Serial.println(&amp;quot;\nAnimation de démarrage...\n&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Allumage séquentiel&lt;br /&gt;
  for (int j = 0; j &amp;lt; 2; j++) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
      delay(100);&lt;br /&gt;
    }&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
      delay(100);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Flash final&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
  }&lt;br /&gt;
  delay(300);&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Effet feu de bois pour le ruban LED&lt;br /&gt;
void updateFireEffect() {&lt;br /&gt;
  unsigned long currentTime = millis();&lt;br /&gt;
  &lt;br /&gt;
  // Mettre à jour seulement toutes les FIRE_UPDATE_INTERVAL ms&lt;br /&gt;
  if (currentTime - lastFireUpdate &amp;lt; FIRE_UPDATE_INTERVAL) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  lastFireUpdate = currentTime;&lt;br /&gt;
  &lt;br /&gt;
  // Refroidissement: chaque cellule perd un peu de chaleur&lt;br /&gt;
  for (int i = 0; i &amp;lt; NUM_LEDS; i++) {&lt;br /&gt;
    int cooldown = random(0, ((55 * 10) / NUM_LEDS) + 2);&lt;br /&gt;
    if (cooldown &amp;gt;= heat[i]) {&lt;br /&gt;
      heat[i] = 0;&lt;br /&gt;
    } else {&lt;br /&gt;
      heat[i] = heat[i] - cooldown;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Diffusion de chaleur vers le haut&lt;br /&gt;
  for (int k = NUM_LEDS - 1; k &amp;gt;= 2; k--) {&lt;br /&gt;
    heat[k] = (heat[k - 1] + heat[k - 2] + heat[k - 2]) / 3;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Ajout de nouvelles étincelles aléatoires en bas&lt;br /&gt;
  if (random(255) &amp;lt; 120) {&lt;br /&gt;
    int y = random(7);&lt;br /&gt;
    heat[y] = heat[y] + random(160, 255);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Conversion de la chaleur en couleurs&lt;br /&gt;
  for (int j = 0; j &amp;lt; NUM_LEDS; j++) {&lt;br /&gt;
    // Palette de couleurs feu: noir → rouge → orange → jaune → blanc&lt;br /&gt;
    byte temperature = heat[j];&lt;br /&gt;
    &lt;br /&gt;
    // Noir → Rouge foncé&lt;br /&gt;
    byte t192 = scale8_video(temperature, 191);&lt;br /&gt;
    byte heatramp = t192 &amp;amp; 0x3F; // 0..63&lt;br /&gt;
    heatramp &amp;lt;&amp;lt;= 2; // 0..252&lt;br /&gt;
    &lt;br /&gt;
    if (t192 &amp;amp; 0x80) {&lt;br /&gt;
      // Partie la plus chaude - jaune vers blanc&lt;br /&gt;
      leds[j].r = 255;&lt;br /&gt;
      leds[j].g = 255;&lt;br /&gt;
      leds[j].b = heatramp;&lt;br /&gt;
    } else if (t192 &amp;amp; 0x40) {&lt;br /&gt;
      // Partie chaude - rouge vers jaune&lt;br /&gt;
      leds[j].r = 255;&lt;br /&gt;
      leds[j].g = heatramp;&lt;br /&gt;
      leds[j].b = 0;&lt;br /&gt;
    } else {&lt;br /&gt;
      // Partie froide - noir vers rouge&lt;br /&gt;
      leds[j].r = heatramp;&lt;br /&gt;
      leds[j].g = 0;&lt;br /&gt;
      leds[j].b = 0;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  FastLED.show();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Lire le potentiomètre et déterminer la difficulté&lt;br /&gt;
void readDifficulty() {&lt;br /&gt;
  int potValue = analogRead(POTENTIOMETER_PIN);  // 0-4095 sur ESP32&lt;br /&gt;
  &lt;br /&gt;
  // Diviser en 3 zones&lt;br /&gt;
  if (potValue &amp;lt; 1365) {&lt;br /&gt;
    // Zone 1: FACILE (0-1365)&lt;br /&gt;
    currentDifficulty = EASY;&lt;br /&gt;
    maxLevels = 3;&lt;br /&gt;
  } else if (potValue &amp;lt; 2730) {&lt;br /&gt;
    // Zone 2: MOYEN (1365-2730)&lt;br /&gt;
    currentDifficulty = MEDIUM;&lt;br /&gt;
    maxLevels = 4;&lt;br /&gt;
  } else {&lt;br /&gt;
    // Zone 3: DIFFICILE (2730-4095)&lt;br /&gt;
    currentDifficulty = HARD;&lt;br /&gt;
    maxLevels = 6;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Afficher la difficulté actuelle&lt;br /&gt;
void printDifficulty() {&lt;br /&gt;
  switch(currentDifficulty) {&lt;br /&gt;
    case EASY:&lt;br /&gt;
      Serial.print(&amp;quot;FACILE (3 niveaux)&amp;quot;);&lt;br /&gt;
      break;&lt;br /&gt;
    case MEDIUM:&lt;br /&gt;
      Serial.print(&amp;quot;MOYEN (4 niveaux)&amp;quot;);&lt;br /&gt;
      break;&lt;br /&gt;
    case HARD:&lt;br /&gt;
      Serial.print(&amp;quot;DIFFICILE (6 niveaux)&amp;quot;);&lt;br /&gt;
      break;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Conception des boutons : &amp;lt;br&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
- Au départ : Bouton rouge à disposition, le problème est qu'il faut plusieur couleur. Alors nous changeons de couleur la led et voulons remplacer l'opercule rouge par du plexiglace, cependant cela ne se colle pas au bouton. &amp;lt;br&amp;gt;&lt;br /&gt;
- Alors : Nous avons pris des boutons plus petit de plusieurs couleur (rouge, bleu, vert et jaune). Pour les rendre plus grands, nous avons decider de couper du plexiglace en plusieur forme, bonhomme de neige, sapin, renne, et pain d'épice, nous avons laissé un trou (de 27mm de diamètre) dans chacune des formes afin de mettre les boutons dedans.&amp;lt;br&amp;gt;&lt;br /&gt;
- Pour finir, nous avons rajouté du vinyl de la même couleur que les boutons pour les rendre plus visible sur la cheminée.&lt;br /&gt;
&lt;br /&gt;
==premier diaporama : Alors ? Comment ça se passe ?==&lt;br /&gt;
Diaporama type '''Alors ?''': [[media:DiaporamaSuperBrest2024-Alors.odp|Téléchargez et adaptez-le !]]&lt;br /&gt;
&lt;br /&gt;
==second diaporama : Et voilà !==&lt;br /&gt;
Diaporama type '''Et Voilà !''' : [[media:DiaporamaSuperBrest2024-EtVoila.odp|Téléchargez et adaptez-le !]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Sciencehackdaybrest]]&lt;br /&gt;
[[Catégorie:Super Brest]]&lt;br /&gt;
[[Catégorie:Super Brest 2025]]&lt;/div&gt;</summary>
		<author><name>Emma</name></author>	</entry>

	<entry>
		<id>http://wiki.lesfabriquesduponant.net/index.php?title=Super_Brest_2025_:_L%27%C3%A9trange_no%C3%ABl_de_monsieur_Simon&amp;diff=35352</id>
		<title>Super Brest 2025 : L'étrange noël de monsieur Simon</title>
		<link rel="alternate" type="text/html" href="http://wiki.lesfabriquesduponant.net/index.php?title=Super_Brest_2025_:_L%27%C3%A9trange_no%C3%ABl_de_monsieur_Simon&amp;diff=35352"/>
				<updated>2025-11-30T10:17:10Z</updated>
		
		<summary type="html">&lt;p&gt;Emma : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Fichier:SuperBrest2025-BADGE.png|200px]]&lt;br /&gt;
&lt;br /&gt;
==résumé du projet==&lt;br /&gt;
Ce hackathon a pour objectif d'adapter le jeu Simon (mémoire des couleurs/sons) en l'adaptant spécifiquement pour la fête de Noël de l'école.&lt;br /&gt;
&lt;br /&gt;
Le projet consiste à :&lt;br /&gt;
&lt;br /&gt;
Utiliser une cheminée existante pour le jeu.&lt;br /&gt;
&lt;br /&gt;
Programmer l'électronique Arduino pour simuler les lumières et les sons de Simon.&lt;br /&gt;
&lt;br /&gt;
Intégrer une thématique Noël (couleurs/sons festifs) pour créer une animation ludique et éducative qui met en avant la créativité.&lt;br /&gt;
&lt;br /&gt;
==membres du projet==&lt;br /&gt;
&lt;br /&gt;
Audrey : Ailée créature &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Emma : Magique arc en ciel &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ewen: Magic flocon &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Syrielle: Espiegle corne &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nadia : Divinité flamboyante &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Bibliographie et webographie sur le projet==&lt;br /&gt;
[[https://www.wiki.lesfabriquesduponant.net/index.php?title=ENIB_2022_-_groupe_A_:_Simon]]&lt;br /&gt;
https://fr.wikipedia.org/wiki/Simon_(jeu)&lt;br /&gt;
==banque d'images==&lt;br /&gt;
[[Fichier:E3F3D4A8-ECC8-40C8-9B21-032B27D7E458 2.jpg|200Pxpx|vignette|centré]]&lt;br /&gt;
&lt;br /&gt;
==prototype qu'on souhaite réaliser ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Prototype simon.jpg|vignette|centré]]&lt;br /&gt;
&lt;br /&gt;
==Schema de cablage==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capture d’écran 2025-11-29 à 15.42.22.png|vignette|centré|schema de cablage]]&lt;br /&gt;
&lt;br /&gt;
==Programme arduino==&lt;br /&gt;
&lt;br /&gt;
Le code à ete crée par l'IA claude , voici le prompt : &amp;lt;br&amp;gt;&lt;br /&gt;
Crée un jeu Simon pour ESP32 avec :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- 4 boutons/LEDs (Rouge/GPIO12-25, Jaune/GPIO13-26, Vert/GPIO14-27, Bleu/GPIO15-33)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- DFPlayer Mini sur GPIO16-17 avec 6 sons Noël (0001-0006.mp3)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Ruban LED WS2812B 144 LEDs sur GPIO32 avec effet feu continu&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Potentiomètre GPIO34 pour 3 difficultés (3/4/6 niveaux)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Son 0005.mp3 pour victoire totale, 0006.mp3 pour échec immédiat&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Bibliothèques : DFRobotDFPlayerMini + FastLED&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Arduino&amp;quot; line&amp;gt;/*&lt;br /&gt;
 * JEU SIMON COMPLET - ESP32 + DFPlayer Mini + Ruban LED Feu&lt;br /&gt;
 * &lt;br /&gt;
 * Câblage:&lt;br /&gt;
 * ─────────────────────────────────────────────&lt;br /&gt;
 * DFPlayer Mini:&lt;br /&gt;
 *   - RX      → GPIO 17 (TX ESP32) + résistance 1kΩ&lt;br /&gt;
 *   - TX      → GPIO 16 (RX ESP32)&lt;br /&gt;
 *   - VCC     → 5V&lt;br /&gt;
 *   - GND     → GND&lt;br /&gt;
 *   - SPK_1/2 → Haut-parleur 3W (4-8Ω)&lt;br /&gt;
 * &lt;br /&gt;
 * 4 Boutons (avec pull-up interne):&lt;br /&gt;
 *   - Bouton ROUGE  → GPIO 12 → GND&lt;br /&gt;
 *   - Bouton VERT   → GPIO 13 → GND&lt;br /&gt;
 *   - Bouton BLEU   → GPIO 14 → GND&lt;br /&gt;
 *   - Bouton JAUNE  → GPIO 15 → GND&lt;br /&gt;
 * &lt;br /&gt;
 * 4 LEDs (avec résistances 220Ω):&lt;br /&gt;
 *   - LED ROUGE  → GPIO 25 → Résistance → GND&lt;br /&gt;
 *   - LED VERTE  → GPIO 26 → Résistance → GND&lt;br /&gt;
 *   - LED BLEUE  → GPIO 27 → Résistance → GND&lt;br /&gt;
 *   - LED JAUNE  → GPIO 33 → Résistance → GND&lt;br /&gt;
 * &lt;br /&gt;
 * Ruban LED (WS2812B - 144 LEDs):&lt;br /&gt;
 *   - DATA → GPIO 32&lt;br /&gt;
 *   - VCC  → 5V (alimentation externe recommandée si &amp;gt;30 LEDs)&lt;br /&gt;
 *   - GND  → GND (commun avec ESP32)&lt;br /&gt;
 * &lt;br /&gt;
 * Potentiomètre (sélection difficulté):&lt;br /&gt;
 *   - Broche gauche  → GND&lt;br /&gt;
 *   - Broche centrale → GPIO 34 (ADC)&lt;br /&gt;
 *   - Broche droite   → 3.3V&lt;br /&gt;
 * &lt;br /&gt;
 * Fichiers MP3 sur carte SD (FAT32):&lt;br /&gt;
 *   - 0001.mp3 : Son bouton ROUGE&lt;br /&gt;
 *   - 0002.mp3 : Son bouton JAUNE&lt;br /&gt;
 *   - 0003.mp3 : Son bouton VERT&lt;br /&gt;
 *   - 0004.mp3 : Son bouton BLEU&lt;br /&gt;
 *   - 0005.mp3 : Son VICTOIRE (après 5 niveaux réussis)&lt;br /&gt;
 *   - 0006.mp3 : Son ÉCHEC (erreur dans la séquence)&lt;br /&gt;
 * &lt;br /&gt;
 * IMPORTANT: Installez la bibliothèque FastLED&lt;br /&gt;
 * (Croquis → Inclure une bibliothèque → Gérer les bibliothèques → FastLED)&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;DFRobotDFPlayerMini.h&amp;gt;&lt;br /&gt;
#include &amp;lt;FastLED.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// Configuration DFPlayer&lt;br /&gt;
HardwareSerial mySoftwareSerial(2);&lt;br /&gt;
DFRobotDFPlayerMini myDFPlayer;&lt;br /&gt;
&lt;br /&gt;
// Configuration Ruban LED&lt;br /&gt;
#define LED_STRIP_PIN 32&lt;br /&gt;
#define NUM_LEDS 144&lt;br /&gt;
#define LED_TYPE WS2812B&lt;br /&gt;
#define COLOR_ORDER GRB&lt;br /&gt;
CRGB leds[NUM_LEDS];&lt;br /&gt;
&lt;br /&gt;
// Configuration Potentiomètre (sélection difficulté)&lt;br /&gt;
#define POTENTIOMETER_PIN 34  // GPIO 34 (ADC1_CH6)&lt;br /&gt;
&lt;br /&gt;
// Niveaux de difficulté&lt;br /&gt;
enum Difficulty {&lt;br /&gt;
  EASY = 0,    // 3 niveaux&lt;br /&gt;
  MEDIUM = 1,  // 4 niveaux&lt;br /&gt;
  HARD = 2     // 6 niveaux&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Difficulty currentDifficulty = MEDIUM;&lt;br /&gt;
int maxLevels = 4;  // Par défaut moyen&lt;br /&gt;
&lt;br /&gt;
// Configuration des pins boutons et LEDs&lt;br /&gt;
const int BUTTON_PINS[4] = {12, 13, 14, 15};  // Rouge, Jaune, Vert, Bleu&lt;br /&gt;
const int LED_PINS[4] = {25, 26, 27, 33};     // Rouge, Jaune, Vert, Bleu&lt;br /&gt;
&lt;br /&gt;
// Noms des couleurs pour l'affichage&lt;br /&gt;
const char* COLOR_NAMES[4] = {&amp;quot;ROUGE&amp;quot;, &amp;quot;JAUNE&amp;quot;, &amp;quot;VERT&amp;quot;, &amp;quot;BLEU&amp;quot;};&lt;br /&gt;
&lt;br /&gt;
// Correspondance couleur -&amp;gt; numéro de son&lt;br /&gt;
const int COLOR_TO_SOUND[4] = {1, 2, 3, 4};  // Rouge=1, Jaune=2, Vert=3, Bleu=4&lt;br /&gt;
&lt;br /&gt;
// Variables du jeu&lt;br /&gt;
int sequence[100];              // Séquence à mémoriser (max 100 niveaux)&lt;br /&gt;
int sequenceLength = 0;         // Longueur actuelle de la séquence&lt;br /&gt;
int playerInput[100];           // Saisie du joueur&lt;br /&gt;
int playerIndex = 0;            // Position dans la saisie&lt;br /&gt;
int level = 1;                  // Niveau actuel&lt;br /&gt;
bool gameActive = false;        // Jeu en cours&lt;br /&gt;
bool waitingForInput = false;   // En attente de la saisie du joueur&lt;br /&gt;
&lt;br /&gt;
// Débounce des boutons&lt;br /&gt;
unsigned long lastButtonPress[4] = {0, 0, 0, 0};&lt;br /&gt;
const unsigned long DEBOUNCE_DELAY = 250;&lt;br /&gt;
&lt;br /&gt;
// Timings du jeu (en millisecondes)&lt;br /&gt;
const int FLASH_DURATION = 500;      // Durée d'allumage d'une LED&lt;br /&gt;
const int PAUSE_BETWEEN_FLASH = 200; // Pause entre deux LEDs&lt;br /&gt;
const int DELAY_AFTER_SEQUENCE = 500;// Délai avant que le joueur joue&lt;br /&gt;
&lt;br /&gt;
// Variables pour l'effet feu&lt;br /&gt;
byte heat[NUM_LEDS];&lt;br /&gt;
unsigned long lastFireUpdate = 0;&lt;br /&gt;
const int FIRE_UPDATE_INTERVAL = 50; // Mise à jour toutes les 50ms&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(115200);&lt;br /&gt;
  delay(1000);&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\n╔═══════════════════════════════════╗&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;║      JEU SIMON - ESP32            ║&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;╚═══════════════════════════════════╝\n&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Configuration des boutons&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    pinMode(BUTTON_PINS[i], INPUT_PULLUP);&lt;br /&gt;
  }&lt;br /&gt;
  Serial.println(&amp;quot;✓ Boutons configurés&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Configuration des LEDs&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    pinMode(LED_PINS[i], OUTPUT);&lt;br /&gt;
    digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
  }&lt;br /&gt;
  Serial.println(&amp;quot;✓ LEDs configurées&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Configuration du ruban LED&lt;br /&gt;
  FastLED.addLeds&amp;lt;LED_TYPE, LED_STRIP_PIN, COLOR_ORDER&amp;gt;(leds, NUM_LEDS);&lt;br /&gt;
  FastLED.setBrightness(100); // Luminosité (0-255)&lt;br /&gt;
  FastLED.clear();&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
  Serial.println(&amp;quot;✓ Ruban LED configuré (144 LEDs)&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Configuration du potentiomètre&lt;br /&gt;
  pinMode(POTENTIOMETER_PIN, INPUT);&lt;br /&gt;
  Serial.println(&amp;quot;✓ Potentiomètre configuré sur GPIO 34&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Lire la difficulté initiale&lt;br /&gt;
  readDifficulty();&lt;br /&gt;
  &lt;br /&gt;
  // Configuration DFPlayer&lt;br /&gt;
  mySoftwareSerial.begin(9600, SERIAL_8N1, 16, 17);&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\nInitialisation du DFPlayer...&amp;quot;);&lt;br /&gt;
  if (!myDFPlayer.begin(mySoftwareSerial)) {&lt;br /&gt;
    Serial.println(&amp;quot;\n✗ ERREUR DFPlayer!&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;Vérifiez:&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;  - Carte SD insérée (FAT32)&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;  - Fichiers 0001.mp3 à 0006.mp3&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;  - Connexions RX/TX&amp;quot;);&lt;br /&gt;
    while(true) { delay(1000); }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;✓ DFPlayer OK!&amp;quot;);&lt;br /&gt;
  myDFPlayer.volume(25);  // Volume (0-30)&lt;br /&gt;
  delay(100);&lt;br /&gt;
  &lt;br /&gt;
  // Animation de démarrage&lt;br /&gt;
  startupAnimation();&lt;br /&gt;
  &lt;br /&gt;
  // Initialiser le générateur aléatoire&lt;br /&gt;
  randomSeed(analogRead(0));&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\n═══════════════════════════════════&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;  DIFFICULTÉ SÉLECTIONNÉE:&amp;quot;);&lt;br /&gt;
  printDifficulty();&lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;   Appuyez sur un bouton pour&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;        commencer le jeu!&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  // Mettre à jour l'effet feu en continu&lt;br /&gt;
  updateFireEffect();&lt;br /&gt;
  &lt;br /&gt;
  if (!gameActive) {&lt;br /&gt;
    // Attendre qu'un bouton soit pressé pour démarrer&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      if (digitalRead(BUTTON_PINS[i]) == LOW) {&lt;br /&gt;
        delay(300);&lt;br /&gt;
        startNewGame();&lt;br /&gt;
        break;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  } else if (waitingForInput) {&lt;br /&gt;
    checkPlayerInput();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void startNewGame() {&lt;br /&gt;
  // Lire la difficulté au début de chaque partie&lt;br /&gt;
  readDifficulty();&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\n╔═══════════════════════════════════╗&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;║      NOUVELLE PARTIE              ║&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;╚═══════════════════════════════════╝&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;\n  Difficulté: &amp;quot;);&lt;br /&gt;
  printDifficulty();&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  &lt;br /&gt;
  gameActive = true;&lt;br /&gt;
  level = 1;&lt;br /&gt;
  sequenceLength = 0;&lt;br /&gt;
  &lt;br /&gt;
  delay(1000);&lt;br /&gt;
  nextLevel();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void nextLevel() {&lt;br /&gt;
  Serial.println(&amp;quot;─────────────────────────────────────&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;         NIVEAU &amp;quot;);&lt;br /&gt;
  Serial.print(level);&lt;br /&gt;
  Serial.print(&amp;quot; / &amp;quot;);&lt;br /&gt;
  Serial.println(maxLevels);&lt;br /&gt;
  Serial.println(&amp;quot;─────────────────────────────────────\n&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Ajouter une couleur aléatoire à la séquence&lt;br /&gt;
  sequence[sequenceLength] = random(0, 4);&lt;br /&gt;
  sequenceLength++;&lt;br /&gt;
  &lt;br /&gt;
  delay(1000);&lt;br /&gt;
  &lt;br /&gt;
  // Afficher la séquence au joueur&lt;br /&gt;
  playSequence();&lt;br /&gt;
  &lt;br /&gt;
  // Attendre la saisie du joueur&lt;br /&gt;
  playerIndex = 0;&lt;br /&gt;
  waitingForInput = true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void playSequence() {&lt;br /&gt;
  Serial.println(&amp;quot;👀 Mémorisez la séquence:\n&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  for (int i = 0; i &amp;lt; sequenceLength; i++) {&lt;br /&gt;
    int color = sequence[i];&lt;br /&gt;
    &lt;br /&gt;
    Serial.print(&amp;quot;   &amp;quot;);&lt;br /&gt;
    Serial.print(i + 1);&lt;br /&gt;
    Serial.print(&amp;quot;. &amp;quot;);&lt;br /&gt;
    Serial.println(COLOR_NAMES[color]);&lt;br /&gt;
    &lt;br /&gt;
    // Allumer la LED et jouer le son&lt;br /&gt;
    digitalWrite(LED_PINS[color], HIGH);&lt;br /&gt;
    myDFPlayer.play(COLOR_TO_SOUND[color]);  // Rouge=1, Jaune=2, Vert=3, Bleu=4&lt;br /&gt;
    &lt;br /&gt;
    delay(FLASH_DURATION);&lt;br /&gt;
    &lt;br /&gt;
    // Éteindre la LED&lt;br /&gt;
    digitalWrite(LED_PINS[color], LOW);&lt;br /&gt;
    &lt;br /&gt;
    // Pause entre les flashs&lt;br /&gt;
    if (i &amp;lt; sequenceLength - 1) {&lt;br /&gt;
      delay(PAUSE_BETWEEN_FLASH);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  delay(DELAY_AFTER_SEQUENCE);&lt;br /&gt;
  Serial.println(&amp;quot;\n🎮 À vous de jouer!\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void checkPlayerInput() {&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    if (digitalRead(BUTTON_PINS[i]) == LOW) {&lt;br /&gt;
      unsigned long currentTime = millis();&lt;br /&gt;
      &lt;br /&gt;
      // Débounce&lt;br /&gt;
      if (currentTime - lastButtonPress[i] &amp;gt; DEBOUNCE_DELAY) {&lt;br /&gt;
        lastButtonPress[i] = currentTime;&lt;br /&gt;
        &lt;br /&gt;
        // Feedback visuel et sonore&lt;br /&gt;
        digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
        myDFPlayer.play(COLOR_TO_SOUND[i]);  // Jouer le son correspondant&lt;br /&gt;
        &lt;br /&gt;
        Serial.print(&amp;quot;   → &amp;quot;);&lt;br /&gt;
        Serial.println(COLOR_NAMES[i]);&lt;br /&gt;
        &lt;br /&gt;
        // Enregistrer la saisie&lt;br /&gt;
        playerInput[playerIndex] = i;&lt;br /&gt;
        &lt;br /&gt;
        delay(300);&lt;br /&gt;
        digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
        &lt;br /&gt;
        // Vérifier si c'est correct&lt;br /&gt;
        if (playerInput[playerIndex] != sequence[playerIndex]) {&lt;br /&gt;
          gameLost();&lt;br /&gt;
          return;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        playerIndex++;&lt;br /&gt;
        &lt;br /&gt;
        // Vérifier si la séquence complète est correcte&lt;br /&gt;
        if (playerIndex &amp;gt;= sequenceLength) {&lt;br /&gt;
          sequenceComplete();&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void sequenceComplete() {&lt;br /&gt;
  Serial.println(&amp;quot;\n✅ Séquence correcte!\n&amp;quot;);&lt;br /&gt;
  waitingForInput = false;&lt;br /&gt;
  &lt;br /&gt;
  level++;&lt;br /&gt;
  &lt;br /&gt;
  // Vérifier si on a atteint le niveau maximum selon la difficulté&lt;br /&gt;
  if (level &amp;gt; maxLevels) {&lt;br /&gt;
    gameWon();&lt;br /&gt;
  } else {&lt;br /&gt;
    delay(500);&lt;br /&gt;
    &lt;br /&gt;
    // Animation de succès (rapide entre chaque niveau)&lt;br /&gt;
    for (int j = 0; j &amp;lt; 2; j++) {&lt;br /&gt;
      for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
        digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
      }&lt;br /&gt;
      delay(100);&lt;br /&gt;
      for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
        digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
      }&lt;br /&gt;
      delay(100);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    delay(1000);&lt;br /&gt;
    nextLevel();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void gameLost() {&lt;br /&gt;
  Serial.println(&amp;quot;\n╔═══════════════════════════════════╗&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;║          ❌ ERREUR!               ║&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;╚═══════════════════════════════════╝&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;\n   Vous étiez au niveau &amp;quot;);&lt;br /&gt;
  Serial.println(level);&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  &lt;br /&gt;
  waitingForInput = false;&lt;br /&gt;
  gameActive = false;&lt;br /&gt;
  &lt;br /&gt;
  // Son d'échec (0006.mp3)&lt;br /&gt;
  myDFPlayer.play(6);&lt;br /&gt;
  &lt;br /&gt;
  // Animation d'échec (clignotement rapide)&lt;br /&gt;
  for (int j = 0; j &amp;lt; 5; j++) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
    }&lt;br /&gt;
    delay(150);&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
    }&lt;br /&gt;
    delay(150);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot; Appuyez sur un bouton pour rejouer&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void gameWon() {&lt;br /&gt;
  Serial.println(&amp;quot;\n╔═══════════════════════════════════╗&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;║      🎉 VICTOIRE! 🎉              ║&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;╚═══════════════════════════════════╝&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;\n  Vous avez réussi les &amp;quot;);&lt;br /&gt;
  Serial.print(maxLevels);&lt;br /&gt;
  Serial.println(&amp;quot; niveaux!&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;  Difficulté: &amp;quot;);&lt;br /&gt;
  printDifficulty();&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  &lt;br /&gt;
  gameActive = false;&lt;br /&gt;
  &lt;br /&gt;
  // Son de victoire (0005.mp3)&lt;br /&gt;
  myDFPlayer.play(5);&lt;br /&gt;
  &lt;br /&gt;
  // Animation de victoire spectaculaire&lt;br /&gt;
  // Vague de lumière rapide&lt;br /&gt;
  for (int j = 0; j &amp;lt; 8; j++) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
      delay(60);&lt;br /&gt;
      digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Clignotement final toutes ensemble&lt;br /&gt;
  for (int j = 0; j &amp;lt; 4; j++) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
    }&lt;br /&gt;
    delay(200);&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
    }&lt;br /&gt;
    delay(200);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\n═══════════════════════════════════&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot; Ajustez le potentiomètre pour&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot; changer de difficulté&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot; Appuyez sur un bouton pour rejouer&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void startupAnimation() {&lt;br /&gt;
  Serial.println(&amp;quot;\nAnimation de démarrage...\n&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Allumage séquentiel&lt;br /&gt;
  for (int j = 0; j &amp;lt; 2; j++) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
      delay(100);&lt;br /&gt;
    }&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
      delay(100);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Flash final&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
  }&lt;br /&gt;
  delay(300);&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Effet feu de bois pour le ruban LED&lt;br /&gt;
void updateFireEffect() {&lt;br /&gt;
  unsigned long currentTime = millis();&lt;br /&gt;
  &lt;br /&gt;
  // Mettre à jour seulement toutes les FIRE_UPDATE_INTERVAL ms&lt;br /&gt;
  if (currentTime - lastFireUpdate &amp;lt; FIRE_UPDATE_INTERVAL) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  lastFireUpdate = currentTime;&lt;br /&gt;
  &lt;br /&gt;
  // Refroidissement: chaque cellule perd un peu de chaleur&lt;br /&gt;
  for (int i = 0; i &amp;lt; NUM_LEDS; i++) {&lt;br /&gt;
    int cooldown = random(0, ((55 * 10) / NUM_LEDS) + 2);&lt;br /&gt;
    if (cooldown &amp;gt;= heat[i]) {&lt;br /&gt;
      heat[i] = 0;&lt;br /&gt;
    } else {&lt;br /&gt;
      heat[i] = heat[i] - cooldown;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Diffusion de chaleur vers le haut&lt;br /&gt;
  for (int k = NUM_LEDS - 1; k &amp;gt;= 2; k--) {&lt;br /&gt;
    heat[k] = (heat[k - 1] + heat[k - 2] + heat[k - 2]) / 3;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Ajout de nouvelles étincelles aléatoires en bas&lt;br /&gt;
  if (random(255) &amp;lt; 120) {&lt;br /&gt;
    int y = random(7);&lt;br /&gt;
    heat[y] = heat[y] + random(160, 255);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Conversion de la chaleur en couleurs&lt;br /&gt;
  for (int j = 0; j &amp;lt; NUM_LEDS; j++) {&lt;br /&gt;
    // Palette de couleurs feu: noir → rouge → orange → jaune → blanc&lt;br /&gt;
    byte temperature = heat[j];&lt;br /&gt;
    &lt;br /&gt;
    // Noir → Rouge foncé&lt;br /&gt;
    byte t192 = scale8_video(temperature, 191);&lt;br /&gt;
    byte heatramp = t192 &amp;amp; 0x3F; // 0..63&lt;br /&gt;
    heatramp &amp;lt;&amp;lt;= 2; // 0..252&lt;br /&gt;
    &lt;br /&gt;
    if (t192 &amp;amp; 0x80) {&lt;br /&gt;
      // Partie la plus chaude - jaune vers blanc&lt;br /&gt;
      leds[j].r = 255;&lt;br /&gt;
      leds[j].g = 255;&lt;br /&gt;
      leds[j].b = heatramp;&lt;br /&gt;
    } else if (t192 &amp;amp; 0x40) {&lt;br /&gt;
      // Partie chaude - rouge vers jaune&lt;br /&gt;
      leds[j].r = 255;&lt;br /&gt;
      leds[j].g = heatramp;&lt;br /&gt;
      leds[j].b = 0;&lt;br /&gt;
    } else {&lt;br /&gt;
      // Partie froide - noir vers rouge&lt;br /&gt;
      leds[j].r = heatramp;&lt;br /&gt;
      leds[j].g = 0;&lt;br /&gt;
      leds[j].b = 0;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  FastLED.show();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Lire le potentiomètre et déterminer la difficulté&lt;br /&gt;
void readDifficulty() {&lt;br /&gt;
  int potValue = analogRead(POTENTIOMETER_PIN);  // 0-4095 sur ESP32&lt;br /&gt;
  &lt;br /&gt;
  // Diviser en 3 zones&lt;br /&gt;
  if (potValue &amp;lt; 1365) {&lt;br /&gt;
    // Zone 1: FACILE (0-1365)&lt;br /&gt;
    currentDifficulty = EASY;&lt;br /&gt;
    maxLevels = 3;&lt;br /&gt;
  } else if (potValue &amp;lt; 2730) {&lt;br /&gt;
    // Zone 2: MOYEN (1365-2730)&lt;br /&gt;
    currentDifficulty = MEDIUM;&lt;br /&gt;
    maxLevels = 4;&lt;br /&gt;
  } else {&lt;br /&gt;
    // Zone 3: DIFFICILE (2730-4095)&lt;br /&gt;
    currentDifficulty = HARD;&lt;br /&gt;
    maxLevels = 6;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Afficher la difficulté actuelle&lt;br /&gt;
void printDifficulty() {&lt;br /&gt;
  switch(currentDifficulty) {&lt;br /&gt;
    case EASY:&lt;br /&gt;
      Serial.print(&amp;quot;FACILE (3 niveaux)&amp;quot;);&lt;br /&gt;
      break;&lt;br /&gt;
    case MEDIUM:&lt;br /&gt;
      Serial.print(&amp;quot;MOYEN (4 niveaux)&amp;quot;);&lt;br /&gt;
      break;&lt;br /&gt;
    case HARD:&lt;br /&gt;
      Serial.print(&amp;quot;DIFFICILE (6 niveaux)&amp;quot;);&lt;br /&gt;
      break;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Conception des boutons : &amp;lt;br&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
- Au départ : Bouton rouge à disposition, le problème est qu'il faut plusieur couleur. Alors nous changeons de couleur la led et voulons remplacer l'opercule rouge par du plexiglace, cependant cela ne se colle pas au bouton. &lt;br /&gt;
- Alors : Nous avons pris des boutons plus petit de plusieurs couleur (rouge, bleu, vert et jaune). Pour les rendre plus grands, nous avons decider de couper du plexiglace en plusieur forme, bonhomme de neige, sapin, renne, et pain d'épice, nous avons laissé un trou (de 27mm de diamètre) dans chacune des formes afin de mettre les boutons dedans.&lt;br /&gt;
- Pour finir, nous avons rajouté du vinyl de la même couleur que les boutons pour les rendre plus visible sur la cheminée.   &lt;br /&gt;
&lt;br /&gt;
==premier diaporama : Alors ? Comment ça se passe ?==&lt;br /&gt;
Diaporama type '''Alors ?''': [[media:DiaporamaSuperBrest2024-Alors.odp|Téléchargez et adaptez-le !]]&lt;br /&gt;
&lt;br /&gt;
==second diaporama : Et voilà !==&lt;br /&gt;
Diaporama type '''Et Voilà !''' : [[media:DiaporamaSuperBrest2024-EtVoila.odp|Téléchargez et adaptez-le !]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Sciencehackdaybrest]]&lt;br /&gt;
[[Catégorie:Super Brest]]&lt;br /&gt;
[[Catégorie:Super Brest 2025]]&lt;/div&gt;</summary>
		<author><name>Emma</name></author>	</entry>

	<entry>
		<id>http://wiki.lesfabriquesduponant.net/index.php?title=Super_Brest_2025_:_L%27%C3%A9trange_no%C3%ABl_de_monsieur_Simon&amp;diff=35339</id>
		<title>Super Brest 2025 : L'étrange noël de monsieur Simon</title>
		<link rel="alternate" type="text/html" href="http://wiki.lesfabriquesduponant.net/index.php?title=Super_Brest_2025_:_L%27%C3%A9trange_no%C3%ABl_de_monsieur_Simon&amp;diff=35339"/>
				<updated>2025-11-30T10:00:28Z</updated>
		
		<summary type="html">&lt;p&gt;Emma : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Fichier:SuperBrest2025-BADGE.png|200px]]&lt;br /&gt;
&lt;br /&gt;
==résumé du projet==&lt;br /&gt;
Ce hackathon a pour objectif d'adapter le jeu Simon (mémoire des couleurs/sons) en l'adaptant spécifiquement pour la fête de Noël de l'école.&lt;br /&gt;
&lt;br /&gt;
Le projet consiste à :&lt;br /&gt;
&lt;br /&gt;
Utiliser une cheminée existante pour le jeu.&lt;br /&gt;
&lt;br /&gt;
Programmer l'électronique Arduino pour simuler les lumières et les sons de Simon.&lt;br /&gt;
&lt;br /&gt;
Intégrer une thématique Noël (couleurs/sons festifs) pour créer une animation ludique et éducative qui met en avant la créativité.&lt;br /&gt;
&lt;br /&gt;
==membres du projet==&lt;br /&gt;
&lt;br /&gt;
Audrey : Ailée créature &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Emma : Magique arc en ciel &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ewen: Magic flocon &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Syrielle: Espiegle corne &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nadia : Divinité flamboyante &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Bibliographie et webographie sur le projet==&lt;br /&gt;
[[https://www.wiki.lesfabriquesduponant.net/index.php?title=ENIB_2022_-_groupe_A_:_Simon]]&lt;br /&gt;
https://fr.wikipedia.org/wiki/Simon_(jeu)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==prototype qu'on souhaite réaliser ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Prototype simon.jpg|vignette|centré]]&lt;br /&gt;
&lt;br /&gt;
==Schema de cablage==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capture d’écran 2025-11-29 à 15.42.22.png|vignette|centré|schema de cablage]]&lt;br /&gt;
&lt;br /&gt;
==Programme arduino==&lt;br /&gt;
&lt;br /&gt;
Le code à ete crée par l'IA claude , voici le prompt : &amp;lt;br&amp;gt;&lt;br /&gt;
Crée un jeu Simon pour ESP32 avec :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- 4 boutons/LEDs (Rouge/GPIO12-25, Jaune/GPIO13-26, Vert/GPIO14-27, Bleu/GPIO15-33)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- DFPlayer Mini sur GPIO16-17 avec 6 sons Noël (0001-0006.mp3)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Ruban LED WS2812B 144 LEDs sur GPIO32 avec effet feu continu&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Potentiomètre GPIO34 pour 3 difficultés (3/4/6 niveaux)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Son 0005.mp3 pour victoire totale, 0006.mp3 pour échec immédiat&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Bibliothèques : DFRobotDFPlayerMini + FastLED&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Arduino&amp;quot; line&amp;gt;/*&lt;br /&gt;
 * JEU SIMON COMPLET - ESP32 + DFPlayer Mini + Ruban LED Feu&lt;br /&gt;
 * &lt;br /&gt;
 * Câblage:&lt;br /&gt;
 * ─────────────────────────────────────────────&lt;br /&gt;
 * DFPlayer Mini:&lt;br /&gt;
 *   - RX      → GPIO 17 (TX ESP32) + résistance 1kΩ&lt;br /&gt;
 *   - TX      → GPIO 16 (RX ESP32)&lt;br /&gt;
 *   - VCC     → 5V&lt;br /&gt;
 *   - GND     → GND&lt;br /&gt;
 *   - SPK_1/2 → Haut-parleur 3W (4-8Ω)&lt;br /&gt;
 * &lt;br /&gt;
 * 4 Boutons (avec pull-up interne):&lt;br /&gt;
 *   - Bouton ROUGE  → GPIO 12 → GND&lt;br /&gt;
 *   - Bouton VERT   → GPIO 13 → GND&lt;br /&gt;
 *   - Bouton BLEU   → GPIO 14 → GND&lt;br /&gt;
 *   - Bouton JAUNE  → GPIO 15 → GND&lt;br /&gt;
 * &lt;br /&gt;
 * 4 LEDs (avec résistances 220Ω):&lt;br /&gt;
 *   - LED ROUGE  → GPIO 25 → Résistance → GND&lt;br /&gt;
 *   - LED VERTE  → GPIO 26 → Résistance → GND&lt;br /&gt;
 *   - LED BLEUE  → GPIO 27 → Résistance → GND&lt;br /&gt;
 *   - LED JAUNE  → GPIO 33 → Résistance → GND&lt;br /&gt;
 * &lt;br /&gt;
 * Ruban LED (WS2812B - 144 LEDs):&lt;br /&gt;
 *   - DATA → GPIO 32&lt;br /&gt;
 *   - VCC  → 5V (alimentation externe recommandée si &amp;gt;30 LEDs)&lt;br /&gt;
 *   - GND  → GND (commun avec ESP32)&lt;br /&gt;
 * &lt;br /&gt;
 * Potentiomètre (sélection difficulté):&lt;br /&gt;
 *   - Broche gauche  → GND&lt;br /&gt;
 *   - Broche centrale → GPIO 34 (ADC)&lt;br /&gt;
 *   - Broche droite   → 3.3V&lt;br /&gt;
 * &lt;br /&gt;
 * Fichiers MP3 sur carte SD (FAT32):&lt;br /&gt;
 *   - 0001.mp3 : Son bouton ROUGE&lt;br /&gt;
 *   - 0002.mp3 : Son bouton JAUNE&lt;br /&gt;
 *   - 0003.mp3 : Son bouton VERT&lt;br /&gt;
 *   - 0004.mp3 : Son bouton BLEU&lt;br /&gt;
 *   - 0005.mp3 : Son VICTOIRE (après 5 niveaux réussis)&lt;br /&gt;
 *   - 0006.mp3 : Son ÉCHEC (erreur dans la séquence)&lt;br /&gt;
 * &lt;br /&gt;
 * IMPORTANT: Installez la bibliothèque FastLED&lt;br /&gt;
 * (Croquis → Inclure une bibliothèque → Gérer les bibliothèques → FastLED)&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;DFRobotDFPlayerMini.h&amp;gt;&lt;br /&gt;
#include &amp;lt;FastLED.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// Configuration DFPlayer&lt;br /&gt;
HardwareSerial mySoftwareSerial(2);&lt;br /&gt;
DFRobotDFPlayerMini myDFPlayer;&lt;br /&gt;
&lt;br /&gt;
// Configuration Ruban LED&lt;br /&gt;
#define LED_STRIP_PIN 32&lt;br /&gt;
#define NUM_LEDS 144&lt;br /&gt;
#define LED_TYPE WS2812B&lt;br /&gt;
#define COLOR_ORDER GRB&lt;br /&gt;
CRGB leds[NUM_LEDS];&lt;br /&gt;
&lt;br /&gt;
// Configuration Potentiomètre (sélection difficulté)&lt;br /&gt;
#define POTENTIOMETER_PIN 34  // GPIO 34 (ADC1_CH6)&lt;br /&gt;
&lt;br /&gt;
// Niveaux de difficulté&lt;br /&gt;
enum Difficulty {&lt;br /&gt;
  EASY = 0,    // 3 niveaux&lt;br /&gt;
  MEDIUM = 1,  // 4 niveaux&lt;br /&gt;
  HARD = 2     // 6 niveaux&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Difficulty currentDifficulty = MEDIUM;&lt;br /&gt;
int maxLevels = 4;  // Par défaut moyen&lt;br /&gt;
&lt;br /&gt;
// Configuration des pins boutons et LEDs&lt;br /&gt;
const int BUTTON_PINS[4] = {12, 13, 14, 15};  // Rouge, Jaune, Vert, Bleu&lt;br /&gt;
const int LED_PINS[4] = {25, 26, 27, 33};     // Rouge, Jaune, Vert, Bleu&lt;br /&gt;
&lt;br /&gt;
// Noms des couleurs pour l'affichage&lt;br /&gt;
const char* COLOR_NAMES[4] = {&amp;quot;ROUGE&amp;quot;, &amp;quot;JAUNE&amp;quot;, &amp;quot;VERT&amp;quot;, &amp;quot;BLEU&amp;quot;};&lt;br /&gt;
&lt;br /&gt;
// Correspondance couleur -&amp;gt; numéro de son&lt;br /&gt;
const int COLOR_TO_SOUND[4] = {1, 2, 3, 4};  // Rouge=1, Jaune=2, Vert=3, Bleu=4&lt;br /&gt;
&lt;br /&gt;
// Variables du jeu&lt;br /&gt;
int sequence[100];              // Séquence à mémoriser (max 100 niveaux)&lt;br /&gt;
int sequenceLength = 0;         // Longueur actuelle de la séquence&lt;br /&gt;
int playerInput[100];           // Saisie du joueur&lt;br /&gt;
int playerIndex = 0;            // Position dans la saisie&lt;br /&gt;
int level = 1;                  // Niveau actuel&lt;br /&gt;
bool gameActive = false;        // Jeu en cours&lt;br /&gt;
bool waitingForInput = false;   // En attente de la saisie du joueur&lt;br /&gt;
&lt;br /&gt;
// Débounce des boutons&lt;br /&gt;
unsigned long lastButtonPress[4] = {0, 0, 0, 0};&lt;br /&gt;
const unsigned long DEBOUNCE_DELAY = 250;&lt;br /&gt;
&lt;br /&gt;
// Timings du jeu (en millisecondes)&lt;br /&gt;
const int FLASH_DURATION = 500;      // Durée d'allumage d'une LED&lt;br /&gt;
const int PAUSE_BETWEEN_FLASH = 200; // Pause entre deux LEDs&lt;br /&gt;
const int DELAY_AFTER_SEQUENCE = 500;// Délai avant que le joueur joue&lt;br /&gt;
&lt;br /&gt;
// Variables pour l'effet feu&lt;br /&gt;
byte heat[NUM_LEDS];&lt;br /&gt;
unsigned long lastFireUpdate = 0;&lt;br /&gt;
const int FIRE_UPDATE_INTERVAL = 50; // Mise à jour toutes les 50ms&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(115200);&lt;br /&gt;
  delay(1000);&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\n╔═══════════════════════════════════╗&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;║      JEU SIMON - ESP32            ║&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;╚═══════════════════════════════════╝\n&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Configuration des boutons&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    pinMode(BUTTON_PINS[i], INPUT_PULLUP);&lt;br /&gt;
  }&lt;br /&gt;
  Serial.println(&amp;quot;✓ Boutons configurés&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Configuration des LEDs&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    pinMode(LED_PINS[i], OUTPUT);&lt;br /&gt;
    digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
  }&lt;br /&gt;
  Serial.println(&amp;quot;✓ LEDs configurées&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Configuration du ruban LED&lt;br /&gt;
  FastLED.addLeds&amp;lt;LED_TYPE, LED_STRIP_PIN, COLOR_ORDER&amp;gt;(leds, NUM_LEDS);&lt;br /&gt;
  FastLED.setBrightness(100); // Luminosité (0-255)&lt;br /&gt;
  FastLED.clear();&lt;br /&gt;
  FastLED.show();&lt;br /&gt;
  Serial.println(&amp;quot;✓ Ruban LED configuré (144 LEDs)&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Configuration du potentiomètre&lt;br /&gt;
  pinMode(POTENTIOMETER_PIN, INPUT);&lt;br /&gt;
  Serial.println(&amp;quot;✓ Potentiomètre configuré sur GPIO 34&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Lire la difficulté initiale&lt;br /&gt;
  readDifficulty();&lt;br /&gt;
  &lt;br /&gt;
  // Configuration DFPlayer&lt;br /&gt;
  mySoftwareSerial.begin(9600, SERIAL_8N1, 16, 17);&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\nInitialisation du DFPlayer...&amp;quot;);&lt;br /&gt;
  if (!myDFPlayer.begin(mySoftwareSerial)) {&lt;br /&gt;
    Serial.println(&amp;quot;\n✗ ERREUR DFPlayer!&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;Vérifiez:&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;  - Carte SD insérée (FAT32)&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;  - Fichiers 0001.mp3 à 0006.mp3&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;  - Connexions RX/TX&amp;quot;);&lt;br /&gt;
    while(true) { delay(1000); }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;✓ DFPlayer OK!&amp;quot;);&lt;br /&gt;
  myDFPlayer.volume(25);  // Volume (0-30)&lt;br /&gt;
  delay(100);&lt;br /&gt;
  &lt;br /&gt;
  // Animation de démarrage&lt;br /&gt;
  startupAnimation();&lt;br /&gt;
  &lt;br /&gt;
  // Initialiser le générateur aléatoire&lt;br /&gt;
  randomSeed(analogRead(0));&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\n═══════════════════════════════════&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;  DIFFICULTÉ SÉLECTIONNÉE:&amp;quot;);&lt;br /&gt;
  printDifficulty();&lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;   Appuyez sur un bouton pour&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;        commencer le jeu!&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  // Mettre à jour l'effet feu en continu&lt;br /&gt;
  updateFireEffect();&lt;br /&gt;
  &lt;br /&gt;
  if (!gameActive) {&lt;br /&gt;
    // Attendre qu'un bouton soit pressé pour démarrer&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      if (digitalRead(BUTTON_PINS[i]) == LOW) {&lt;br /&gt;
        delay(300);&lt;br /&gt;
        startNewGame();&lt;br /&gt;
        break;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  } else if (waitingForInput) {&lt;br /&gt;
    checkPlayerInput();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void startNewGame() {&lt;br /&gt;
  // Lire la difficulté au début de chaque partie&lt;br /&gt;
  readDifficulty();&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\n╔═══════════════════════════════════╗&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;║      NOUVELLE PARTIE              ║&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;╚═══════════════════════════════════╝&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;\n  Difficulté: &amp;quot;);&lt;br /&gt;
  printDifficulty();&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  &lt;br /&gt;
  gameActive = true;&lt;br /&gt;
  level = 1;&lt;br /&gt;
  sequenceLength = 0;&lt;br /&gt;
  &lt;br /&gt;
  delay(1000);&lt;br /&gt;
  nextLevel();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void nextLevel() {&lt;br /&gt;
  Serial.println(&amp;quot;─────────────────────────────────────&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;         NIVEAU &amp;quot;);&lt;br /&gt;
  Serial.print(level);&lt;br /&gt;
  Serial.print(&amp;quot; / &amp;quot;);&lt;br /&gt;
  Serial.println(maxLevels);&lt;br /&gt;
  Serial.println(&amp;quot;─────────────────────────────────────\n&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Ajouter une couleur aléatoire à la séquence&lt;br /&gt;
  sequence[sequenceLength] = random(0, 4);&lt;br /&gt;
  sequenceLength++;&lt;br /&gt;
  &lt;br /&gt;
  delay(1000);&lt;br /&gt;
  &lt;br /&gt;
  // Afficher la séquence au joueur&lt;br /&gt;
  playSequence();&lt;br /&gt;
  &lt;br /&gt;
  // Attendre la saisie du joueur&lt;br /&gt;
  playerIndex = 0;&lt;br /&gt;
  waitingForInput = true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void playSequence() {&lt;br /&gt;
  Serial.println(&amp;quot;👀 Mémorisez la séquence:\n&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  for (int i = 0; i &amp;lt; sequenceLength; i++) {&lt;br /&gt;
    int color = sequence[i];&lt;br /&gt;
    &lt;br /&gt;
    Serial.print(&amp;quot;   &amp;quot;);&lt;br /&gt;
    Serial.print(i + 1);&lt;br /&gt;
    Serial.print(&amp;quot;. &amp;quot;);&lt;br /&gt;
    Serial.println(COLOR_NAMES[color]);&lt;br /&gt;
    &lt;br /&gt;
    // Allumer la LED et jouer le son&lt;br /&gt;
    digitalWrite(LED_PINS[color], HIGH);&lt;br /&gt;
    myDFPlayer.play(COLOR_TO_SOUND[color]);  // Rouge=1, Jaune=2, Vert=3, Bleu=4&lt;br /&gt;
    &lt;br /&gt;
    delay(FLASH_DURATION);&lt;br /&gt;
    &lt;br /&gt;
    // Éteindre la LED&lt;br /&gt;
    digitalWrite(LED_PINS[color], LOW);&lt;br /&gt;
    &lt;br /&gt;
    // Pause entre les flashs&lt;br /&gt;
    if (i &amp;lt; sequenceLength - 1) {&lt;br /&gt;
      delay(PAUSE_BETWEEN_FLASH);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  delay(DELAY_AFTER_SEQUENCE);&lt;br /&gt;
  Serial.println(&amp;quot;\n🎮 À vous de jouer!\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void checkPlayerInput() {&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    if (digitalRead(BUTTON_PINS[i]) == LOW) {&lt;br /&gt;
      unsigned long currentTime = millis();&lt;br /&gt;
      &lt;br /&gt;
      // Débounce&lt;br /&gt;
      if (currentTime - lastButtonPress[i] &amp;gt; DEBOUNCE_DELAY) {&lt;br /&gt;
        lastButtonPress[i] = currentTime;&lt;br /&gt;
        &lt;br /&gt;
        // Feedback visuel et sonore&lt;br /&gt;
        digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
        myDFPlayer.play(COLOR_TO_SOUND[i]);  // Jouer le son correspondant&lt;br /&gt;
        &lt;br /&gt;
        Serial.print(&amp;quot;   → &amp;quot;);&lt;br /&gt;
        Serial.println(COLOR_NAMES[i]);&lt;br /&gt;
        &lt;br /&gt;
        // Enregistrer la saisie&lt;br /&gt;
        playerInput[playerIndex] = i;&lt;br /&gt;
        &lt;br /&gt;
        delay(300);&lt;br /&gt;
        digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
        &lt;br /&gt;
        // Vérifier si c'est correct&lt;br /&gt;
        if (playerInput[playerIndex] != sequence[playerIndex]) {&lt;br /&gt;
          gameLost();&lt;br /&gt;
          return;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        playerIndex++;&lt;br /&gt;
        &lt;br /&gt;
        // Vérifier si la séquence complète est correcte&lt;br /&gt;
        if (playerIndex &amp;gt;= sequenceLength) {&lt;br /&gt;
          sequenceComplete();&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void sequenceComplete() {&lt;br /&gt;
  Serial.println(&amp;quot;\n✅ Séquence correcte!\n&amp;quot;);&lt;br /&gt;
  waitingForInput = false;&lt;br /&gt;
  &lt;br /&gt;
  level++;&lt;br /&gt;
  &lt;br /&gt;
  // Vérifier si on a atteint le niveau maximum selon la difficulté&lt;br /&gt;
  if (level &amp;gt; maxLevels) {&lt;br /&gt;
    gameWon();&lt;br /&gt;
  } else {&lt;br /&gt;
    delay(500);&lt;br /&gt;
    &lt;br /&gt;
    // Animation de succès (rapide entre chaque niveau)&lt;br /&gt;
    for (int j = 0; j &amp;lt; 2; j++) {&lt;br /&gt;
      for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
        digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
      }&lt;br /&gt;
      delay(100);&lt;br /&gt;
      for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
        digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
      }&lt;br /&gt;
      delay(100);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    delay(1000);&lt;br /&gt;
    nextLevel();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void gameLost() {&lt;br /&gt;
  Serial.println(&amp;quot;\n╔═══════════════════════════════════╗&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;║          ❌ ERREUR!               ║&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;╚═══════════════════════════════════╝&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;\n   Vous étiez au niveau &amp;quot;);&lt;br /&gt;
  Serial.println(level);&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  &lt;br /&gt;
  waitingForInput = false;&lt;br /&gt;
  gameActive = false;&lt;br /&gt;
  &lt;br /&gt;
  // Son d'échec (0006.mp3)&lt;br /&gt;
  myDFPlayer.play(6);&lt;br /&gt;
  &lt;br /&gt;
  // Animation d'échec (clignotement rapide)&lt;br /&gt;
  for (int j = 0; j &amp;lt; 5; j++) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
    }&lt;br /&gt;
    delay(150);&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
    }&lt;br /&gt;
    delay(150);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot; Appuyez sur un bouton pour rejouer&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void gameWon() {&lt;br /&gt;
  Serial.println(&amp;quot;\n╔═══════════════════════════════════╗&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;║      🎉 VICTOIRE! 🎉              ║&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;╚═══════════════════════════════════╝&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;\n  Vous avez réussi les &amp;quot;);&lt;br /&gt;
  Serial.print(maxLevels);&lt;br /&gt;
  Serial.println(&amp;quot; niveaux!&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;  Difficulté: &amp;quot;);&lt;br /&gt;
  printDifficulty();&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  &lt;br /&gt;
  gameActive = false;&lt;br /&gt;
  &lt;br /&gt;
  // Son de victoire (0005.mp3)&lt;br /&gt;
  myDFPlayer.play(5);&lt;br /&gt;
  &lt;br /&gt;
  // Animation de victoire spectaculaire&lt;br /&gt;
  // Vague de lumière rapide&lt;br /&gt;
  for (int j = 0; j &amp;lt; 8; j++) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
      delay(60);&lt;br /&gt;
      digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Clignotement final toutes ensemble&lt;br /&gt;
  for (int j = 0; j &amp;lt; 4; j++) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
    }&lt;br /&gt;
    delay(200);&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
    }&lt;br /&gt;
    delay(200);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;\n═══════════════════════════════════&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot; Ajustez le potentiomètre pour&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot; changer de difficulté&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot; Appuyez sur un bouton pour rejouer&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;═══════════════════════════════════\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void startupAnimation() {&lt;br /&gt;
  Serial.println(&amp;quot;\nAnimation de démarrage...\n&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  // Allumage séquentiel&lt;br /&gt;
  for (int j = 0; j &amp;lt; 2; j++) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
      delay(100);&lt;br /&gt;
    }&lt;br /&gt;
    for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
      digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
      delay(100);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Flash final&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    digitalWrite(LED_PINS[i], HIGH);&lt;br /&gt;
  }&lt;br /&gt;
  delay(300);&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    digitalWrite(LED_PINS[i], LOW);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Effet feu de bois pour le ruban LED&lt;br /&gt;
void updateFireEffect() {&lt;br /&gt;
  unsigned long currentTime = millis();&lt;br /&gt;
  &lt;br /&gt;
  // Mettre à jour seulement toutes les FIRE_UPDATE_INTERVAL ms&lt;br /&gt;
  if (currentTime - lastFireUpdate &amp;lt; FIRE_UPDATE_INTERVAL) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  lastFireUpdate = currentTime;&lt;br /&gt;
  &lt;br /&gt;
  // Refroidissement: chaque cellule perd un peu de chaleur&lt;br /&gt;
  for (int i = 0; i &amp;lt; NUM_LEDS; i++) {&lt;br /&gt;
    int cooldown = random(0, ((55 * 10) / NUM_LEDS) + 2);&lt;br /&gt;
    if (cooldown &amp;gt;= heat[i]) {&lt;br /&gt;
      heat[i] = 0;&lt;br /&gt;
    } else {&lt;br /&gt;
      heat[i] = heat[i] - cooldown;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Diffusion de chaleur vers le haut&lt;br /&gt;
  for (int k = NUM_LEDS - 1; k &amp;gt;= 2; k--) {&lt;br /&gt;
    heat[k] = (heat[k - 1] + heat[k - 2] + heat[k - 2]) / 3;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Ajout de nouvelles étincelles aléatoires en bas&lt;br /&gt;
  if (random(255) &amp;lt; 120) {&lt;br /&gt;
    int y = random(7);&lt;br /&gt;
    heat[y] = heat[y] + random(160, 255);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Conversion de la chaleur en couleurs&lt;br /&gt;
  for (int j = 0; j &amp;lt; NUM_LEDS; j++) {&lt;br /&gt;
    // Palette de couleurs feu: noir → rouge → orange → jaune → blanc&lt;br /&gt;
    byte temperature = heat[j];&lt;br /&gt;
    &lt;br /&gt;
    // Noir → Rouge foncé&lt;br /&gt;
    byte t192 = scale8_video(temperature, 191);&lt;br /&gt;
    byte heatramp = t192 &amp;amp; 0x3F; // 0..63&lt;br /&gt;
    heatramp &amp;lt;&amp;lt;= 2; // 0..252&lt;br /&gt;
    &lt;br /&gt;
    if (t192 &amp;amp; 0x80) {&lt;br /&gt;
      // Partie la plus chaude - jaune vers blanc&lt;br /&gt;
      leds[j].r = 255;&lt;br /&gt;
      leds[j].g = 255;&lt;br /&gt;
      leds[j].b = heatramp;&lt;br /&gt;
    } else if (t192 &amp;amp; 0x40) {&lt;br /&gt;
      // Partie chaude - rouge vers jaune&lt;br /&gt;
      leds[j].r = 255;&lt;br /&gt;
      leds[j].g = heatramp;&lt;br /&gt;
      leds[j].b = 0;&lt;br /&gt;
    } else {&lt;br /&gt;
      // Partie froide - noir vers rouge&lt;br /&gt;
      leds[j].r = heatramp;&lt;br /&gt;
      leds[j].g = 0;&lt;br /&gt;
      leds[j].b = 0;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  FastLED.show();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Lire le potentiomètre et déterminer la difficulté&lt;br /&gt;
void readDifficulty() {&lt;br /&gt;
  int potValue = analogRead(POTENTIOMETER_PIN);  // 0-4095 sur ESP32&lt;br /&gt;
  &lt;br /&gt;
  // Diviser en 3 zones&lt;br /&gt;
  if (potValue &amp;lt; 1365) {&lt;br /&gt;
    // Zone 1: FACILE (0-1365)&lt;br /&gt;
    currentDifficulty = EASY;&lt;br /&gt;
    maxLevels = 3;&lt;br /&gt;
  } else if (potValue &amp;lt; 2730) {&lt;br /&gt;
    // Zone 2: MOYEN (1365-2730)&lt;br /&gt;
    currentDifficulty = MEDIUM;&lt;br /&gt;
    maxLevels = 4;&lt;br /&gt;
  } else {&lt;br /&gt;
    // Zone 3: DIFFICILE (2730-4095)&lt;br /&gt;
    currentDifficulty = HARD;&lt;br /&gt;
    maxLevels = 6;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Afficher la difficulté actuelle&lt;br /&gt;
void printDifficulty() {&lt;br /&gt;
  switch(currentDifficulty) {&lt;br /&gt;
    case EASY:&lt;br /&gt;
      Serial.print(&amp;quot;FACILE (3 niveaux)&amp;quot;);&lt;br /&gt;
      break;&lt;br /&gt;
    case MEDIUM:&lt;br /&gt;
      Serial.print(&amp;quot;MOYEN (4 niveaux)&amp;quot;);&lt;br /&gt;
      break;&lt;br /&gt;
    case HARD:&lt;br /&gt;
      Serial.print(&amp;quot;DIFFICILE (6 niveaux)&amp;quot;);&lt;br /&gt;
      break;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Conception des boutons : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Au départ : Bouton rouge à disposition, le problème est qu'il faut plusieur couleur. Alors nous changeons de couleur la led et voulons remplacer l'opercule rouge par du plexiglace, cependant cela ne se colle pas au bouton. &lt;br /&gt;
- Alors : Nous avons pris des boutons plus petit de plusieurs couleur (rouge, bleu, vert et jaune). Pour les rendre plus grands, nous avons decider de couper du plexiglace en plusieur forme, bonhomme de neige, sapin, renne, et pain d'épice, nous avons laissé un trou (de 27mm de diamètre) dans chacune des formes afin de mettre les boutons dedans.&lt;br /&gt;
- Pour finir, nous avons rajouté du vinyl de la même couleur que les boutons pour les rendre plus visible sur la cheminée.   &lt;br /&gt;
&lt;br /&gt;
==premier diaporama : Alors ? Comment ça se passe ?==&lt;br /&gt;
Diaporama type '''Alors ?''': [[media:DiaporamaSuperBrest2024-Alors.odp|Téléchargez et adaptez-le !]]&lt;br /&gt;
&lt;br /&gt;
==second diaporama : Et voilà !==&lt;br /&gt;
Diaporama type '''Et Voilà !''' : [[media:DiaporamaSuperBrest2024-EtVoila.odp|Téléchargez et adaptez-le !]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Sciencehackdaybrest]]&lt;br /&gt;
[[Catégorie:Super Brest]]&lt;br /&gt;
[[Catégorie:Super Brest 2025]]&lt;/div&gt;</summary>
		<author><name>Emma</name></author>	</entry>

	</feed>