#include <esp_system.h>
#define red 17
#define green 18
#define blue 19
const int pir = 4;
unsigned long now = millis();
unsigned long lastTrigger = 0;
boolean startTimer = false;
boolean messageDisplayed = false;
int randomRed;
int randomGreen;
int randomBlue;
// A function to create a random color.
void randomColor() {
randomRed = esp_random() % 256; //Generate a random number between 0 - 255 for red.
randomGreen = esp_random() % 256; //Generate a random number between 0 - 255 for green.
randomBlue = esp_random() % 256; //Generate a random number between 0 - 255 for blue.
}
//ISR function.
void IRAM_ATTR detectsMovement()
{
startTimer = true;
lastTrigger = millis();
}
void timout(){
startTimer = false;
}
// A function that sets the colors of each RGB pin using the value entered in the parameters.
void setColors(int redValue, int greenValue, int blueValue) {
analogWrite(red, redValue);
analogWrite(green, greenValue);
analogWrite(blue, blueValue);
}
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
pinMode(red, OUTPUT);
pinMode(green, OUTPUT);
pinMode(blue, OUTPUT);
pinMode(pir, INPUT);
attachInterrupt(pir, detectsMovement, RISING);
}
void loop() {
delay(10); // To speed up the simulator.
now = millis(); // Setting the current time.
// Setting the action if motion detected.
if(startTimer &&(now - lastTrigger < 10000)){
// Displaying a message for one time only.
if (!messageDisplayed){Serial.println("Motion Detected.");messageDisplayed = true;}
randomColor();
setColors(randomRed, randomGreen, randomBlue);
}
setColors(0, 0, 0);
}