Hi all I use 2 sensors and 2 led strips. I want to let both led strips light up without interrupting each other while reading the different values from the inputs. But Arduino still pauses when one lights up, the other one needs to wait for the time to pass, either one misses reading the value when one is processing the output.
I know delay(wait); makes it block out the coming data, but it lets the strips light up for 6 seconds. If I remove it, the strips will light one 1 second only. What should I do? Thanks so much!
#include <Adafruit_NeoPixel.h>
#define PIN 6
int ledFadeTime = 7;
Adafruit_NeoPixel strip3 = Adafruit_NeoPixel(60, 9, NEO_GRB +NEO_KHZ800);//led pin
Adafruit_NeoPixel strip4 = Adafruit_NeoPixel(60, 7, NEO_GRB + NEO_KHZ800);//led pin
const int sensorPin3 = A2;//motion sensor
const int sensorPin4 = A3; //flash sensor
unsigned long strip3OnTime;
unsigned long strip4OnTime;
bool strip3On;
bool strip4On;
unsigned long previousMillis = 0;
const long interval = 1000;
void setup() {
Serial.begin(9600);
strip3.begin();
strip3.show();
strip4.begin();
strip4.show();
strip3On = false;
strip4On = false;
}
void loop(){
int Val3 = analogRead (sensorPin3); // sensor val
int Val4 = analogRead (sensorPin4);
Serial.print(Val3);
Serial.print(" ");
Serial.println(Val4);
if (Val3>70) {
rgbFadeInAndOut3(0, 0, 255, ledFadeTime);
//analogWrite(strip3, HIGH);
strip3On = true;
strip3OnTime = millis();
}
if (Val4>70) {
rgbFadeInAndOut4(0, 0, 255, ledFadeTime);
//analogWrite(strip4, HIGH);
strip4On = true;
strip4OnTime = millis();
}
if(strip3On)
if(millis() - strip3OnTime > 7000) {
rgbFadeInAndOut3(0, 0, 1, 5000);
strip3On = false;
}
if(strip4On)
if(millis() - strip4OnTime > 7000) {
rgbFadeInAndOut4(0, 0, 1, 5000);
strip4On = false;
}
}
void rgbFadeInAndOut3(uint8_t red, uint8_t green, uint8_t blue, uint8_t wait) {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval){
previousMillis = currentMillis;
for(uint8_t b = 0; b <255; b++) {
for(uint8_t i=0; i < strip3.numPixels(); i++) {
strip3.setPixelColor(i, red * b/255, green * b/255, blue * b/255);
}
strip3.show();
delay(wait);
};
for(uint8_t b=255; b > 0; b--) {
for(uint8_t i = 0; i < strip4.numPixels(); i++) {
strip3.setPixelColor(i, red * b/255, green * b/255, blue * b/255);
}
strip3.show();
delay(wait);
};
};
}
void rgbFadeInAndOut4(uint8_t red, uint8_t green, uint8_t blue, uint8_t wait) {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval){
previousMillis = currentMillis;
for(uint8_t b = 0; b <255; b++) {
for(uint8_t i=0; i < strip4.numPixels(); i++) {
strip4.setPixelColor(i, red * b/255, green * b/255, blue * b/255);
}
strip4.show();
delay(wait);
};
for(uint8_t b=255; b > 0; b--) {
for(uint8_t i = 0; i < strip4.numPixels(); i++) {
strip4.setPixelColor(i, red * b/255, green * b/255, blue * b/255);
}
strip4.show();
delay(wait);
};
};
}