//------------------------Variable declaration & initialization----------------------------//
// for onboard led //
#define ledPin 2
// for user input //
bool canRun1, canCalibrate;
// for PIR sensor //
#define pirPin 15
bool isPIRtri;
unsigned long prevT, pirDy;
//---------------------------------Callback functions-------------------------------------//
//---------------------------------------Setup-------------------------------------------//
void setup() {
Serial.begin(115200);
Serial.printf("______________________Setup starts_________________________\n");
pinMode(ledPin , OUTPUT);
pinMode(pirPin, INPUT);
Serial.printf("______________________Setup completes_________________________\n");
}
//----------------------------------------Loop--------------------------------------------//
void loop() {
UserInput();
PIR();
if (canRun1 == true){
}
}
void UserInput(){
if (Serial.available()) {
String input_str = Serial.readString();
input_str.trim(); // remove "/n"
Serial.printf("You entered: %s\n" , input_str);
int input_int = input_str.toInt();
if (input_str != "0" && input_int == 0){
// input_str.toInt() will return 0 if input_str is not an integer .
return;
}
if (canCalibrate == true){
Calibrate(input_int);
canCalibrate = false;
return;
}
switch (input_int){
case 0:
Serial.printf("Stop running\n");
canRun1 = false;
ledcWrite(0, 255);
break;
case 1:
Serial.printf("Start running\n");
canRun1 = true;
break;
case 2:
Serial.printf("Enter your value for calibration:\n");
canCalibrate = true;
break;
default:
break;
}
}
}
void Calibrate(int num1){
}
//--------------------------------Self-defined functions------------------------------------//
void PIR(){
if (digitalRead(pirPin) == HIGH && isPIRtri == false){
Serial.printf("Motion is detected .\n");
isPIRtri = true; prevT = millis();
// start counting PIR delayT .
digitalWrite(ledPin, HIGH);
}
if (digitalRead(pirPin) == LOW && isPIRtri == true){
isPIRtri = false;
digitalWrite(ledPin, LOW);
pirDy = millis() - prevT;
Serial.printf("PIR delay time: %.1lus .\n", pirDy/1000);
}
}