Luta aktiverat moln ljus (9 / 12 steg)
Steg 9: Programmeringsdel 4: montering av programmet
Vi är nästan där!Det är lättare för mig att förklara vad som händer i programmet genom att kommentera på delar nedan.
Början av koden
#include < Adafruit_NeoPixel.h >
#define PIN 13 //identifies stift 13 anslutna till neopixels
CONST int wait_T = 40;
CONST int ACCEL_PIN = A0;
CONST int PixelCount = 29. / / jag har 29 neopixels
CONST int MAX_AREAD = 370 och Bull. / / Detta avsnitt fastställs högsta, minimum, median och medianvärdet fönster för programmet.
CONST int MIN_AREAD = 280;
CONST int MID_AREAD = 325;
CONST int MID_WINDOW = 10;
CONST int TILT_TIME = 10; sekunder / / hur lång tid behövs bo i fönstret för att välja ett nytt ljus mönster
CONST int Pixel_Start_End = 0; //Settings för random light mönster generator
CONST boolean UsingBar = false;
int random_pick = 0;
booleska pick_new_random = sant;
int accel_read = 0;
osignerade långa time_keeper = 0;
Adafruit_NeoPixel strip = Adafruit_NeoPixel (PixelCount, stift, NEO_GRB + NEO_KHZ800);
void setup() {
Serial.BEGIN(57600);
Strip.BEGIN(); / / Start Strip
Strip.show(); / / Initiera alla pixlar till "off"
pinMode (ACCEL_PIN, indata); / / Konfigurera Accelerometer analog läsa pin
randomSeed(analogRead(A3));
}
här är där åtgärd diagrammet är kodade:
void loop() {
Läsa värdet accelerometer
accel_read = analogRead(ACCEL_PIN);
Plocka en ny slumpmässig om det är dags att.
om (pick_new_random == true) {
random_pick = random(6);
pick_new_random = false;
}
När accelerometer värdet är innanför fönstret plockar den från följande funktioner
om ((accel_read > MID_AREAD - MID_WINDOW) & & (accel_read < MID_AREAD + MID_WINDOW)) {
om (random_pick == 0) {
ThunderAccel();
} annat if(random_pick == 1) {
PatternOne();
} annat if(random_pick == 2) {
PatternTwo();
} annat if(random_pick == 3) {
PatternThree();
} annat if(random_pick == 4) {
PatternFour();
} annat if(random_pick == 5) {
PatternFive();
} annat if(random_pick == 6) {
PatternSix();
}
} annat {
time_keeper = millis();
medan ((millis() - time_keeper) < TILT_TIME * 1000) {
color_tilt();
}
pick_new_random = sant;
}
}
annars kommer att koden göra följande vippande mönster
void setStripColor (int rött, grönt, int int blå) {
för (int jag = 0; jag < 29; i ++) {
strip.setPixelColor (i, röd, grön, blå);
}
Strip.show();
}
void color_tilt() {
int accel_value = analogRead(ACCEL_PIN);
accel_value = map(accel_value,MIN_AREAD,MAX_AREAD,0,255);
accel_value = constrain(accel_value,0,255);
för (int jag = 0; jag < strip.numPixels(); i ++) {
strip.setPixelColor (i, 255-accel_value, 0, accel_value);
Strip.show();
Delay(2);
}
}
Följande är alla lätta mönster funktioner
void PatternOne() {
CylonEyeUp (remsa. Color(255,255,255), band. Color(0,255,255), band. Color(255,255,255), wait_T, PixelCount, Pixel_Start_End);
Delay(wait_T);
Exempel: CylonEyeDown (Center_Dot_Color, Second_Dot_color, Third_Dot_color, wait_T, PixelCount, Pixel_Start_End);
CylonEyeDown (remsa. Color(255,255,255), band. Color(0,255,255), band. Color(255,255,255), wait_T, PixelCount, Pixel_Start_End);
Delay(wait_T);
}
void PatternTwo() {
för (int jag = 0; jag < 102; i ++) {
setStripColor (i, (204 - i * 2), 204);
Delay(20);
}
för (int jag = 0; jag < 102; i ++) {
setStripColor (102-i, (jag * 2), 204);
Delay(20);
}
}
void PatternThree() {
för (int jag = 0; jag < 255; i ++) {
setStripColor 255, i, 0.
Delay(20);
}
för (int jag = 255; jag > 0; i--) {
setStripColor 255, i, 0.
Delay(20);
}
Delay(1000);
}
void PatternFour() {
för (int jag = 0; jag < 127; i ++) {
setStripColor (255-i * 2, 255-i, 255);
Delay(20);
}
för (int jag = 0; jag < 127; i ++) {
setStripColor (i * 2, 127 + i, 255);
Delay(20);
}
Delay(2000);
}
void PatternFive() {
strip.setPixelColor (14, 255,255,255);
Delay(20);
strip.setPixelColor (15, 255,255,255);
Delay(20);
strip.setPixelColor (13, 255,255,255);
Delay(20);
strip.setPixelColor (16, 255,255,255);
Delay(20);
strip.setPixelColor (12, 255,255,255);
Delay(20);
strip.setPixelColor (17, 204,255,255);
Delay(20);
strip.setPixelColor (11, 204,255,255);
Delay(20);
strip.setPixelColor (18, 204,255,255);
Delay(20);
strip.setPixelColor (10, 204,255,255);
Delay(20);
strip.setPixelColor (19, 204,255,255);
Delay(20);
strip.setPixelColor (9, 204,255,255);
Delay(20);
strip.setPixelColor (20, 0,128,255);
Delay(20);
strip.setPixelColor (8, 0,128,255);
Delay(20);
strip.setPixelColor (21, 0,128,255);
Delay(20);
strip.setPixelColor (7, 0,128,255);
Delay(20);
strip.setPixelColor (22, 0,128,255);
Delay(20);
strip.setPixelColor (6, 0,128,255);
Delay(20);
strip.setPixelColor (23, 0,128,255);
Delay(20);
strip.setPixelColor (5, 0,128,255);
Delay(20);
strip.setPixelColor (24, 0,128,255);
Delay(20);
strip.setPixelColor (4, 0,128,255);
Delay(20);
strip.setPixelColor (25, 0,128,255);
Delay(20);
strip.setPixelColor (3, 0,128,255);
Delay(20);
strip.setPixelColor (26, 0,0,255);
Delay(20);
strip.setPixelColor (2, 0,0,255);
Delay(20);
strip.setPixelColor (27, 0,0,255);
Delay(20);
strip.setPixelColor (1, 0,0,255);
Delay(20);
strip.setPixelColor (28, 0,0,255);
Delay(20);
strip.setPixelColor (0, 0,0,255);
Delay(20);
strip.setPixelColor (29, 0,0,255);
Delay(20);
Strip.show();
}
void PatternSix() {
för (int jag = 0; jag < 255; i = i + 1) {
strip.setPixelColor (0, 0, i, 255-i);
strip.setPixelColor (1, 0, i, 255-i);
strip.setPixelColor (2, 0, i, 255-i);
strip.setPixelColor (3, 0, i, 255-i);
strip.setPixelColor (4, 0, i, 255-i);
strip.setPixelColor (5, 0, i, 255-i);
strip.setPixelColor (6, 0, i, 255-i);
strip.setPixelColor (8, 0, i, 255-i);
strip.setPixelColor (9, 0, i, 255-i);
strip.setPixelColor (10, 0, i, 255-i);
strip.setPixelColor (11, 0, i, 255-i);
strip.setPixelColor (12, 0, i, 255-i);
strip.setPixelColor (13, 0, i, 255-i);
strip.setPixelColor (14, 0, i, 255-i);
strip.setPixelColor (15, 0, i, 255-i);
strip.setPixelColor (16, 0, i, 255-i);
strip.setPixelColor (17, 0, i, 255-i);
strip.setPixelColor (18, 0, i, 255-i);
strip.setPixelColor (19, 0, i, 255-i);
strip.setPixelColor (20, 0, i, 255-i);
strip.setPixelColor (21, 0, i, 255-i);
strip.setPixelColor (22, 0, i, 255-i);
strip.setPixelColor (23, 0, i, 255-i);
strip.setPixelColor (24, 0, i, 255-i);
strip.setPixelColor (25, 0, i, 255-i);
strip.setPixelColor (26, 0, i, 255-i);
strip.setPixelColor (27, 0, i, 255-i);
strip.setPixelColor (28, 0, i, 255-i);
strip.setPixelColor (29, 0, i, 255-i);
Delay(10);
Strip.show();
}
för (int jag = 255; jag > 0; i = i-1) {
strip.setPixelColor (0, 0, i, 255-i);
strip.setPixelColor (1, 0, i, 255-i);
strip.setPixelColor (2, 0, i, 255-i);
strip.setPixelColor (3, 0, i, 255-i);
strip.setPixelColor (4, 0, i, 255-i);
strip.setPixelColor (5, 0, i, 255-i);
strip.setPixelColor (6, 0, i, 255-i);
strip.setPixelColor (8, 0, i, 255-i);
strip.setPixelColor (9, 0, i, 255-i);
strip.setPixelColor (10, 0, i, 255-i);
strip.setPixelColor (11, 0, i, 255-i);
strip.setPixelColor (12, 0, i, 255-i);
strip.setPixelColor (13, 0, i, 255-i);
strip.setPixelColor (14, 0, i, 255-i);
strip.setPixelColor (15, 0, i, 255-i);
strip.setPixelColor (16, 0, i, 255-i);
strip.setPixelColor (17, 0, i, 255-i);
strip.setPixelColor (18, 0, i, 255-i);
strip.setPixelColor (19, 0, i, 255-i);
strip.setPixelColor (20, 0, i, 255-i);
strip.setPixelColor (21, 0, i, 255-i);
strip.setPixelColor (22, 0, i, 255-i);
strip.setPixelColor (23, 0, i, 255-i);
strip.setPixelColor (24, 0, i, 255-i);
strip.setPixelColor (25, 0, i, 255-i);
strip.setPixelColor (26, 0, i, 255-i);
strip.setPixelColor (27, 0, i, 255-i);
strip.setPixelColor (28, 0, i, 255-i);
strip.setPixelColor (29, 0, i, 255-i);
Delay(10);
Strip.show();
}
}
void ThunderAccel() {
för (int jag = 0; jag < 29; i ++) {
strip.setPixelColor i, 255,255,255.
Strip.show();
}
Delay(200);
för (int jag = 0; jag < 29; i ++) {
strip.setPixelColor (i, 0,0,0);
Strip.show();
}
fördröjning (100);
för (int jag = 0; jag < 29; i ++) {
strip.setPixelColor i, 255,255,0.
Strip.show();
}
Delay(200);
för (int jag = 0; jag < 29; i ++) {
strip.setPixelColor (i, 0,0,0);
Strip.show();
}
Delay(50);
för (int jag = 0; jag < 29; i ++) {
strip.setPixelColor i, 255,255,0.
Strip.show();
}
Delay(40);
för (int jag = 0; jag < 29; i ++) {
strip.setPixelColor (i, 0,0,0);
Strip.show();
}
Delay(20);
för (int jag = 0; jag < 29; i ++) {
strip.setPixelColor i, 255,255,255.
Strip.show();
}
Delay(200);
för (int jag = 0; jag < 29; i ++) {
strip.setPixelColor (i, 0,0,0);
Strip.show();
}
Delay(1000);
för (int jag = 0; jag < 29; i ++) {
strip.setPixelColor i, 255,255,255.
Strip.show();
}
Delay(200);
för (int jag = 0; jag < 29; i ++) {
strip.setPixelColor (i, 0,0,0);
Strip.show();
}
fördröjning (100);
för (int jag = 0; jag < 29; i ++) {
strip.setPixelColor i, 255,255,0.
Strip.show();
}
Delay(100);
för (int jag = 0; jag < 29; i ++) {
strip.setPixelColor (i, 0,0,0);
Strip.show();
}
Delay(3000);
}
Lånat och anpassad från https://github.com/EternalCore/NeoPixel_Cylon_Scrolling_Eye/blob/master/NeoPixel_Cylon_Eye.ino
void CylonEyeUp (uint32_t Co, uint32_t Ct, uint32_t Ctt, uint8_t dröjsmål, int TotalPixels, int pStart) {
för (int jag = pStart; jag < TotalPixels; i ++) {
IF (!. UsingBar) {strip.setPixelColor (i + 2, Ctt);} //Third Dot färg
strip.setPixelColor (jag + 1, Ct); Andra Dot färg
strip.setPixelColor (i, Co); Center Dot färg
strip.setPixelColor (i-1, Ct); Andra Dot färg
IF (!. UsingBar) {strip.setPixelColor (i-2, Ctt);} //Third Dot färg
IF (!. UsingBar) {
strip.setPixelColor (i-3, strip. Color(0,0,0)); Rensar prickar efter den 3: e färgen
} annat {
strip.setPixelColor (i-2, strip. Color(0,0,0)); Rensar prickar efter 2rd färg
}
Strip.show();
Serial.println(i); Används till pixel Count-felsökning
Delay(delay);
}
}
void CylonEyeDown (uint32_t Co, uint32_t Ct, uint32_t Ctt, uint8_t dröjsmål, int TotalPixels, int pEnd) {
för (int jag = TotalPixels-1; jag > pEnd; i--) {
IF (!. UsingBar) {strip.setPixelColor (i-2, Ctt);} //Third Dot färg
strip.setPixelColor (i-1, Ct); Andra Dot färg
strip.setPixelColor (i, Co); Center Dot färg
strip.setPixelColor (jag + 1, Ct); Andra Dot färg
IF (!. UsingBar) {strip.setPixelColor (i + 2, Ctt);} //Third Dot färg
IF (!. UsingBar) {
strip.setPixelColor (i + 3, band. Color(0,0,0)); Rensar prickar efter den 3: e färgen
} annat {
strip.setPixelColor (i + 2, remsa. Color(0,0,0)); Rensar prickar efter 2rd färg
}
Strip.show();
Serial.println(i); Används till pixel Count-felsökning
Delay(delay);
}
}