We have the final(ish) code ready for the prototypes that people will be able to make from our kits.
// Accessible Pixel version 1 // APvl.ino // designed by AccessiblePixel.com //Include Libraries #include <Adafruit_NeoPixel.h> #include <Keypad.h> #ifdef __AVR__ #include <avr/power.h> #endif // Initialise Variables #define PIN 9 // PIN for LED Strip volatile int frame=0; volatile int backcolorframe=0; volatile int r = 0; volatile int g = 0; volatile int b = 0; volatile int brightred = 0; volatile int brightgreen = 0; volatile int brightblue = 0; volatile int brightcolor = 0; volatile int up = 0; volatile int rainbowi = 0; volatile int rainboww = 0; volatile int circleanimation = 0; // Initialise Pixels Adafruit_NeoPixel strip = Adafruit_NeoPixel(16, PIN, NEO_GRB + NEO_KHZ800); // Setup Keypad const byte ROWS = 4; // Four rows const byte COLS = 3; // Three columns // Define the Keymap char keys[ROWS][COLS] = { {'1','2','3'}, {'4','5','6'}, {'7','8','9'}, {'*','0','#'} }; // Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins. byte rowPins[ROWS] = { 8, 7, 6, 5 }; // Connect keypad COL0, COL1 and COL2 to these Arduino pins. byte colPins[COLS] = { 4, 3, 2 }; // Create the Keypad Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); // Main Setup Loop (Run Once At Start Up) void setup() { // Initialize Pixels strip.begin(); strip.setBrightness(135); strip.setPixelColor(0,50,50,50); strip.setPixelColor(1,0,0,0); strip.setPixelColor(2,50,50,50); strip.setPixelColor(3,0,0,0); strip.setPixelColor(4,50,50,50); strip.setPixelColor(5,0,0,0); strip.setPixelColor(6,50,50,50); strip.setPixelColor(7,0,0,0); strip.setPixelColor(8,50,50,50); strip.setPixelColor(9,0,0,0); strip.setPixelColor(10,50,50,50); strip.setPixelColor(11,0,0,0); strip.setPixelColor(12,50,50,50); strip.setPixelColor(13,0,0,0); strip.setPixelColor(14,50,50,50); strip.setPixelColor(15,0,0,0); strip.show(); // Setup Interrupt at 32hz // Stop Interrupts cli(); // Clear Timer Register TCCR1A = 0;// Set entire TCCR1A register to 0 TCCR1B = 0;// Same for TCCR1B TCNT1 = 0;// Initialize counter value to 0 // set compare match register for 32hz increments OCR1A = 488;// = (16*10^6) / (32*1024) - 1 (must be <65536) // turn on CTC mode TCCR1B |= (1 << WGM12); // Set CS10 and CS12 bits for 1024 prescaler TCCR1B |= (1 << CS12) | (1 << CS10); // enable timer compare interrupt TIMSK1 |= (1 << OCIE1A); // Allow Interrupts sei(); }//end setup loop // Function Declarations //Initialize Reset Function void(* resetFunc) (void) = 0; //declare reset function @ address 0 uint32_t wheelz(byte WheelPos) { WheelPos = 255 - WheelPos; if(WheelPos < 85) { return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3); } if(WheelPos < 170) { WheelPos -= 85; return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3); } WheelPos -= 170; return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0); } void colorWipe(uint32_t c, uint8_t wait) { for(uint16_t i=0; i<strip.numPixels(); i++) { strip.setPixelColor(i, c); strip.show(); delay(wait); } } // Run Animation Frames ISR(TIMER1_COMPA_vect){ if(frame==1){ strip.setPixelColor(0,135,0,0); strip.show(); frame++; } else if(frame==2) { strip.setPixelColor(1,135,0,0); strip.show(); frame++; } else if(frame==3) { strip.setPixelColor(2,135,0,0); strip.show(); frame++; } else if(frame==4) { strip.setPixelColor(3,135,0,0); strip.show(); frame++; } else if(frame==5) { strip.setPixelColor(4,135,0,0); strip.show(); frame++; } else if(frame==6) { strip.setPixelColor(5,135,0,0); delay(50); strip.show(); frame++; } else if(frame==7) { strip.setPixelColor(6,135,0,0); strip.show(); frame++; } else if(frame==8) { strip.setPixelColor(7,135,0,0); strip.show(); frame++; } else if(frame==9) { strip.setPixelColor(8,135,0,0); strip.show(); frame++; } else if(frame==10) { strip.setPixelColor(9,135,0,0); strip.show(); frame++; } else if(frame==11) { strip.setPixelColor(10,135,0,0); strip.show(); frame++; } else if(frame==12) { strip.setPixelColor(11,135,0,0); strip.show(); frame++; } else if(frame==13) { strip.setPixelColor(12,135,0,0); strip.show(); frame++; } else if(frame==14) { strip.setPixelColor(13,135,0,0); strip.show(); frame++; } else if(frame==15) { strip.setPixelColor(14,135,0,0); strip.show(); frame++; } else if(frame==16) { strip.setPixelColor(15,135,0,0); strip.show(); frame = 38; } // RESET ANIMATION else if(frame==17){ strip.setPixelColor(15,0,0,0); strip.show(); frame++; } else if(frame==18) { strip.setPixelColor(14,0,0,0); strip.show(); frame++; } else if(frame==19) { strip.setPixelColor(13,0,0,0); strip.show(); frame++; } else if(frame==20) { strip.setPixelColor(12,0,0,0); strip.show(); frame++; } else if(frame==21) { strip.setPixelColor(11,0,0,0); strip.show(); frame++; } else if(frame==22) { strip.setPixelColor(10,0,0,0); strip.show(); frame++; } else if(frame==23) { strip.setPixelColor(9,0,0,0); strip.show(); frame++; } else if(frame==24) { strip.setPixelColor(8,0,0,0); delay(50); strip.show(); frame++; } else if(frame==25) { strip.setPixelColor(7,0,0,0); strip.show(); frame++; } else if(frame==26) { strip.setPixelColor(6,0,0,0); strip.show(); frame++; } else if(frame==27) { strip.setPixelColor(5,0,0,0); strip.show(); frame++; } else if(frame==28) { strip.setPixelColor(4,0,0,0); strip.show(); frame++; } else if(frame==29) { strip.setPixelColor(3,0,0,0); strip.show(); frame++; } else if(frame==30) { strip.setPixelColor(2,0,0,0); strip.show(); frame++; } else if(frame==31) { strip.setPixelColor(1,0,0,0); strip.show(); frame++; } else if(frame==32) { strip.setPixelColor(0,0,0,0); strip.show(); } else if(frame==33) { strip.setPixelColor(random(0,15),random(0,135),random(0,135),random(0,135)); strip.setPixelColor(random(0,15),0,0,0,0); strip.show(); } else if(frame==34){strip.setPixelColor(0,0,0,0); strip.setPixelColor(1,0,0,0); strip.setPixelColor(2,0,0,0); strip.setPixelColor(3,0,0,0); strip.setPixelColor(4,0,0,0); strip.setPixelColor(5,0,0,0); strip.setPixelColor(6,0,0,0); strip.setPixelColor(7,0,0,0); strip.setPixelColor(8,0,0,0); strip.setPixelColor(9,0,0,0); strip.setPixelColor(10,0,0,0); strip.setPixelColor(11,0,0,0); strip.setPixelColor(12,0,0,0); strip.setPixelColor(13,0,0,0); strip.setPixelColor(14,0,0,0); strip.setPixelColor(15,0,0,0); strip.show(); } else if(frame==35){ strip.setPixelColor(0,brightred,brightgreen,brightblue); strip.setPixelColor(1,brightred,brightgreen,brightblue); strip.setPixelColor(2,brightred,brightgreen,brightblue); strip.setPixelColor(3,brightred,brightgreen,brightblue); strip.setPixelColor(4,brightred,brightgreen,brightblue); strip.setPixelColor(5,brightred,brightgreen,brightblue); strip.setPixelColor(6,brightred,brightgreen,brightblue); strip.setPixelColor(7,brightred,brightgreen,brightblue); strip.setPixelColor(8,brightred,brightgreen,brightblue); strip.setPixelColor(9,brightred,brightgreen,brightblue); strip.setPixelColor(10,brightred,brightgreen,brightblue); strip.setPixelColor(11,brightred,brightgreen,brightblue); strip.setPixelColor(12,brightred,brightgreen,brightblue); strip.setPixelColor(13,brightred,brightgreen,brightblue); strip.setPixelColor(14,brightred,brightgreen,brightblue); strip.setPixelColor(15,brightred,brightgreen,brightblue); strip.show(); if (brightcolor==0) { if (up == 0) { if (brightred < 135) { brightred++; } else if (brightred == 135) { brightred=135; up = 1; } } else if(up == 1) { if(brightred > 0) { brightred--; } else if (brightred == 0) { up = 0;brightcolor++; } } } else if (brightcolor==1) { if (up == 0) { if (brightgreen < 135) { brightgreen++; } else if (brightgreen == 135) { brightgreen=135; up = 1; } } else if(up == 1) { if(brightgreen > 0) { brightgreen--; } else if (brightgreen == 0) { up = 0;brightcolor++; } } } else if (brightcolor==2) { if (up == 0) { if (brightblue < 135) { brightblue++; } else if (brightblue == 135) { brightblue=135; up = 1; } } else if(up == 1) { if(brightblue > 0) { brightblue--; } else if (brightblue == 0) { up = 0;brightcolor=0; } } } } else if(frame==36){ strip.setPixelColor(rainbowi, wheelz((rainbowi+rainboww) & 255)); strip.show(); if (rainbowi < 15 ) { rainbowi++; } else if (rainbowi == 15) { rainbowi = 0; } if (rainboww < 255 ) {rainboww++; } if (rainboww == 255) {rainboww =0; } } else if(frame==37){frame=0;} if(frame==38){ strip.setPixelColor(0,0,0,135); strip.show(); frame++; } else if(frame==39) { strip.setPixelColor(1,0,0,135); strip.show(); frame++; } else if(frame==40) { strip.setPixelColor(2,0,0,135); strip.show(); frame++; } else if(frame==41) { strip.setPixelColor(3,0,0,135); strip.show(); frame++; } else if(frame==42) { strip.setPixelColor(4,0,0,135); strip.show(); frame++; } else if(frame==43) { strip.setPixelColor(5,0,0,135); strip.show(); frame++; } else if(frame==44) { strip.setPixelColor(6,0,0,135); strip.show(); frame++; } else if(frame==45) { strip.setPixelColor(7,0,0,135); strip.show(); frame++; } else if(frame==46) { strip.setPixelColor(8,0,0,135); strip.show(); frame++; } else if(frame==47) { strip.setPixelColor(9,0,0,135); strip.show(); frame++; } else if(frame==48) { strip.setPixelColor(10,0,0,135); strip.show(); frame++; } else if(frame==49) { strip.setPixelColor(11,0,0,135); strip.show(); frame++; } else if(frame==50) { strip.setPixelColor(12,0,0,135); strip.show(); frame++; } else if(frame==51) { strip.setPixelColor(13,0,0,135); strip.show(); frame++; } else if(frame==52) { strip.setPixelColor(14,0,0,135); strip.show(); frame++; } else if(frame==53) { strip.setPixelColor(15,0,0,135); strip.show(); frame++; } if(frame==54){ strip.setPixelColor(0,0,135,0); strip.show(); frame++; } else if(frame==55) { strip.setPixelColor(1,0,135,0); strip.show(); frame++; } else if(frame==56) { strip.setPixelColor(2,0,135,0); strip.show(); frame++; } else if(frame==57) { strip.setPixelColor(3,0,135,0); strip.show(); frame++; } else if(frame==58) { strip.setPixelColor(4,0,135,0); strip.show(); frame++; } else if(frame==59) { strip.setPixelColor(5,0,135,0); delay(50); strip.show(); frame++; } else if(frame==60) { strip.setPixelColor(6,0,135,0); strip.show(); frame++; } else if(frame==61) { strip.setPixelColor(7,0,135,0); strip.show(); frame++; } else if(frame==62) { strip.setPixelColor(8,0,135,0); strip.show(); frame++; } else if(frame==63) { strip.setPixelColor(9,0,135,0); strip.show(); frame++; } else if(frame==64) { strip.setPixelColor(10,0,135,0); strip.show(); frame++; } else if(frame==65) { strip.setPixelColor(11,0,135,0); strip.show(); frame++; } else if(frame==66) { strip.setPixelColor(12,0,135,0); strip.show(); frame++; } else if(frame==67) { strip.setPixelColor(13,0,135,0); strip.show(); frame++; } else if(frame==68) { strip.setPixelColor(14,0,135,0); strip.show(); frame++; } else if(frame==69) { strip.setPixelColor(15,0,135,0); strip.show(); frame = 1; } else if(frame==70) { strip.setPixelColor(0,50,50,50); strip.setPixelColor(1,0,0,0); strip.setPixelColor(2,50,50,50); strip.setPixelColor(3,0,0,0); strip.setPixelColor(4,50,50,50); strip.setPixelColor(5,0,0,0); strip.setPixelColor(6,50,50,50); strip.setPixelColor(7,0,0,0); strip.setPixelColor(8,50,50,50); strip.setPixelColor(9,0,0,0); strip.setPixelColor(10,50,50,50); strip.setPixelColor(11,0,0,0); strip.setPixelColor(12,50,50,50); strip.setPixelColor(13,0,0,0); strip.setPixelColor(14,50,50,50); strip.setPixelColor(15,0,0,0); strip.show(); } else if(frame==71) { strip.setPixelColor(0,135,0,0); strip.setPixelColor(1,135,0,0); strip.setPixelColor(2,135,0,0); strip.setPixelColor(3,135,0,0); strip.setPixelColor(4,135,0,0); strip.setPixelColor(5,135,0,0); strip.setPixelColor(6,135,0,0); strip.setPixelColor(7,135,0,0); strip.setPixelColor(8,135,0,0); strip.setPixelColor(9,135,0,0); strip.setPixelColor(10,135,0,0); strip.setPixelColor(11,135,0,0); strip.setPixelColor(12,135,0,0); strip.setPixelColor(13,135,0,0); strip.setPixelColor(14,135,0,0); strip.setPixelColor(15,135,0,0); strip.show(); } else if(frame==72) { strip.setPixelColor(0,0,135,0); strip.setPixelColor(1,0,135,0); strip.setPixelColor(2,0,135,0); strip.setPixelColor(3,0,135,0); strip.setPixelColor(4,0,135,0); strip.setPixelColor(5,0,135,0); strip.setPixelColor(6,0,135,0); strip.setPixelColor(7,0,135,0); strip.setPixelColor(8,0,135,0); strip.setPixelColor(9,0,135,0); strip.setPixelColor(10,0,135,0); strip.setPixelColor(11,0,135,0); strip.setPixelColor(12,0,135,0); strip.setPixelColor(13,0,135,0); strip.setPixelColor(14,0,135,0); strip.setPixelColor(15,0,135,0); strip.show(); } else if(frame==73) { strip.setPixelColor(0,0,0,135); strip.setPixelColor(1,0,0,135); strip.setPixelColor(2,0,0,135); strip.setPixelColor(3,0,0,135); strip.setPixelColor(4,0,0,135); strip.setPixelColor(5,0,0,135); strip.setPixelColor(6,0,0,135); strip.setPixelColor(7,0,0,135); strip.setPixelColor(8,0,0,135); strip.setPixelColor(9,0,0,135); strip.setPixelColor(10,0,0,135); strip.setPixelColor(11,0,0,135); strip.setPixelColor(12,0,0,135); strip.setPixelColor(13,0,0,135); strip.setPixelColor(14,0,0,135); strip.setPixelColor(15,0,0,135); strip.show(); } else if(frame==74) { strip.setPixelColor(0,0,68,68); strip.setPixelColor(1,0,68,68); strip.setPixelColor(2,0,68,68); strip.setPixelColor(3,0,68,68); strip.setPixelColor(4,0,68,68); strip.setPixelColor(5,0,68,68); strip.setPixelColor(6,0,68,68); strip.setPixelColor(7,0,68,68); strip.setPixelColor(8,0,68,68); strip.setPixelColor(9,0,68,68); strip.setPixelColor(10,0,68,68); strip.setPixelColor(11,0,68,68); strip.setPixelColor(12,0,68,68); strip.setPixelColor(13,0,68,68); strip.setPixelColor(14,0,68,68); strip.setPixelColor(15,0,68,68); strip.show(); } else if(frame==75) { strip.setPixelColor(0,68,0,68); strip.setPixelColor(1,68,0,68); strip.setPixelColor(2,68,0,68); strip.setPixelColor(3,68,0,68); strip.setPixelColor(4,68,0,68); strip.setPixelColor(5,68,0,68); strip.setPixelColor(6,68,0,68); strip.setPixelColor(7,68,0,68); strip.setPixelColor(8,68,0,68); strip.setPixelColor(9,68,0,68); strip.setPixelColor(10,68,0,68); strip.setPixelColor(11,68,0,68); strip.setPixelColor(12,68,0,68); strip.setPixelColor(13,68,0,68); strip.setPixelColor(14,68,0,68); strip.setPixelColor(15,68,0,68); strip.show(); } else if(frame==76) { strip.setPixelColor(0,68,68,0); strip.setPixelColor(1,68,68,0); strip.setPixelColor(2,68,68,0); strip.setPixelColor(3,68,68,0); strip.setPixelColor(4,68,68,0); strip.setPixelColor(5,68,68,0); strip.setPixelColor(6,68,68,0); strip.setPixelColor(7,68,68,0); strip.setPixelColor(8,68,68,0); strip.setPixelColor(9,68,68,0); strip.setPixelColor(10,68,68,0); strip.setPixelColor(11,68,68,0); strip.setPixelColor(12,68,68,0); strip.setPixelColor(13,68,68,0); strip.setPixelColor(14,68,68,0); strip.setPixelColor(15,68,68,0); strip.show(); } else if(frame==77) { strip.setPixelColor(0,50,50,50); strip.setPixelColor(1,50,50,50); strip.setPixelColor(2,50,50,50); strip.setPixelColor(3,50,50,50); strip.setPixelColor(4,50,50,50); strip.setPixelColor(5,50,50,50); strip.setPixelColor(6,50,50,50); strip.setPixelColor(7,50,50,50); strip.setPixelColor(8,50,50,50); strip.setPixelColor(9,50,50,50); strip.setPixelColor(10,50,50,50); strip.setPixelColor(11,50,50,50); strip.setPixelColor(12,50,50,50); strip.setPixelColor(13,50,50,50); strip.setPixelColor(14,50,50,50); strip.setPixelColor(15,50,50,50); strip.show(); } } void loop(){ char key = kpd.getKey(); if(key) // Check for a valid key. { switch (key) { case '1': frame = 1; break; case '#': frame = 33; break; case '2': frame = 35; up = 0; break; case '3': frame = 36; break; case '4': frame = 71; break; case '5': frame = 72; break; case '6': frame = 73; break; case '7': frame = 74; break; case '8': frame = 75; break; case '9': frame = 76; break; case '*': frame = 77; break; case '0': resetFunc(); break; default: break; } } }