/*Project Name: RoboGleam: A Smart House Cleaning Robot (Economic Prototype)Author: Dhyey ShahDate Modified: 26th July, 2022*//*-----------------------------------------------------------------------------START OF MAIN PROGRAM------------------------------------------------------------------------------*/// Include Libraries#include<NewPing.h>// Defining Variables#defineRX 0#defineTX 1#defineirSensorFront 2#defineirSensorBack 3#definemodeSwitch 4#defineENA 6 // Enable Pin for Right Motor#defineENB 5 // Enable Pin for Left Motor#defineledGreen A0#defineledWhite 7#definein1 8 // Right Motor Forward#definein2 9 // Right Motor Backward#definein3 10 // Left Motor Forward#definein4 11 // Left Motor Backward#defineechoUS1 12#definetrigUS1 13#defineechoUS2 A3#definetrigUS2 A2#defineechoUS3 A5#definetrigUS3 A4// #define servoAngle 105char val;// Creating Object Instances for PeripheralsNewPingsonar1(trigUS1,echoUS1,300);NewPingsonar2(trigUS2,echoUS2,200);NewPingsonar3(trigUS3,echoUS3,200);/*-------------------------------------------------------------------------------------*/voidsetup(){ Serial.begin(9600);// servo.attach(servoMotor);// servo.write(servoAngle);pinMode(ledGreen, OUTPUT);pinMode(ledWhite, OUTPUT);pinMode(in1, OUTPUT);pinMode(in2, OUTPUT);pinMode(in3, OUTPUT);pinMode(in4, OUTPUT);pinMode(ENA, OUTPUT);pinMode(ENB, OUTPUT);analogWrite(ENA,145);analogWrite(ENB,255);pinMode(irSensorFront, INPUT);pinMode(irSensorBack, INPUT);pinMode(modeSwitch, INPUT_PULLUP);digitalWrite(ledGreen, LOW);digitalWrite(ledWhite, LOW);}voidloop(){if(digitalRead(modeSwitch)== HIGH){digitalWrite(ledGreen, HIGH);digitalWrite(ledWhite, LOW);automatic();}elseif(digitalRead(modeSwitch)== LOW){digitalWrite(ledWhite, HIGH);digitalWrite(ledGreen, LOW);manual();} // Controlling both Sweeper & Scrubber Motors ( x4 Motors ) with 2 seperate Switches & 2 Batteries.}/*----------------------------PRIMARY USER FUNCTIONS-------------------------------*/voidautomatic(){unsignedint dist_val1 =readDistance1();unsignedint dist_val2 =readDistance2();unsignedint dist_val3 =readDistance3();if( dist_val1 <=15&& dist_val1 !=0){Serial.println("Nearby Object Detected in Centre !");stopRobot();delay(150);moveBack();delay(400);stopRobot();delay(150);if( dist_val2 > dist_val3){ // dist_val2 for Sensor on Left, dist_val3 for Sensor on RightturnLeft();delay(400);stopRobot();delay(150);}elseif( dist_val2 < dist_val3){ // dist_val2 for Sensor on Left, dist_val3 for Sensor on RightturnRight();delay(400);stopRobot();delay(150);}}elseif( dist_val2 <=15&& dist_val2 !=0){ // dist_val2 for Sensor on Left, dist_val3 for Sensor on RightSerial.println("Nearby Object Detected on Left Side !");stopRobot();delay(150);moveBack();delay(150);turnRight();delay(400);stopRobot();delay(150);}elseif( dist_val3 <=15&& dist_val3 !=0){ // dist_val2 for Sensor on Left, dist_val3 for Sensor on RightSerial.println("Nearby Object Detected on Right Side !");stopRobot();delay(150);moveBack();delay(150);turnLeft();delay(400);stopRobot();delay(150);}else{moveForward();}}voidmanual(){unsignedint dist_value1 =readDistance1();if(Serial.available()>0){stopRobot(); val =Serial.read();Serial.println("The Bluetooth Value = ");Serial.println(val);delay(10);if( val =='1'){if( dist_value1 <=15&& dist_value1 !=0){stopRobot();}else{moveForward();}}elseif( val =='2'){moveBack();}elseif( val =='3'){turnRight();}elseif( val =='4'){turnLeft();}elseif( val =='5'){stopRobot();}}}/*----------------------------SECONDARY USER FUNCTIONS-------------------------------*/unsignedintreadDistance1(){unsignedint dist1 = sonar1.ping_cm(); Serial.print("Distance is: "); Serial.println(dist1);return dist1;delay(10);}unsignedintreadDistance2(){unsignedint dist2 = sonar2.ping_cm(); Serial.print("Distance on Left is: "); Serial.println(dist2);return dist2;delay(10);}unsignedintreadDistance3(){unsignedint dist3 = sonar3.ping_cm(); Serial.print("Distance on Right is: "); Serial.println(dist3);return dist3;delay(10);}voidmoveForward(){if(digitalRead(irSensorFront)== HIGH){ // Detects Floor below in front, if Low = StopsstopRobot();delay(50);}else{digitalWrite(in1, LOW);digitalWrite(in2, HIGH);digitalWrite(in3, LOW);digitalWrite(in4, HIGH);}}voidmoveBack(){if(digitalRead(irSensorBack)== LOW){ // Detects Object behind at back, if High = StopsstopRobot();delay(50);}else{digitalWrite(in1, HIGH);digitalWrite(in2, LOW);digitalWrite(in3, HIGH);digitalWrite(in4, LOW);}}voidturnRight(){digitalWrite(in1, HIGH);digitalWrite(in2, LOW);digitalWrite(in3, LOW);digitalWrite(in4, HIGH);delay(300);}voidturnLeft(){digitalWrite(in1, LOW);digitalWrite(in2, HIGH);digitalWrite(in3, HIGH);digitalWrite(in4, LOW);delay(300);}voidstopRobot(){digitalWrite(in1, LOW);digitalWrite(in2, LOW);digitalWrite(in3, LOW);digitalWrite(in4, LOW);}