// ################################ // # MAIN ILLUMINEE LUCIEN & KARINE // # Guy Magli 04.03.2025 // ################################ // # Conception, cablages // # mises a jour, contact... // # www.magli.fr // # auguste@magli.fr // ################################ // // ! ======================== ! // ! Librairies et parametres ! // ! ======================== ! // // : ------------------------------------------ : // : Pour la communication avec un peripherique : // : ------------------------------------------ : // #include <"Wire.h"> // // : --------------------- : // : Pour l'anneau de leds : // : --------------------- : // // L'anneau est branche sur les connecteurs 5 volts, GND et 7 // #include <"Adafruit_NeoPixel.h"> #ifdef __AVR__ #include <"avr /power.h"> #endif #define LED_COUNT 24 // C'est un grand anneau de 24 leds #define LED_PIN 4 // Connecteur du signal Adafruit_NeoPixel pixels(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800); // // ! ================== ! // ! VARIABLES GLOBALES ! // ! ================== ! // const int iTrig = 7; // Pour les ultrasons const int iEcho = 8; // Id. int t, g; long lMesure = 0; float fDistance = 1000; // // : --------------------- : // : Pour l'anneau de leds : // : --------------------- : // int iCouleur; int iBrillance = 100; int iSaut = 1; // // ! ===== ! // ! SETUP ! // ! ===== ! // void setup() { Serial.begin(9600); Serial.println(" "); Serial.println(": -------------- :"); Serial.println(": MAIN ILLUMINEE :"); Serial.println(": -------------- :"); Serial.println(" "); pixels.begin(); randomSeed(analogRead(0)); // Pour le choix aleatoire de la couleur d'affichage pinMode( iEcho, INPUT); // Recevoir des ultrasons pinMode( iTrig, OUTPUT); // Envoyer des ultrasons EteintTourne(0,0,0); } // // ! ==== ! // ! LOOP ! // ! ==== ! // void loop() { // // : --------------------------- : // : Si un mouvement est detecte : // : --------------------------- : // // On boucle tant que rien de proche ne se presente. // fDistance = 1000.00; while (fDistance > 70.00) { Serial.println("Attente d'un ultrason."); // Initialiser le capteur digitalWrite(iTrig, LOW); delayMicroseconds(2); delay(100); // Envoi d'un ultrason digitalWrite(iTrig, HIGH); delayMicroseconds(10); digitalWrite(iTrig, LOW); // Reception lMesure = pulseIn(iEcho, HIGH); digitalWrite(iTrig, LOW); fDistance = lMesure / 68; Serial.print("Distance : "); Serial.print(fDistance); Serial.println(" cm."); Delay(100); } // // SI LA DISTANCE EST INFERIEURE A 100 CM // Serial.println("Quelqu'un s'est approche. On allume."); iCouleur = random(1, 6); switch (iCouleur) { case 1: AllumeTourne(11, 83, 69); break; // Vert modifie chaud case 2: AllumeTourne(225, 0, 0); break; // Rouge feu case 3: AllumeTourne(0, 0, 255); break; // Bleu profond case 4: AllumeTourne(125, 102, 8); break; // Jaune orangé case 5: AllumeTourne(81, 46, 95); break; case 6: AllumeTourne(125, 125, 125); break; } // // On attend trente secondes // delay(30000); // // On eteint // Serial.println("Le temps d'affichage est passe. On eteint"); switch (iCouleur) { case 1: EteintTourne(11, 83, 69); break; case 2: EteintTourne(225, 0, 0); break; case 3: EteintTourne(0, 0, 255); break; case 4: EteintTourne(125, 102, 8); break; case 5: EteintTourne(81, 46, 95); break; case 6: EteintTourne(125, 125, 125); break; } } // // ! ========== ! // ! PROCEDURES ! // ! ========== ! // void AllumeTourne(int a, int b, int c) { pixels.clear(); pixels.setBrightness(iBrillance); // Pour tout le tour for (int iLed = 0; iLed < LED_COUNT; iLed=iLed + iSaut) { // On allume pixels.setPixelColor(iLed, pixels.Color(a, b, c)); pixels.show(); delay(50 * iSaut); // On eteint pixels.setPixelColor(iLed, pixels.Color(a, b, c)); pixels.show(); delay(50 * iSaut); } } void EteintTourne(int a, int b, int c) { for (int iLed=0;iLed < LED_COUNT; iLed++) { // On allume pixels.setPixelColor(iLed, pixels.Color(a, b, c)); pixels.show(); delay(100); // On eteint pixels.setPixelColor(iLed, pixels.Color(0, 0, 0)); pixels.show(); delay(100); } pixels.clear(); }