#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h> // Required for 16 MHz Adafruit Trinket
#endif
#define PIN_NEO_PIXEL 8 // Arduino pin that connects to NeoPixel
#define NUM_PIXELS 9 // The number of LEDs (pixels) on NeoPixel
Adafruit_NeoPixel NeoPixel(NUM_PIXELS, PIN_NEO_PIXEL, NEO_GRB + NEO_KHZ800);
int delay1 = 1000;
int delay0 = 400;
int sensorValue;
int _pr = 255;
int _pg = 0;
int _pb = 0;
int _color = 1;
int DELAY_LINE = 500;
int _pn = 0;
void setup() {
// put your setup code here, to run once:
pinMode(4,INPUT_PULLUP);
pinMode(5,INPUT_PULLUP);
pinMode(LED_BUILTIN, OUTPUT);
NeoPixel.begin();
// Serial.begin(9600);
}
// NeoPixels
// 2 5 8
// 1 4 7
// 0 3 6
// 0 3 6 1 4 7 2 5 8
int np1[3][9] = { {1, 1, 1, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 2, 2, 2, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 3, 3, 3} };
int np2[5][9] = { {0, 0, 1, 0, 0, 0, 0, 0, 0},
{0, 1, 0, 0, 0, 2, 0, 0, 0},
{1, 0, 0, 0, 2, 0, 0, 0, 3},
{0, 0, 0, 2, 0, 0, 0, 3, 0},
{0, 0, 0, 0, 0, 0, 3, 0, 0} };
// 0 3 6 1 4 7 2 5 8
int np3[3][9] = { {0, 0, 1, 0, 0, 2, 0, 0, 3},
{0, 1, 0, 0, 2, 0, 0, 3, 0},
{1, 0, 0, 2, 0, 0, 3, 0, 0} };
int np4[5][9] = { {0, 0, 0, 0, 0, 0, 1, 0, 0},
{0, 0, 0, 2, 0, 0, 0, 3, 0},
{1, 0, 0, 0, 2, 0, 0, 0, 3},
{0, 1, 0, 0, 0, 2, 0, 0, 0},
{0, 0, 1, 0, 0, 0, 0, 0, 0} };
void pixel_on(int _neo, int _col) {
switch (_col) {
case 1: NeoPixel.setPixelColor(_neo, NeoPixel.Color(255, 0, 0)); break;
case 2: NeoPixel.setPixelColor(_neo, NeoPixel.Color(0, 255, 0)); break;
case 3: NeoPixel.setPixelColor(_neo, NeoPixel.Color(0, 0, 255)); break;
}
NeoPixel.show();
}
void pixel_off(int _neo_off) {
if (_neo_off == 9) {
for (int _pixel = 0; _pixel <= 8; _pixel++) {
NeoPixel.setPixelColor(_pixel, NeoPixel.Color(0, 0, 0));
NeoPixel.show();
}
}
else {
NeoPixel.setPixelColor(_neo_off, NeoPixel.Color(0, 0, 0));
NeoPixel.show();
}
}
void thebeat0() {
digitalWrite(LED_BUILTIN, HIGH);
do {
NeoPixel.setPixelColor(3, NeoPixel.Color(_pr, _pg, _pb)); NeoPixel.show(); delay(delay0);
pixel_off(9);
NeoPixel.setPixelColor(0, NeoPixel.Color(_pr, _pg, _pb)); NeoPixel.show(); //delay(delay0);
NeoPixel.setPixelColor(4, NeoPixel.Color(_pr, _pg, _pb)); NeoPixel.show(); //delay(delay0);
NeoPixel.setPixelColor(6, NeoPixel.Color(_pr, _pg, _pb)); NeoPixel.show(); delay(delay0);
pixel_off(9);
NeoPixel.setPixelColor(0, NeoPixel.Color(_pr, _pg, _pb)); NeoPixel.show(); //delay(delay0);
NeoPixel.setPixelColor(6, NeoPixel.Color(_pr, _pg, _pb)); NeoPixel.show(); //delay(delay0);
NeoPixel.setPixelColor(1, NeoPixel.Color(_pr, _pg, _pb)); NeoPixel.show(); //delay(delay0);
NeoPixel.setPixelColor(7, NeoPixel.Color(_pr, _pg, _pb)); NeoPixel.show(); //delay(delay0);
NeoPixel.setPixelColor(5, NeoPixel.Color(_pr, _pg, _pb)); NeoPixel.show(); delay(delay0);
pixel_off(9);
NeoPixel.setPixelColor(0, NeoPixel.Color(_pr, _pg, _pb)); NeoPixel.show(); //delay(delay0);
NeoPixel.setPixelColor(4, NeoPixel.Color(_pr, _pg, _pb)); NeoPixel.show(); //delay(delay0);
NeoPixel.setPixelColor(6, NeoPixel.Color(_pr, _pg, _pb)); NeoPixel.show(); delay(delay0);
pixel_off(9);
NeoPixel.setPixelColor(3, NeoPixel.Color(_pr, _pg, _pb)); NeoPixel.show(); delay(delay0);
pixel_off(9);
sensorValue = digitalRead(4);
switch (_color) {
case 1:
_pr = 255;
_pg = 255;
_pb = 0;
_color = 2;
break;
case 2:
_pr = 0;
_pg = 255;
_pb = 0;
_color = 3;
break;
case 3:
_pr = 255;
_pg = 165;
_pb = 0;
_color = 4;
break;
case 4:
_pr = 0;
_pg = 0;
_pb = 255;
_color = 5;
break;
case 5:
_pr = 255;
_pg = 0;
_pb = 0;
_color = 1;
break;
}
} while (sensorValue == 1);
}
void read_button() {
if (digitalRead(5) == LOW) {
++_pn;
if (_pn >=5) {
_pn = 0;
}
// Serial.println(_pn);
}
}
void loop() {
// main code here, to run repeatedly:
if (_pn == 1 || _pn == 0) { // pattern 1
for (int i = 0; i <= 2; ++i) {
pixel_on(0, np1[i][0]); pixel_on(3, np1[i][1]); pixel_on(6, np1[i][2]);
pixel_on(1, np1[i][3]); pixel_on(4, np1[i][4]); pixel_on(7, np1[i][5]);
pixel_on(2, np1[i][6]); pixel_on(5, np1[i][7]); pixel_on(8, np1[i][8]);
read_button();
delay(DELAY_LINE);
pixel_off(9);
sensorValue = digitalRead(4); if (sensorValue == 1) { thebeat0(); }
}
}
if (_pn == 2 || _pn == 0) { // pattern 2
for (int i = 0; i <= 4; ++i) {
pixel_on(0, np2[i][0]); pixel_on(3, np2[i][1]); pixel_on(6, np2[i][2]);
pixel_on(1, np2[i][3]); pixel_on(4, np2[i][4]); pixel_on(7, np2[i][5]);
pixel_on(2, np2[i][6]); pixel_on(5, np2[i][7]); pixel_on(8, np2[i][8]);
read_button();
delay(DELAY_LINE);
pixel_off(9);
sensorValue = digitalRead(4); if (sensorValue == 1) { thebeat0(); }
}
}
if (_pn == 3 || _pn == 0) { // pattern 3
for (int i = 0; i <= 2; ++i) {
pixel_on(0, np3[i][0]); pixel_on(3, np3[i][1]); pixel_on(6, np3[i][2]);
pixel_on(1, np3[i][3]); pixel_on(4, np3[i][4]); pixel_on(7, np3[i][5]);
pixel_on(2, np3[i][6]); pixel_on(5, np3[i][7]); pixel_on(8, np3[i][8]);
read_button();
delay(DELAY_LINE);
pixel_off(9);
sensorValue = digitalRead(4); if (sensorValue == 1) { thebeat0(); }
}
}
if (_pn == 4 || _pn == 0) { // pattern 4
for (int i = 0; i <= 4; ++i) {
pixel_on(0, np4[i][0]); pixel_on(3, np4[i][1]); pixel_on(6, np4[i][2]);
pixel_on(1, np4[i][3]); pixel_on(4, np4[i][4]); pixel_on(7, np4[i][5]);
pixel_on(2, np4[i][6]); pixel_on(5, np4[i][7]); pixel_on(8, np4[i][8]);
read_button();
delay(DELAY_LINE);
pixel_off(9);
sensorValue = digitalRead(4); if (sensorValue == 1) { thebeat0(); }
}
}
}