I feel a little awkward asking about code here, but I'm not sure where else to go to for help. I originally asked a few freelance Arduino programmers and a friend if they could help me, but they all balked because they'd never worked with a Gemma or NeoPixels before.
I decided to tackle the code myself, even though I've never programmed anything before; and after reading through the tutorials and project codes for Flora, Gemma, and the NeoPixels, I copied and pasted some code together and then found some code for a push button switch and tossed that in there too.
My project involves 5 NeoPixels attached in a straight line to a Gemma, and pressing the push button would cause the LEDs to light up in different patterns (e.g., all solid white, all solid red, all solid orange, and then multicolor with each LED as a different color). The code compiled and I uploaded it to the Gemma with the push button and a single NeoPixel attached with alligator clips ... and the only thing that happened was that the LED turned on as the first color pattern in my code.
Because of that, I'm guessing that the defective part of my programming involves the code for the push button. Then again, it wouldn't surprise me if I goofed up the code for the NeoPixels as well. Would someone mind taking a look at my code and tell me what's going on with it? Thank you so very much!
Code: Select all
#include <Adafruit_NeoPixel.h>
int buttonPin = 0; // momentary push button on pin 0
int oldButtonVal = 0;
#define PIN 1 // Parameter 1 = number of pixels in strip
// Parameter 2 = pin number (most are valid)
// Parameter 3 = pixel type flags, add together as needed:
// NEO_KHZ800 800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
// NEO_KHZ400 400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
// NEO_GRB Pixels are wired for GRB bitstream (most NeoPixel products)
// NEO_RGB Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)
Adafruit_NeoPixel strip = Adafruit_NeoPixel(5, PIN, NEO_GRB + NEO_KHZ800);
int nPatterns = 8;
int lightPattern = 1;
// the setup routine runs once when you press reset:
void setup() {
strip.begin();
strip.show(); // initialize all pixels to 'off'
// initialize the BUTTON pin as an input
pinMode(buttonPin, INPUT);
digitalWrite(buttonPin, HIGH); // button pin is HIGH, so it drops to 0 if pressed
}
// Pattern 1 - White light, all LEDs in the strip are white
void pattern1() {
strip.setPixelColor(0, strip.Color(255, 255, 255)); // White
strip.setPixelColor(1, strip.Color(255, 255, 255));
strip.setPixelColor(2, strip.Color(255, 255, 255));
strip.setPixelColor(3, strip.Color(255, 255, 255));
strip.setPixelColor(4, strip.Color(255, 255, 255));
strip.show();
}
// 7 more color patterns go here, but I won't post them so that the code stays streamlined
// the loop routine runs over and over again forever;
void loop() {
// read that state of the pushbutton value;
int buttonVal = digitalRead(buttonPin);
if (buttonVal == LOW && oldButtonVal == HIGH) {// button has just been pressed
lightPattern == lightPattern + 1;
}
if (lightPattern > nPatterns) lightPattern = 1;
oldButtonVal = buttonVal;
switch(lightPattern) {
case 1:
pattern1();
break;
case 2:
pattern2();
break;
case 3:
pattern3();
break;
case 4:
pattern4();
break;
case 5:
pattern5();
break;
case 6:
pattern6();
break;
case 7:
pattern7();
break;
case 8:
pattern8();
break;
}
}