int ledPins[8] = {2,3,4,5,6,7,8,9};
int PIRPin = 12; // input pin (for PIR sensor)
int pirState = LOW; // we start, assuming no motion detected
int PIRval = 0; // variable for reading the pin status
int NumOfLEDs = 6; // Number of LEDs.. change if you add more
long randNumber;
int OnceOrTwice;
long delaytime;
int Ctr;
long LEDval;
unsigned long TimeToAllOn;
void setup() {
int index;
pinMode(PIRPin, INPUT); // declare sensor as input
randomSeed(analogRead(0));
Serial.begin(9600);
for(index = 0; index <= (NumOfLEDs- 1); index++) {
pinMode(ledPins[index],OUTPUT);
// ledPins[index] is replaced by the value in the array.
// For example, ledPins[0] is 2
}
}
// the loop function runs over and over again forever
void loop() {
PIRval = digitalRead(PIRPin); // read input value of PIR
if (PIRval == HIGH) { // check if the input is HIGH
Serial.println("Button pressed");
if (pirState == LOW) { // we have just turned ON
Serial.println("Motion detected!");
pirState = HIGH;
}
randomOnLED(); // Randomly turn ON all LEDs
TimeToAllOn = millis();
Serial.print("ALL ON in ");
Serial.println(TimeToAllOn / 1000.0, 3);
randomBlinkLED(); // Randomly blink an LED
Serial.println("blink complete");
} else {
if (pirState == HIGH) { // we have just turned OFF
Serial.println("Motion ended!");
pirState = LOW;
}
}
// Turn off all LEDs
}
// /*
// randomOnLED()
// */
void randomOnLED() {
int Ctr;
int randNumber;
Ctr = 1;
// Serial.begin(9600);
while (Ctr < (NumOfLEDs + 1)) {
randNumber = random(NumOfLEDs); // generate a random number from 0 to 5
// Check the status of a randomly selected LED
// If its already ON, try again
// Serial.println(ledPins[randNumber]);
LEDval = digitalRead(ledPins[randNumber]);
// Serial.println(LEDval);
// Serial.println(randNumber);
if (LEDval == HIGH) { // LED is already on. Lower the Ctr by one and try again.
Ctr--;
// Serial.println("ON");
}
if (LEDval == LOW) {
Serial.println("OFF");
digitalWrite(ledPins[randNumber], HIGH); // turn the LED on (HIGH is the voltage level)
delay(randNumber * 500); // wait for a random time
}
Ctr++;
Serial.println(Ctr);
}
}
// /*
// randomBlinkLED()
// */
void randomBlinkLED() {
int i;
int Ctr;
int randNumber;
int RndNum2;
Ctr = 1;
Serial.begin(9600);
while (PIRval == HIGH) {
// while (Ctr < 16) { // Count 15 Blinks
randNumber = random(NumOfLEDs); // generate a random number from 0 to (Number of LEDs - 1)
RndNum2 = random(5); // random number to change DELAY times
OnceOrTwice = random(1, 3); // randomly select to blink ONCE or TWICE
delay(RndNum2 * 500); // wait for a random time before staring to blink an LED
Serial.print("Pin #");
Serial.print(ledPins[randNumber]);
Serial.print(" ,Blink ");
Serial.print(OnceOrTwice);
Serial.println(" time(s)");
// Cause a randomly selected LED to blink
for (i = 1; i <= OnceOrTwice; i++) {
digitalWrite(ledPins[randNumber], LOW); // turn the LED off
delay(200); // wait
digitalWrite(ledPins[randNumber], HIGH); // turn the LED back on
delay(RndNum2 * 200);
}
PIRval = digitalRead(PIRPin); // read input value of PIR
Ctr++;
}
Serial.println(Ctr);
}