Etape 1: Le code
#include < Wire.h > #include < Adafruit_TCS34725.h > #include < Adafruit_LSM303.h > #include < Adafruit_NeoPixel.h > / / paramètre 1 = nombre de pixels dans la bande de / / paramètre 2 = Numéro d’identification (la plupart sont valide) / / paramètre 3 = type de pixel drapeaux, s’additionnent selon les besoins: / / NEO_RGB Pixels sont câblés pour RGB bitstream / / NEO_GRB Pixels sont câblés pour GRB bitstream / / bitstream NEO_KHZ400 400 KHz (par exemple les pixels de FLORA) / / bitstream NEO_KHZ800 800 KHz (par exemple bande de LED de haute densité) #define NUM_PIXELS 4 Bande de Adafruit_NeoPixel = Adafruit_NeoPixel (NUM_PIXELS, 6, NEO_GRB + NEO_KHZ800) ; Adafruit_TCS34725 color_sensor = Adafruit_TCS34725 (TCS34725_INTEGRATIONTIME_50MS, TCS34725_GAIN_4X) ; Adafruit_LSM303 accel ; #define STILL_LIGHT / / define si lumière doit être activé lorsque aucun mouvement. Sinon dark / / nos RGB -> oeil-reconnu gamma couleur octets gammatable [256] ; int g_red, g_green, g_blue ; couleurs globales lus par couleur capteur int j ; plaisante pas avec ce nombre d’ajuster TWINklitude:) / / basse nombre = plus sensible #define MOVE_THRESHOLD 45 #define FADE_RATE 5 int conduit = 7 ; double newVector ; void flash (int fois) {pour (int j’ai = 0; j’ai < fois; i ++) {digitalWrite (led, HIGH); / / allumer la LED (HIGH est le niveau de tension) delay(150); / / attendre un deuxième digitalWrite (led, faible); / / éteindre la LED en rendant les delay(150) basse tension;}} float r, g, b ; double storedVector ; void setup() {pinMode (led, sortie); / / Try initialiser et avertir si nous ne pouvions pas détecter la puce si (! accel.begin()) {Serial.println ("Oops... impossible d’initialiser le LSM303. Vérifiez votre câblage!") ; while (1) {flash(4) ; delay(1000);} ; } strip.begin() ; Strip.Show() ; Initialiser tous les pixels sur « arrêt » si (! color_sensor.begin()) {Serial.println ("TCS34725 non trouvé... Vérifiez vos connexions"); while (1) {flash(3) ; delay(1000);};} / / Merci PhilB pour cette table gamma ! Il permet de convertir les couleurs RVB à ce que les humains voient pour (int j’ai = 0; j’ai < 256; i ++) {float x = i; x / = 255; x = pow (x, 2, 5); x * = 255 ; gammatable [i] = x;} //this séquence clignote le premier pixel trois fois / / comme un compte à rebours pour la lecture de la couleur. pour (int i = 0; j’ai < 3; i ++) {/ / blanc, mais le variateur--255 pour toutes les trois valeurs rend aveugle
! strip.setPixelColor (0, bande. Couleur (188, 188, 188)) ; Strip.Show() ; Delay(1000) ; strip.setPixelColor (0, bande. Couleur (0, 0, 0)) ; Strip.Show() ; Delay(500) ; } uint16_t clair, rouge, vert, bleu ; color_sensor.setInterrupt(false) ; allumer la LED delay(60) ; prend 50ms à lire color_sensor.getRawData (rouge, vert & bleu & claire) ; color_sensor.setInterrupt(true) ; désactiver les LED / / comprendre certains code hexadécimal de base pour la somme de visualisation uint32_t = rouge ; somme += vert ; somme += bleu ; somme = effacer ; r = rouge ; r / = somme ; g = vert ; g / = somme ; b = bleu ; b / = somme ; r * = 256 ; g * = 256 ; b * = 256 ; g_red = gammatable [(int) r] ; g_green = gammatable [(int) g] ; g_blue = gammatable [(int) b] ; Obtenir la grandeur (longueur) du vecteur 3 axes / / http://en.wikipedia.org/wiki/Euclidean_vector#Length accel.read() ; storedVector = accel.accelData.x*accel.accelData.x ; storedVector += accel.accelData.y*accel.accelData.y ; storedVector += accel.accelData.z*accel.accelData.z ; storedVector = sqrt(storedVector) ; } void loop() {/ / obtenir de nouvelles données accel.read() ; double newVector = accel.accelData.x*accel.accelData.x ; newVector += accel.accelData.y*accel.accelData.y ; newVector += accel.accelData.z*accel.accelData.z newVector = sqrt(newVector); / / nous dirigeons-nous si (abs (newVector - storedVector) > MOVE_THRESHOLD) {colorWipe (bande. Color(0, 0, 0), 0) ; flashRandom (10, 25) ; nombre premier est retard 'attendre', / / plus court num == twinkle plus court / / second numéro est combien neopixels à / / allument simultanément} #ifdef STILL_LIGHT else {colorWipe (bande. Couleur (gammatable [(int) r], gammatable [(int) g], gammatable[(int)b]), 0) ; storedVector = newVector ; } #endif} void flashRandom (int wait, uint8_t howmany) {pour (uint16_t j’ai = 0; i < howmany; i ++) {pour (int simul_pixels = 0; simul_pixels < 8; simul_pixels ++) {/ / obtenir un pixel aléatoire de la liste j = random(strip.numPixels()) ; strip.setPixelColor (j, strip. Couleur (g_red, g_green, g_blue)) ; } strip.show() ; Delay(Wait) ; colorWipe (bande. Color(0, 0, 0), 0) ; maintenant, on va « fade » il FADE_RATE les étapes pour (int x = 0; x < FADE_RATE; x ++) {int r = g_red * (x + 1); r / = FADE_RATE ; int g = g_green * (x + 1); g / = FADE_RATE ; int b = g_blue * (x + 1); b / = FADE_RATE ; strip.setPixelColor (j, strip. Couleur (r, g, b)) ; Strip.Show() ; Delay(Wait) ; } / / & fondu pour (int x = FADE_RATE; x > = 0; x--) {int r = g_red * x; r / = FADE_RATE ; int g = g_green * x; g / = FADE_RATE ; int b = g_blue * x; b / = FADE_RATE ; strip.setPixelColor (j, strip. Couleur (r, g, b)) ; Strip.Show() ; Delay(Wait) ; colorWipe}} #ifdef STILL_LIGHT (bande. Couleur (gammatable [(int) r], gammatable [(int) g], gammatable[(int)b]), 0) ; #endif} / / remplir les points un après l’autre avec une colorWipe Sub de couleur (uint32_t c, uint8_t attente) {pour (uint16_t j’ai = 0; i < strip.numPixels(); i ++) {strip.setPixelColor (i, c); strip.show() ; delay(wait);}}