I want to make 2 eyes with each 4 LED's. I want them to go ON and OFF, but the interval has to be random so it seems that the eyes are flashing randomly.
I have this code, but I wont work because I thing the interval changes the hole time so it will never be wat is has to be to do the if-loop.
const int led1 = 6;
const int led2 = 7;
const int led3 = 8;
const int led4 = 9;
const int led5 = 10;
const int led6 = 11;
const int led7 = 12;
const int led8 = 13;
int endTime = 0;
int now = millis();
int state = 0;
void setup() {
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
pinMode(led6, OUTPUT);
pinMode(led7, OUTPUT);
pinMode(led8, OUTPUT);
randomSeed(analogRead(0));
}
void loop() {
int interval = random(350);
if (now - endTime > interval && state == 0) {
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
digitalWrite(led5, HIGH);
digitalWrite(led6, HIGH);
digitalWrite(led7, HIGH);
digitalWrite(led8, HIGH);
endTime = now;
state = 1;
}
if (now - endTime > interval && state == 1) {
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
digitalWrite(led6, LOW);
digitalWrite(led7, LOW);
digitalWrite(led8, LOW);
endTime = now;
state = 0;
}
}
The problem is that you need to move this line to the top of loop:
int now = millis();
The previous code only set the value of now once when the program started but you need it to be updated every loop so you know how many milliseconds have elapsed.
since loop() is executed thousands of time between state changes, you are likely to have a low value (1:350 chance) selected randomly. So you should update your interval only once per state change and define the variable static:
const int led1 = 6;
const int led2 = 7;
const int led3 = 8;
const int led4 = 9;
const int led5 = 10;
const int led6 = 11;
const int led7 = 12;
const int led8 = 13;
int endTime = 0;
int state = 0;
void setup() {
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
pinMode(led6, OUTPUT);
pinMode(led7, OUTPUT);
pinMode(led8, OUTPUT);
randomSeed(analogRead(0));
}
void loop() {
static int interval = random(350);
if (millis() - endTime > interval and state == 0) {
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
digitalWrite(led5, HIGH);
digitalWrite(led6, HIGH);
digitalWrite(led7, HIGH);
digitalWrite(led8, HIGH);
endTime = millis();
state = 1;
}
if (millis() - endTime > interval and state == 1) {
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
digitalWrite(led6, LOW);
digitalWrite(led7, LOW);
digitalWrite(led8, LOW);
endTime = millis();
state = 0;
interval = random(350);
}
}