Stap 4: Software
#include < Adafruit_NeoPixel.h >#include < Wire.h >
#include "xadow.h"
#define ADDRACC 0x53
#define Register_ID 0
#define Register_2D 0x2D
#define Register_X0 0x32
#define Register_X1 0x33
#define Register_Y0 0x34
#define Register_Y1 0x35
#define Register_Z0 0x36
#define Register_Z1 0x37
#define PIN 15
dubbele az1;
Parameter 1 = aantal pixels in strip
Parameter 2 = pin-nummer (de meeste zijn geldig)
Parameter 3 = pixel type vlaggen, wens samen toevoegen:
NEO_KHZ800 800 KHz bitstream (de meeste NeoPixel producten w/WS2812 LEDs)
NEO_KHZ400 400 KHz (klassieke 'v1' (niet v2) FLORA pixels, WS2811 drivers)
NEO_GRB Pixels zijn bedraad voor GRB bitstream (de meeste NeoPixel produkten)
NEO_RGB Pixels zijn bedraad voor RGB bitstream (v1 FLORA pixels, niet v2)
Adafruit_NeoPixel strip = Adafruit_NeoPixel (14, PIN, NEO_GRB + NEO_KHZ800);
VOID Setup {}
Serial.begin(115200);
terwijl (!. Serieel);
Xadow.init();
Wire.begin();
adxl_init();
Cout << "init accelermeter over!" << endl;
strip.begin();
strip.show(); Initialiseren van alle pixels op 'off'
}
void loop {}
dubbele ax, ay, az2, diff, delaytime;
readAcc (ax, ay, & az2); krijgen van acc
diff = abs (az1 - az2);
Az1 = az2;
Cout << "az2 =" << az2 << "\t";
Cout << "az1 =" << az1 << "\t";
Cout << "diff =" << diff << endl;
Sommige voorbeeld procedures laten zien hoe om weer te geven op de pixels:
colorWipe (strip. Color(255, 0, 0), 50); Rood
colorWipe (strip. Color(0, 255, 0), 50); Groen
colorWipe (strip. Color(0, 0, 255), 50); Blauw
Rainbow(10);
diff = diff * 100;
Cout << "diff =" << diff << endl;
delaytime = dubbele (kaart (diff, 1, 250, 1000, 1)) / 1000;
Cout << "vertraging =" << delaytime << endl;
rainbowCycle(delaytime);
}
VOID adxl_init()
{
Wire.beginTransmission(ADDRACC);
Wire.write(Register_2D);
Wire.write(8); meten van inschakelen
Wire.endTransmission(); stoppen met het verzenden van
}
unsigned char readAcc (dubbele * Xg, dubbele * Yg, dubbele * Zg)
{
int X_out;
int Y_out;
int Z_out;
Wire.beginTransmission(ADDRACC); verzenden naar apparaat
Wire.write(Register_X0);
Wire.write(Register_X1);
Wire.endTransmission();
Wire.requestFrom(ADDRACC,2);
if(Wire.available() < = 2)
{
int X0 = Wire.read();
int X1 = Wire.read();
X1 = X1 << 8;
X_out = X 0 + X1;
}
//------------------Y
Wire.beginTransmission(ADDRACC); verzenden naar apparaat
Wire.write(Register_Y0);
Wire.write(Register_Y1);
Wire.endTransmission();
Wire.requestFrom(ADDRACC,2);
if(Wire.available() < = 2)
{
int Y0 = Wire.read();
int Y1 = Wire.read();
Y1 = Y1 << 8;
Y_out = Y0 + Y1;
}
//------------------Z
Wire.beginTransmission(ADDRACC); verzenden naar apparaat
Wire.write(Register_Z0);
Wire.write(Register_Z1);
Wire.endTransmission();
Wire.requestFrom(ADDRACC,2);
if(Wire.available() < = 2)
{
int Z0 = Wire.read();
int Z1 = Wire.read();
Z1 = Z1 << 8;
Z_out = Z0 + Z1;
}
* Xg = X_out/256.0;
* Yg = Y_out/256.0;
* Zg = Z_out/256.0;
}
De puntjes een na de andere te vullen met een kleur
VOID colorWipe (uint32_t c, uint8_t wachten) {}
voor (uint16_t i = 0; ik < strip.numPixels(); i ++) {}
strip.setPixelColor (i, c);
strip.show();
delay(wait);
}
}
VOID regenboog (uint8_t wachten) {}
uint16_t i, j;
voor (j = 0; j < 256; j ++) {}
voor (ik = 0; ik < strip.numPixels(); i ++) {}
strip.setPixelColor (i, Wheel((i+j) & 255));
}
strip.show();
delay(wait);
}
}
Iets anders, dit maakt de regenboog gelijkmatig verdeeld in de gehele
VOID rainbowCycle (uint8_t wachten) {}
uint16_t i, j;
voor (j = 0; j < 256; j += 1) {/ / 5 cycli van alle kleuren op wiel
voor (ik = 0; ik < strip.numPixels(); i ++) {}
strip.setPixelColor (ik, wiel (((i * 256/strip.numPixels()) + j) & 255));
delay(wait);
}
strip.show();
delay(wait);
}
}
Invoergegevens naar een waarde van 0 tot 255 om een kleurwaarde.
De kleuren zijn een overgang r - g - b - terug naar r.
uint32_t wiel (byte WheelPos) {}
if(WheelPos < 85) {}
strip retourneren Kleur (WheelPos * 3, 255 - WheelPos * 3, 0);
} else if(WheelPos < 170) {}
WheelPos-= 85;
strip retourneren Kleur (255 - WheelPos * 3, 0, WheelPos * 3);
} else {}
WheelPos-= 170;
strip retourneren Kleur (0, WheelPos * 3, 255 - WheelPos * 3);
}
}