Hello, I am fairly new with coding, I have been using an Arduino to control some RGB Led's using the Neopixel Library. I have been somewhat successful with making them do a few different things but I want to get a little more complicated and am having some trouble understanding the coding process. What I am looking to accomplish is probably simple or maybe it cannot even be done I don't know. So here is what I want and If needed I can use multiple Arduino's I want to have one strip of RGB Led's scroll red from left to right then turn off momentary 500ms then repeat the scrolling, and at the same time a second strip of RGB Led's do the same thing in yellow while a single switch is pressed and continue looping until that switch is released. then if possible I would like to have another input pin read a +12v signal and turn just the red strip all red as long as there is a +12v signal present. I can use a relay instead of the +12v to just pull a pin go ground but if I can avoid a relay it simplifies wiring. I have been playing with the simple provided button cycler thats in the neopixel library but what I want to do is over my head on programming. Any help is appreciated.
// This is a demonstration on how to use an input device to trigger changes on your neo pixels.
// You should wire a momentary push button to connect from ground to a digital IO pin. When you
// press the button it will change to a new pixel animation. Note that you need to press the
// button once to start the first animation!
#include <Adafruit_NeoPixel.h>
#define BUTTON_PIN 2 // Digital IO pin connected to the button. This will be
// driven with a pull-up resistor so the switch should
// pull the pin to ground momentarily. On a high -> low
// transition the button press logic will execute.
#define PIXEL_PIN 6 // Digital IO pin connected to the NeoPixels.
#define PIXEL_COUNT 144
// Parameter 1 = number of pixels in strip, neopixel stick has 8
// Parameter 2 = pin number (most are valid)
// Parameter 3 = pixel type flags, add together as needed:
// NEO_RGB Pixels are wired for RGB bitstream
// NEO_GRB Pixels are wired for GRB bitstream, correct for neopixel stick
// NEO_KHZ400 400 KHz bitstream (e.g. FLORA pixels)
// NEO_KHZ800 800 KHz bitstream (e.g. High Density LED strip), correct for neopixel stick
Adafruit_NeoPixel strip = Adafruit_NeoPixel(PIXEL_COUNT, PIXEL_PIN, NEO_GRB + NEO_KHZ800);
bool oldState = HIGH;
int showType = 0;
void setup() {
pinMode(BUTTON_PIN, INPUT_PULLUP);
strip.begin();
strip.show(); // Initialize all pixels to 'off'
}
void loop() {
// Get current button state.
bool newState = digitalRead(BUTTON_PIN);
// Check if state changed from high to low (button press).
if (newState == LOW && oldState == HIGH) {
// Short delay to debounce button.
delay(20);
// Check if button is still low after debounce.
newState = digitalRead(BUTTON_PIN);
if (newState == LOW) {
showType++;
if (showType > 4)
showType=0;
startShow(showType);
}
}
// Set the last button state to the old state.
oldState = newState;
}
void startShow(int i) {
switch(i){
case 1: colorwipe(strip.Color(175, 100, 0), 10); // Yellow
break;
case 2: reversecolorwipe(strip.Color(255, 0, 0), 10); // Red
break;
case 3: colorwipe(strip.Color(0, 255, 0), 10); // Green
break;
case 4: colorwipe(strip.Color(0, 0, 255), 10); // Blue
break;
}
}
// Fill the dots one after the other with a color
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);
}
}
void reversecolorwipe(uint32_t c, uint8_t wait) {
for(int i=(strip.numPixels()-1); i>=0; i--) {
strip.setPixelColor(i, c);
strip.show();
delay(wait);
}
}