I have a smart bathroom project and I'm trying to make some functions and call them i want to use that function called door and when the pir value is 0 then clean function start but when I'm trying to do that the 2 functions always works together at the same time immediately
#define shfat 29
#define led 32
#define ir 23
#define pump 24
#define pir 25
#define fan1 30
#define fan2 31
#define pump_water1 36
#define pump_water2 37
#define button_opendoor 39
#define button_closedoor 40
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20,4); // set the LCD address to 0x27 for a 16 chars and 2 line display
#include <Servo.h>
Servo myservo; // create servo object to control a servo
const int trigpin=27;
const int trigecho=28;
const int fan_relay=26;
long dur;
int dis;
int diss;
int x;
int redLed = 34;
int greenLed = 35;
int smokeA0 = A0;
int sensorThres = 500;
#define flame 22
#define buzzer 33
int data_flame;
int data_door;
int pirdata;
int data;
int flag=0;
int pos;
int data_opendoor;
int data_closedoor;
int flag_for_clean;
int flag_stop_clean;
long time1,time2,time3,time4,time5,time6;
////////////////////////////////////////////////////////////////////////////////////
void setup() {
// put your setup code here, to run once:
lcd.init(); // initialize the lcd
lcd.init();
// Print a message to the LCD.
pinMode(fan1,OUTPUT);
pinMode(fan2,OUTPUT);
pinMode(pump_water1,OUTPUT);
pinMode(pump_water2,OUTPUT);
pinMode(flame,INPUT);
pinMode(buzzer,OUTPUT);
pinMode(shfat,OUTPUT);
pinMode(led,OUTPUT);
pinMode(ir,INPUT);
pinMode(pump,OUTPUT);
pinMode(trigpin,OUTPUT);
pinMode(trigecho,INPUT);
pinMode(redLed, OUTPUT);
pinMode(greenLed, OUTPUT);
pinMode(fan_relay, OUTPUT);
pinMode(smokeA0, INPUT);
pinMode(button_opendoor,INPUT);
pinMode(button_closedoor,INPUT);
Serial.begin(9600);
myservo.attach(9); // attaches the servo on GIO2 to the servo object
time1=millis();
}
////////////////////////////////////////////////////////////////////////////////////
void loop() {
// put your main code here, to run repeatedly:
data=digitalRead(ir);
pirdata=digitalRead(pir);
data_flame=digitalRead(flame);
data_opendoor=digitalRead(button_opendoor);
data_closedoor=digitalRead(button_closedoor);
digitalWrite(shfat,0);
x=digitalRead(led);
digitalWrite(led,0);
if(millis()-time1>=10000)
{ time1=millis();
welcomescreen();
}
else if(millis()-time2>=1000&&pirdata==1)
{ time2=millis();
door();
}
else if(millis()-time3>=100)
{ time3=millis();
opendoor();
closedoor();
}
else if(millis()-time4>=1000)
{ time4=millis();
tap_drayer();
}
else if(millis()-time5>=100)
{ time5=millis();
smoke();
Flame();
}
digitalWrite(led,1);
if(millis()-time6>=100000&&pirdata==0)
{ time6=millis();
cleaning();
}
}
void cleaning()
{
if(flag_for_clean!=0&&pirdata==0&&flag!=0&&x!=0)
{
lcd.clear();
digitalWrite(led,1);
lcd.setCursor(3,0);
lcd.print("Cleaning");
lcd.setCursor(2,1);
lcd.print("Please Wait");
digitalWrite(led,1);
digitalWrite(pump_water1,0);
digitalWrite(pump_water2,0);
delay(500);
digitalWrite(pump_water1,1);
digitalWrite(pump_water2,1);
digitalWrite(fan1,0);
digitalWrite(fan2,0);
delay(1000);
digitalWrite(fan1,1);
digitalWrite(fan2,1);
delay(200);
flag=0;
flag_stop_clean=1;
flag_for_clean=0;
}
}
void door()
{
/*
for (pos = 100; pos >= 0; pos -= 1) { // goes from 180 degrees to 0 degrees
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15 ms for the servo to reach the position
}
*/
if(pirdata==01)
{
digitalWrite(led,0);
delay(2000);
digitalWrite(led,1);
flag=1;
flag_for_clean=1;
}
}
