#include #include #include #include #define Timer1 TimerB2 const uint16_t PixelCount = 7; static boolean writingBuffer = false; static struct {int LED; int redV; int greenV; int blueV;} tuple[100]; static int tupleCount = 0; static float ledDelay = 1000000; NeoPixelBus strip(PixelCount); RgbColor white(128); RgbColor black(0); static void addTuple(int LEDI, int redI, int greenI, int blueI) { tuple[tupleCount].LED = LEDI; tuple[tupleCount].redV = redI; tuple[tupleCount].greenV = greenI; tuple[tupleCount++].blueV = blueI; } static int index = 0; static float timePassed = 0; void receiveEvent() { char buf[16]; char* pch; int LEDNum, red, green, blue; int index = 0; strip.ClearTo(black); strip.Show(); while (0 < Serial.available()) { buf[index++] = Serial.read(); delay(3); } buf[index++] = 0; buf[strcspn(buf, "\n")] = 0; pch = strtok(buf, ":"); if (strcmp(pch, "LED") == 0) { pch = strtok(NULL, ":"); if (strcmp(pch, "Write") == 0) { writingBuffer = true; Serial.println("Writing Buffer"); } else if (writingBuffer) { if (strcmp(pch, "End") == 0) { writingBuffer = false; Serial.println("Writing End"); } else if (strcmp(pch, "Clear") == 0) { memset(&tuple, 0, sizeof(tuple)); Serial.println("Buffer Cleared"); } else if (strcmp(pch, "Show") == 0) { Serial.println("Show Strip Added"); addTuple(255, 0, 0, 0); } else { LEDNum = atoi(pch); red = atoi(strtok(NULL, ":")); green = atoi(strtok(NULL, ":")); blue = atoi(strtok(NULL, ":")); addTuple(LEDNum, red, green, blue); Serial.println("Writing Added"); } } } else if (strcmp(pch, "Hall") == 0) { ledDelay = atof(strtok(NULL, ":"))/18; index = 0; timePassed = 0; } } void timer(void) { if (timePassed >= ledDelay) { if (!writingBuffer & tupleCount > 0) { while (tuple[index].LED != 255 && index < tupleCount) { strip.SetPixelColor(tuple[index].LED, RgbColor(tuple[index].greenV, tuple[index].blueV , tuple[index].redV)); index++; } if (tuple[index].LED == 255) { strip.Show(); strip.ClearTo(black); index++; } if (index == tupleCount) { index = 0; } } timePassed = 0; } else { timePassed += 100; } } int main(void) { init(); strip.Begin(); strip.ClearTo(black); strip.Show(); Serial.begin(57600); Timer1.initialize(); Timer1.attachInterrupt(timer); Timer1.setPeriod(100); addTuple(0,255,0,0); addTuple(1,255,0,0); addTuple(2,255,0,0); addTuple(3,255,0,0); addTuple(4,255,0,0); addTuple(5,255,0,0); addTuple(6,255,0,0); addTuple(255,0,0,0); //Section 1 addTuple(3,255,0,0); addTuple(6,255,0,0); addTuple(255,0,0,0); //Section 1 addTuple(3,255,0,0); addTuple(6,255,0,0); addTuple(255,0,0,0); //Section 1 addTuple(255,0,0,0); //Section 1 addTuple(0,0,255,0); addTuple(255,0,0,0); //Section 1 addTuple(1,0,255,0); addTuple(255,0,0,0); //Section 1 addTuple(0,0,255,0); addTuple(1,0,255,0); addTuple(2,0,255,0); addTuple(3,0,255,0); addTuple(4,0,255,0); addTuple(5,0,255,0); addTuple(255,0,0,0); //Section 1 addTuple(3,0,255,0); addTuple(6,0,255,0); addTuple(255,0,0,0); //Section 1 addTuple(0,0,255,0); addTuple(1,0,255,0); addTuple(2,0,255,0); addTuple(3,0,255,0); addTuple(4,0,255,0); addTuple(5,0,255,0); addTuple(255,0,0,0); //Section 1 addTuple(255,0,0,0); //Section 1 addTuple(255,0,0,0); //Section 1 addTuple(255,0,0,0); //Section 1 addTuple(255,0,0,0); //Section 1 addTuple(255,0,0,0); //Section 1 addTuple(255,0,0,0); //Section 1 addTuple(255,0,0,0); //Section 1 addTuple(255,0,0,0); //Section 1 addTuple(255,0,0,0); //Section 1 addTuple(255,0,0,0); //Section 1 addTuple(255,0,0,0); //Section 1 addTuple(255,0,0,0); //Section 1 addTuple(255,0,0,0); //Section 1 addTuple(255,0,0,0); //Section 1 addTuple(255,0,0,0); //Section 1 addTuple(255,0,0,0); //Section 1 addTuple(255,0,0,0); //Section 1 addTuple(255,0,0,0); //Section 1 addTuple(255,0,0,0); //Section 1 addTuple(255,0,0,0); //Section 1 addTuple(255,0,0,0); //Section 1 addTuple(255,0,0,0); //Section 1 addTuple(255,0,0,0); //Section 1 addTuple(255,0,0,0); //Section 1 addTuple(255,0,0,0); //Section 1 addTuple(255,0,0,0); //Section 1 addTuple(255,0,0,0); //Section 1 // addTuple(255,0,0,0); //Section 1 // addTuple(255,0,0,0); //Section 2 // addTuple(0,255,0,0); // addTuple(0,255,0,0); // addTuple(0,255,0,0); // addTuple(0,255,0,0); // addTuple(0,255,0,0); // addTuple(0,255,0,0); // addTuple(255,0,0,0); //Section 3 // addTuple(0,0,0,255); // addTuple(1,0,0,255); // addTuple(2,0,0,255); // addTuple(255,0,0,0); //Section 4 // addTuple(255,0,0,0); //Section 5 // addTuple(2,0,255,0); // addTuple(3,0,255,0); // addTuple(4,0,255,0); // addTuple(255,0,0,0); //Section 6 // addTuple(2,0,255,0); // addTuple(3,0,255,0); // addTuple(4,0,255,0); // addTuple(255,0,0,0); //Section 7 // addTuple(2,0,255,0); // addTuple(3,0,255,0); // addTuple(4,0,255,0); // addTuple(255,0,0,0); //Section 8 // addTuple(2,0,255,0); // addTuple(3,0,255,0); // addTuple(4,0,255,0); // addTuple(255,0,0,0); //Section 9 // addTuple(2,0,255,0); // addTuple(3,0,255,0); // addTuple(4,0,255,0); // addTuple(255,0,0,0); //Section 10 // addTuple(2,0,255,0); // addTuple(3,0,255,0); // addTuple(4,0,255,0); // addTuple(255,0,0,0); //Section 11 // addTuple(2,0,255,0); // addTuple(3,0,255,0); // addTuple(4,0,255,0); // addTuple(255,0,0,0); //Section 12 // addTuple(255,0,0,0); //Section 13 // addTuple(255,0,0,0); //Section 14 // addTuple(0,0,0,255); // addTuple(1,0,0,255); // addTuple(2,0,0,255); // addTuple(255,0,0,0); //Section 15 // addTuple(0,0,0,255); // addTuple(1,0,0,255); // addTuple(2,0,0,255); // addTuple(255,0,0,0); //Section 16 // addTuple(255,0,0,0); //Section 17 // addTuple(255,0,0,0); //Section 18 // addTuple(1,255,0,0); // addTuple(2,255,0,0); // addTuple(3,255,0,0); // addTuple(6,255,0,0); // addTuple(255,0,0,0); //Section 1 // addTuple(0,255,0,0); // addTuple(1,255,0,0); // addTuple(2,255,0,0); // addTuple(5,255,0,0); // addTuple(6,255,0,0); // addTuple(255,0,0,0); //Section 2 // addTuple(0,255,0,0); // addTuple(1,255,0,0); // addTuple(2,255,0,0); // addTuple(3,255,0,0); // addTuple(6,255,0,0); // addTuple(255,0,0,0); //Section 1 // addTuple(0,255,0,0); // addTuple(1,255,0,0); // addTuple(2,255,0,0); // addTuple(5,255,0,0); // addTuple(6,255,0,0); // addTuple(255,0,0,0); //Section 2 // addTuple(0,255,0,0); // addTuple(1,255,0,0); // addTuple(2,255,0,0); // addTuple(5,255,0,0); // addTuple(6,255,0,0); // addTuple(255,0,0,0); //Section 3 // addTuple(255,0,0,0); //Section 4 // addTuple(1,0,0,255); // addTuple(4,0,0,255); // addTuple(5,0,0,255); // addTuple(6,0,0,255); // addTuple(255,0,0,0); //Section 5 // addTuple(0,0,0,255); // addTuple(1,0,0,255); // addTuple(2,0,0,255); // addTuple(3,0,0,255); // addTuple(4,0,0,255); // addTuple(5,0,0,255); // addTuple(6,0,0,255); // addTuple(255,0,0,0); //Section 6 // addTuple(0,0,0,255); // addTuple(1,0,0,255); // addTuple(2,0,0,255); // addTuple(3,0,0,255); // addTuple(6,0,0,255); // addTuple(255,0,0,0); //Section 7 // addTuple(0,0,0,255); // addTuple(1,0,0,255); // addTuple(2,0,0,255); // addTuple(3,0,0,255); // addTuple(5,0,0,255); // addTuple(6,0,0,255); // addTuple(255,0,0,0); //Section 8 // addTuple(0,0,0,255); // addTuple(1,0,0,255); // addTuple(5,0,0,255); // addTuple(6,0,0,255); // addTuple(255,0,0,0); //Section 9 // addTuple(255,0,0,0); //Section 10 // addTuple(1,0,255,0); // addTuple(3,0,255,0); // addTuple(4,0,255,0); // addTuple(5,0,255,0); // addTuple(6,0,255,0); // addTuple(255,0,0,0); //Section 11 // addTuple(0,0,255,0); // addTuple(1,0,255,0); // addTuple(2,0,255,0); // addTuple(3,0,255,0); // addTuple(4,0,255,0); // addTuple(5,0,255,0); // addTuple(6,0,255,0); // addTuple(255,0,0,0); //Section 12 // addTuple(0,0,255,0); // addTuple(1,0,255,0); // addTuple(2,0,255,0); // addTuple(3,0,255,0); // addTuple(6,0,255,0); // addTuple(255,0,0,0); //Section 13 // addTuple(0,0,255,0); // addTuple(1,0,255,0); // addTuple(2,0,255,0); // addTuple(3,0,255,0); // addTuple(5,0,255,0); // addTuple(6,0,255,0); // addTuple(255,0,0,0); //Section 14 // addTuple(0,0,255,0); // addTuple(1,0,255,0); // addTuple(5,0,255,0); // addTuple(6,0,255,0); // addTuple(255,0,0,0); //Section 15 // addTuple(255,0,0,0); //Section 16 // addTuple(1,255,0,0); // addTuple(4,255,0,0); // addTuple(5,255,0,0); // addTuple(6,255,0,0); // addTuple(255,0,0,0); //Section 17 // addTuple(0,255,0,0); // addTuple(1,255,0,0); // addTuple(2,255,0,0); // addTuple(3,255,0,0); // addTuple(4,255,0,0); // addTuple(5,255,0,0); // addTuple(6,255,0,0); // addTuple(255,0,0,0); //Section 18 while(1) { if (Serial.available() > 0) { receiveEvent(); } } }