// https://forum.arduino.cc/t/random-led-time-on-off-using-millis/979561
unsigned long currentTime = millis();
const int crow1eyes = 2; // pin for crow 1 eyes
unsigned long crow1On; // OFF time for crow 1 eyes
unsigned long crow1Off; // ON time for crow 1 eyes
int crow1State = HIGH; // starting state of crow 1 eyes
unsigned long PrevEyesTime1; // time used by code to keep track of crow 1 time
// changed these for testing, life too short!
const int eyesOnMinimum = 100;
const int eyesOnMaximum = 500;
const int eyesOffMinimum = 100;
const int eyesOffMaximum = 200;
const int crow2eyes = 3; // pin for crow 2 eyes
unsigned long crow2On; // OFF time for crow 2 eyes
unsigned long crow2Off; // ON time for crow 2 eyes
int crow2State = HIGH; // starting state of crow 2 eyes
unsigned long PrevEyesTime2; //time used by code to keep track of crow 1 time
void setup() {
Serial.begin(112500);
Serial.println("random eyes!\n");
pinMode(crow1eyes, OUTPUT); //sets eyes pin as output
digitalWrite(crow1eyes, crow1State); //sets initial state
pinMode(crow2eyes, OUTPUT); //define eyes pin as output
digitalWrite(crow2eyes, crow2State); //sets initial state
// for testing
crow1On = 1000; crow1Off = 200;
crow2On = 1333; crow2Off = 333;
}
void loop() {
currentTime = millis();
/* NOT every time you loop!
crow1On = random(eyesOnMinimum, eyesOnMaximum);
crow1Off = random(eyesOffMinimum, eyesOffMaximum);
crow2On = random(eyesOnMinimum, eyesOnMaximum);
crow2Off = random(eyesOffMinimum, eyesOffMaximum);
*/
if (crow1State == HIGH) {
if (currentTime - PrevEyesTime1 >= crow1On) {
crow1State = LOW;
// just every time you actually use a random value, get a new one for next time
crow1On = random(eyesOnMinimum, eyesOnMaximum);
PrevEyesTime1 = currentTime;
}
}
else {
if (currentTime - PrevEyesTime1 >= crow1Off) {
crow1State = HIGH;
crow1Off = random(eyesOffMinimum, eyesOffMaximum);
PrevEyesTime1 = currentTime;
}
}
digitalWrite(crow1eyes, crow1State);
if (crow2State == HIGH ) {
if (currentTime - PrevEyesTime2 >= crow2On) {
crow2State = LOW;
PrevEyesTime2 = currentTime;
}
}
else {
if (currentTime - PrevEyesTime2 >= crow2Off) {
crow2State = HIGH;
PrevEyesTime2 = currentTime;
}
}
digitalWrite(crow2eyes, crow2State);
}