Pir et neopixels

Bonjour à toutes et à tous,

Afin de faire une brève présentation, je m'appelle David et je suis enseignant en graphisme, et dès que mon emploi du temps me le permet, j'aime "chipoter" sur des projets qui allient le graphisme et l'interactivité.

Maintenant, mon souci :
A) je suis en train de réaliser un projet dans lequel le visiteur s'approche d'un objet.
B) dès que ce visiteur est détecté par un PIR des néopixels jouent sur des fondus de lumières.
C) dès que le visiteur s'éloigne, et qu'il n'est plus détecté par le PIR, les neopixels s'éteignent progressivement jusqu'à s'éteindre.

Pour l'instant mon code fonctionne partiellement, car si les les points A et B sont ok (présence est toujours détectée et que les animations de lumières fonctionnent). Le point C ne fonctionne qu'une fois (problème par rapport à la boléenne).

Un peu d'aide serait la bienvenue;-) d'avance merci!

#include <Adafruit_NeoPixel.h>
#define PIN 6

Adafruit_NeoPixel strip = Adafruit_NeoPixel(6, PIN, NEO_GRB + NEO_KHZ800);


boolean faireCode;
uint16_t i, j;
int NUMPIXELS;
int capteur = 2;
int pinLed = 13;

void setup() {



  faireCode = true;

  //neopixels

  strip.begin();
  strip.show(); // initialise les pixels à OFF


  //neopixel End
  pinMode(capteur, INPUT);
  pinMode(pinLed, OUTPUT);
  //digitalWrite(pinLed,HIGH);
  Serial.begin(9600);
}

void loop() {



  if (digitalRead(capteur) == HIGH) {
    Serial.println("mouvement detecte");
    brighten();
    darken();
  }
  else if (faireCode) {
    Serial.println("pas de mouvement");
    // darkEnd();



    for (j = 150; j > 0; j--) {
      for (i = 0; i < strip.numPixels(); i++) {
        strip.setPixelColor(i, j, j, j);

      }
      strip.show();
      delay(10);
    }
    faireCode = false;
  }

  //fonctions pour les fondus de lumière

  void brighten() {


    for (j = 100; j < 150; j++) {
      for (i = 0; i < strip.numPixels(); i++) {
        strip.setPixelColor(i, j, j, j);
      }
      strip.show();
      delay(5);
    }
    //delay(1500);
  }

  // 150 à 0
  void darken() {
    //Serial.begin(9600);


    for (j = 150; j > 100; j--) {
      for (i = 0; i < strip.numPixels(); i++) {

      }
      strip.show();
      delay(5);
      Serial.println(j);
    }

faireCode n'est jamais remis à true.
Si j'ai bien compris ton besoin je pense qu'il faudrait ajouter faireCode = true; juste après l'appel à darken

Merci beaucoup fdufnews, le programme fonctionne:-) ça semble simple quand tu l'expliques (le code n'était jamais remis à true;), mais je me prenais la tête depuis des heures. Encore merci pour tes savoirs éclairants;-)

David

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.