/*This code written by Mounish Kumar. Any changes required can be edited in this code
is acceptable after intimation if the creator of this code is present in this company.
Due to the simulation capability, the monitor period is set as 5 seconds.
As per our testing requirement, the monitor period is need to be changed as 3 seconds.
Refer Mirador Health KXM-0.0.3 & PIR-0.0.2 Test Specification 20230130 document for
further details*/
#define power_pin 15 // connect with pin 1 of J1 in test unit
#define sensepin 4 // connect with pin 2 of J1 in test unit
#define sensor_line 5 // connect with pin 3 of J1 in test unit
#define connectpin 2 // built in led of ESP32 for indicating test setup is connected with test software
#define servopin 13 // servo motor for cover/uncover the PIR sensor in test unit
#include <ESP32Servo.h> //include ESP32 servo library
char data;
int sense_state;
int pos = 0;
//unsigned long running_time = 0;
//unsigned long previous_time = 0;
const long monitor_period = 5000; //need to change the delay from 5 seconds to 3 seconds
Servo servo;
void setup() {
Serial.begin(115200);
Serial.println("Initialising....");
delay(1000);
pinMode(connectpin, OUTPUT);
pinMode(power_pin, OUTPUT);
pinMode(sensor_line, OUTPUT);
pinMode(sensepin, INPUT);
servo.attach(servopin, 500, 2400);
pos = 90;
servo.write(pos);
Serial.println("Test Jig active");
}
void loop() {
if (Serial.available()){
data = Serial.read();
if (data == 'c'){
connect();
}
if (data == 'd'){
disconnect();
}
if(data == 's'){
start_test();
}
/*if(data == 'n'){
next_unit();
}*/
}
}
//to indicate testing application is connected with test setup
void connect(){
digitalWrite(connectpin, HIGH);
Serial.println("Connected!");
}
//to indicate testing application is disconnected with test setup
void disconnect(){
digitalWrite(connectpin, LOW);
Serial.println("Disconnected!");
}
/*void next_unit(){
digitalWrite(sensor_line, LOW);
digitalWrite(power_pin, LOW);
}*/
void start_test(){
pos = 180;
servo.write(pos);
delay(5000); // this delay is for setting the sensor to low
digitalWrite(power_pin, HIGH);
Serial.println("Test Unit Power ON");
Serial.println("Test-1 Starts");
test1();
}
void test1(){
sense_state= digitalRead(sensepin);
if (sense_state == LOW){
Serial.println("sense pin is low");
Serial.println("Test-1 Pass");
test2();
}
else{
digitalWrite(power_pin, LOW);
Serial.println("Test Failed due to line short");
return loop();
}
}
void test2(){
Serial.println("Test-2 Starts");
digitalWrite(sensor_line, HIGH);
if (sense_state == LOW){
Serial.println("sense pin is low");
Serial.println("Test-2 Pass");
pos = 90;
servo.write(pos);
sense_state= digitalRead(sensepin);
while(sense_state != HIGH){
sense_state= digitalRead(sensepin);
if(sense_state == HIGH){
return test3();
}
}
}
else{
digitalWrite(power_pin, LOW);
digitalWrite(sensor_line, LOW);
Serial.println("Test Failed due to sensor failure");
return loop();
}
}
void test3(){
Serial.println("Test 3 starts");
pos = 180;
servo.write(pos);
delay(5000);
/*running_time, previous_time = millis();
while(running_time - previous_time <= monitor_period){
//delay for 3 seconds
}*/
sense_state= digitalRead(sensepin);
Serial.println(sense_state);
if (sense_state == LOW){
Serial.println("Test passed");
}
else{
Serial.println("Test Failed");
}
pos = 90;
servo.write(pos);
digitalWrite(power_pin, LOW);
digitalWrite(sensor_line, LOW);
}