Schritt 1: Der code
< Wire.h > < Adafruit_TCS34725.h > < Adafruit_LSM303.h > < Adafruit_NeoPixel.h > #include #include #include #include / / Parameter 1 = Anzahl der Pixel in Streifen / / Parameter 2 = Pin-Nummer (die meisten sind gültig) / / Parameter 3 = Pixeltyp Fahnen, addieren Sie je nach Bedarf: / / NEO_RGB Pixel sind verdrahtet für RGB Bitstream / / NEO_GRB Pixel sind verdrahtet für GRB Bitstream / / NEO_KHZ400 400 KHz Bitstream (z. B. FLORA Pixel) / / NEO_KHZ800 800 KHz Bitstream (z. B. High-Density-LED Streifen) #define NUM_PIXELS 4 Adafruit_NeoPixel Streifen = 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 / / wenn Licht auf sein soll, wenn keine Bewegung zu definieren. Ansonsten dunklen / / unsere RGB -> Auge erkannt Gamma Farbe Byte Gammatable [256]; Int G_red, G_green, G_blue; globale Farben lesen von Farbe Sensor Int j; Durcheinander mit dieser Nummer TWINklitude anpassen :) / / kleiner Zahl = empfindlicher #define MOVE_THRESHOLD 45 #define FADE_RATE 5 Int führte = 7; doppelte NewVector; nichtig Blitz (Int x) {für (Int ich = 0; ich < Zeiten; i ++) {DigitalWrite (geführt, hoch); / / LED einschalten (HIGH ist das Spannungsniveau) delay(150); / / warten auf eine zweite DigitalWrite (geführt, niedrig); / / LED ausschalten, indem man die Spannung niedrig delay(150);}} float R, g, b; doppelte StoredVector; void setup() {PinMode (geführt, OUTPUT); / / zu initialisieren und zu warnen, wenn wir den Chip erkennen konnte nicht versuchen (! accel.begin()) {Serial.println ("Oops... nicht in der Lage, die LSM303 zu initialisieren. Überprüfen Sie die Verkabelung!"); während (1) {flash(4); delay(1000);}; } strip.begin(); Strip.Show(); Alle Pixel auf "off" zu initialisieren, wenn (! color_sensor.begin()) {Serial.println ("No TCS34725 gefunden... Check Ihre Verbindungen"), während (1) {flash(3); delay(1000);};} / / danke PhilB für diese Gamma-Tabelle! Es hilft, RGB-Farben konvertieren, um zu was Menschen für sehen (Int ich = 0; ich < 256; i ++) {Float X = i; X / = 255; X = pow (x, 2.5); X * = 255; Gammatable [i] = X;} //this Sequenz das erste Pixel blinkt dreimal / / als Countdown bis zur Farbe-Lesung. für (Int ich = 0; ich < 3; i ++) {/ / weiß, sondern dimmer--255 für alle drei Werte macht es blendend
! strip.setPixelColor (0, Streifen. Farbe (188, 188, 188)); Strip.Show(); Delay(1000); strip.setPixelColor (0, Streifen. Farbe (0, 0, 0)); Strip.Show(); Delay(500); } uint16_t klar, rot, grün, blau; color_sensor.setInterrupt(false); LED delay(60) Schalten; dauert 50ms color_sensor.getRawData zu lesen (rot, Grün & Blau, & klar); color_sensor.setInterrupt(true); Schalten Sie LED / / herauszufinden, einige grundlegende hex-Code für Visualisierung uint32_t Summe = Rot; Sum += grün; Sum += blau; Summe = löschen; R = rot; R / = Summe; g = grün; g / = Summe; b = blau; b / = Summe; R * = 256; g * = 256; b * = 256; G_red = Gammatable [R (Int)]; G_green = Gammatable [(Int) g]; G_blue = Gammatable [(Int) b]; Erhalten Sie die Größe (Länge) der 3-Achsen-Vektor / / 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() {/ / neue Daten accel.read(); doppelte NewVector = accel.accelData.x*accel.accelData.x; NewVector += accel.accelData.y*accel.accelData.y; NewVector += accel.accelData.z*accel.accelData.z; NewVector = sqrt(newVector); / / bewegen wir uns, wenn (abs (NewVector - StoredVector) > MOVE_THRESHOLD) {ColorWipe (Streifen. Color(0, 0, 0), 0); FlashRandom (10, 25); erste Zahl ist "warten" Verzögerung / / kürzere Num == kürzere funkeln / / zweite Zahl ist wie viele Neopixels zu / / gleichzeitig leuchten} #ifdef STILL_LIGHT else {ColorWipe (Streifen. Farbe (Gammatable [R (Int)], Gammatable [(Int) g], gammatable[(int)b]), 0); StoredVector = NewVector; {} #endif} void FlashRandom (Int warten, uint8_t automatisch) {für (uint16_t ich = 0; ich < automatisch; i ++) {für (Int Simul_pixels = 0; Simul_pixels < 8; Simul_pixels ++) {/ / get einen zufällige Pixel aus der Liste j = random(strip.numPixels()); strip.setPixelColor (j, Streifen. Farbe (G_red, G_green, G_blue)); } strip.show(); Delay(Wait); ColorWipe (Streifen. Color(0, 0, 0), 0); jetzt wir 'es ' in Fade wird FADE_RATE Schritte für (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, Streifen. Farbe (R, g, b)); Strip.Show(); Delay(Wait); } / / & für ausblenden (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, Streifen. Farbe (R, g, b)); Strip.Show(); Delay(Wait); {}} #ifdef STILL_LIGHT ColorWipe (Streifen. Farbe (Gammatable [R (Int)], Gammatable [(Int) g], gammatable[(int)b]), 0); #endif} / / füllen die Punkte eins nach dem anderen mit einer Farbe void ColorWipe (uint32_t c, uint8_t warten) {für (uint16_t ich = 0; ich < strip.numPixels(); i ++) {strip.setPixelColor (i, C); strip.show(); delay(wait);}}