Paso 9: Programación parte 4: ensamblar el programa
Estamos casi allí!Es más fácil para mí explicar lo que está pasando en el programa comentando porciones más abajo.
Principios del código
#include < Adafruit_NeoPixel.h >
#define 13 PIN //identifies pin 13 conectado a la neopixels
const int wait_T = 40;
const int ACCEL_PIN = A0;
const int PixelCount = 29; / / Tengo 29 neopixels
const int MAX_AREAD = 370; / / Esta sección establece el máximo, mínimo, mediana y media ventana para el programa.
const int MIN_AREAD = 280;
const int MID_AREAD = 325;
const int MID_WINDOW = 10;
const int TILT_TIME = 10; en segundos / / la cantidad de tiempo necesario para quedarse en la ventana para elegir un nuevo patrón de luz
const int Pixel_Start_End = 0; //Settings para el generador de patrones de luz al azar
const tipo boolean UsingBar = false;
int random_pick = 0;
Boolean pick_new_random = true;
int accel_read = 0;
time_keeper largo sin signo = 0;
Tira de Adafruit_NeoPixel = Adafruit_NeoPixel (PixelCount, PIN, NEO_GRB + NEO_KHZ800);
void setup() {}
Serial.Begin(57600);
Strip.Begin(); / / Tira de arranque
Strip.Show(); / / Inicializar todos los píxeles en 'off'
pinMode (ACCEL_PIN, entrada); / Analógico configurar acelerometro leer pin
randomSeed(analogRead(A3));
}
Aquí es donde se codifica el gráfico de la acción:
void loop() {}
/ / Lee el valor del acelerómetro
accel_read = analogRead(ACCEL_PIN);
/ / La selección de una nueva al azar si es el momento de.
Si (pick_new_random == true) {}
random_pick = random(6);
pick_new_random = false;
}
Cuando el valor del acelerómetro es dentro de la ventana escoge de las siguientes funciones
Si ((accel_read > MID_AREAD - MID_WINDOW) & & (accel_read < MID_AREAD + MID_WINDOW)) {}
Si (random_pick == 0) {}
ThunderAccel();
} else if(random_pick == 1) {}
PatternOne();
} else if(random_pick == 2) {}
PatternTwo();
} else if(random_pick == 3) {}
PatternThree();
} else if(random_pick == 4) {}
PatternFour();
} else if(random_pick == 5) {}
PatternFive();
} else if(random_pick == 6) {}
PatternSix();
}
} else {}
time_keeper = millis();
mientras que ((millis() - time_keeper) < TILT_TIME * 1000) {}
color_tilt();
}
pick_new_random = true;
}
}
de lo contrario el código hará el siguiente patrón de inclinación
{} void setStripColor (int rojo, int verde, int azul)
para (int i = 0; i < 29; i ++) {}
strip.setPixelColor (i, rojo, verde, azul);
}
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);
para (int i = 0; i < strip.numPixels(); i ++) {}
strip.setPixelColor (i, 255-accel_value, 0, accel_value);
Strip.Show();
Delay(2);
}
}
las siguientes son todas las funciones de patrón de luz
void PatternOne() {}
CylonEyeUp (de la tira. Color(255,255,255), tira. Color(0,255,255), tira. Color(255,255,255), wait_T, PixelCount, Pixel_Start_End);
Delay(wait_T);
Ejemplo: CylonEyeDown (Center_Dot_Color, Second_Dot_color, Third_Dot_color, wait_T, PixelCount, Pixel_Start_End);
CylonEyeDown (de la tira. Color(255,255,255), tira. Color(0,255,255), tira. Color(255,255,255), wait_T, PixelCount, Pixel_Start_End);
Delay(wait_T);
}
void PatternTwo() {}
para (int i = 0; i < 102; i ++) {}
setStripColor (i, (204 - i * 2), 204);
Delay(20);
}
para (int i = 0; i < 102; i ++) {}
setStripColor (102-i, (i * 2), 204);
Delay(20);
}
}
void PatternThree() {}
para (int i = 0; i < 255; i ++) {}
setStripColor (255, i, 0);
Delay(20);
}
para (int i = 255; i > 0; i--) {}
setStripColor (255, i, 0);
Delay(20);
}
Delay(1000);
}
void PatternFour() {}
para (int i = 0; i < 127; i ++) {}
setStripColor (255-i * 2, 255-i, 255);
Delay(20);
}
para (int i = 0; i < 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() {}
para (int i = 0; i < 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();
}
para (int i = 255; i > 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() {}
para (int i = 0; i < 29; i ++) {}
strip.setPixelColor (i, 255,255,255);
Strip.Show();
}
Delay(200);
para (int i = 0; i < 29; i ++) {}
strip.setPixelColor (i, 0,0,0);
Strip.Show();
}
Delay (100);
para (int i = 0; i < 29; i ++) {}
strip.setPixelColor (i, 255,255,0);
Strip.Show();
}
Delay(200);
para (int i = 0; i < 29; i ++) {}
strip.setPixelColor (i, 0,0,0);
Strip.Show();
}
Delay(50);
para (int i = 0; i < 29; i ++) {}
strip.setPixelColor (i, 255,255,0);
Strip.Show();
}
Delay(40);
para (int i = 0; i < 29; i ++) {}
strip.setPixelColor (i, 0,0,0);
Strip.Show();
}
Delay(20);
para (int i = 0; i < 29; i ++) {}
strip.setPixelColor (i, 255,255,255);
Strip.Show();
}
Delay(200);
para (int i = 0; i < 29; i ++) {}
strip.setPixelColor (i, 0,0,0);
Strip.Show();
}
Delay(1000);
para (int i = 0; i < 29; i ++) {}
strip.setPixelColor (i, 255,255,255);
Strip.Show();
}
Delay(200);
para (int i = 0; i < 29; i ++) {}
strip.setPixelColor (i, 0,0,0);
Strip.Show();
}
Delay (100);
para (int i = 0; i < 29; i ++) {}
strip.setPixelColor (i, 255,255,0);
Strip.Show();
}
Delay(100);
para (int i = 0; i < 29; i ++) {}
strip.setPixelColor (i, 0,0,0);
Strip.Show();
}
Delay(3000);
}
Tomado y adaptado de https://github.com/EternalCore/NeoPixel_Cylon_Scrolling_Eye/blob/master/NeoPixel_Cylon_Eye.ino
void CylonEyeUp (uint32_t Co Ct de uint32_t uint32_t Ctt, uint8_t demora, int TotalPixels, int pStart) {}
para (int i = pStart; i < TotalPixels; i ++) {}
if (!. UsingBar) {strip.setPixelColor (i + 2, Ctt);} //Third punto Color
strip.setPixelColor (i + 1, Ct); Segundo punto Color
strip.setPixelColor (i, Co); Centro punto Color
strip.setPixelColor (i-1, Ct); Segundo punto Color
if (!. UsingBar) {strip.setPixelColor (i-2, Ctt);} //Third punto Color
if (!. UsingBar) {}
strip.setPixelColor (i-3, tira. Color(0,0,0)); Borra los puntos después del color 3
} else {}
strip.setPixelColor (i-2, tira. Color(0,0,0)); Borra los puntos después del 2 º color
}
Strip.Show();
Serial.println(i); Utilizado para pixel cuenta depuración
Delay(Delay);
}
}
void CylonEyeDown (uint32_t Co Ct de uint32_t uint32_t Ctt, uint8_t demora, int TotalPixels, int pEnd) {}
para (int i = TotalPixels-1; i > pEnd; i--) {}
if (!. UsingBar) {strip.setPixelColor (i-2, Ctt);} //Third punto Color
strip.setPixelColor (i-1, Ct); Segundo punto Color
strip.setPixelColor (i, Co); Centro punto Color
strip.setPixelColor (i + 1, Ct); Segundo punto Color
if (!. UsingBar) {strip.setPixelColor (i + 2, Ctt);} //Third punto Color
if (!. UsingBar) {}
strip.setPixelColor (+ 3, de la tira. Color(0,0,0)); Borra los puntos después del color 3
} else {}
strip.setPixelColor (+ 2, de la tira. Color(0,0,0)); Borra los puntos después del 2 º color
}
Strip.Show();
Serial.println(i); Utilizado para pixel cuenta depuración
Delay(Delay);
}
}