Advertisement
safwan092

Untitled

May 25th, 2022
50
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.41 KB | None | 0 0
  1. #include <Servo.h>
  2. #include<NewPing.h>
  3.  
  4. #define redLED_PIN A4
  5. #define blueLED_PIN A5
  6. #define switch_PIN 2
  7.  
  8. int switch_status = 0;
  9.  
  10. //hc-sr04 sensor
  11. #define TRIGGER_PIN A1
  12. #define ECHO_PIN A0
  13. #define max_distance1 100
  14. #define max_distance2 50
  15. #define Buzzer 13
  16.  
  17. //ir sensor code #1
  18. #define irLeft_FM A2
  19. #define irRight_FM A3
  20.  
  21. //ir sensor code #2
  22. #define irLeft_LF 10
  23. #define irMid_LF !digitalRead(11)
  24. #define irRight_LF 12
  25.  
  26. //ir sensor code #1
  27. int IR_L_FM ;
  28. int IR_R_FM ;
  29.  
  30. //ir sensor code #2
  31. int IR_L_LF ;
  32. int IR_M_LF ;
  33. int IR_R_LF ;
  34.  
  35.  
  36. int pos = 0;
  37.  
  38.  
  39. Servo servo;
  40.  
  41. NewPing sonar(TRIGGER_PIN, ECHO_PIN, max_distance1);
  42. NewPing sonar2(TRIGGER_PIN, ECHO_PIN, max_distance2);
  43.  
  44. int distance = 0;
  45. int leftDistance;
  46. int rightDistance;
  47.  
  48.  
  49. int ENA = 6; //ENA connected to digital pin 10
  50. int DCMotor_IN1 = 8; // LEFT MOTOR
  51. int DCMotor_IN2 = 7; // LEFT MOTOR
  52.  
  53. int DCMotor_IN3 = 5; // RIGHT MOTOR
  54. int DCMotor_IN4 = 4; // RIGHT MOTOR
  55. int ENB = 3; //ENB connected to digital pin ?
  56.  
  57.  
  58. //int SpeedControl = A0;
  59. int MOTOR_SPEED1 = 170;
  60. int MOTOR_SPEED2 = 210;
  61. int MOTOR_SPEED3 = 250;
  62.  
  63. boolean object;
  64.  
  65. void setup() {
  66.  
  67. Serial.begin(1200);
  68.  
  69. pinMode(redLED_PIN, OUTPUT);
  70. pinMode(blueLED_PIN, OUTPUT);
  71. pinMode(switch_PIN, INPUT);
  72. digitalWrite(redLED_PIN, HIGH);
  73. digitalWrite(blueLED_PIN, HIGH);
  74.  
  75. pinMode(irLeft_FM, INPUT);
  76. pinMode(irRight_FM, INPUT);
  77. pinMode(irLeft_LF, INPUT);
  78. pinMode(irMid_LF, INPUT);
  79. pinMode(irRight_LF, INPUT);
  80.  
  81. // pinMode(irMid, INPUT);
  82.  
  83. pinMode(Buzzer, OUTPUT);
  84.  
  85. servo.attach(9);
  86. {
  87. for (pos = 90; pos <= 180; pos += 1) {
  88. servo.write(pos);
  89. delay(15);
  90. } for (pos = 180; pos >= 0; pos -= 1) {
  91. servo.write(pos);
  92. delay(15);
  93. } for (pos = 0; pos <= 90; pos += 1) {
  94. servo.write(pos);
  95. delay(15);
  96. }
  97. }
  98.  
  99. pinMode(ENA, OUTPUT); // initialize ENA pin as an output
  100. pinMode(ENB, OUTPUT); // initialize ENB pin as an output
  101. pinMode(DCMotor_IN1, OUTPUT); // initialize MOTOR_A1 pin as an output ( LEFT MOTOR )
  102. pinMode(DCMotor_IN2, OUTPUT); // initialize MOTOR_A2 pin as an output ( LEFT MOTOR )
  103. pinMode(DCMotor_IN3, OUTPUT); // initialize MOTOR_B1 pin as an output ( RIGHT MOTOR )
  104. pinMode(DCMotor_IN4, OUTPUT); // initialize MOTOR_B2 pin as an output ( RIGHT MOTOR )
  105. digitalWrite(redLED_PIN, LOW);
  106. digitalWrite(blueLED_PIN, LOW);
  107. }
  108.  
  109. void loop() {
  110. switch_status = digitalRead(switch_PIN);
  111.  
  112. if (switch_status) {
  113. digitalWrite(redLED_PIN, HIGH);
  114. digitalWrite(blueLED_PIN, LOW);
  115. loop_code_1();
  116. }
  117. else {
  118. digitalWrite(redLED_PIN, LOW);
  119. digitalWrite(blueLED_PIN, HIGH);
  120. loop_code_2();
  121. }
  122.  
  123. }// end of LOOP
  124.  
  125.  
  126. //External functions
  127.  
  128. void loop_code_1() {
  129. IR_L_FM = digitalRead (irLeft_FM);
  130. Serial.print("IR_L: ");
  131. Serial.print(IR_L_FM);
  132.  
  133. IR_R_FM = digitalRead (irRight_FM);
  134. Serial.print(" / IR_R: ");
  135. Serial.println(IR_R_FM);
  136.  
  137. // put your main code here, to run repeatedly:
  138.  
  139. delay(50);
  140.  
  141. distance = getDistance();
  142.  
  143.  
  144. if ((IR_R_FM == 1) && (distance >= 11 && distance <= 40) && (IR_L_FM == 1)) {
  145.  
  146. moveForward();
  147. Serial.println("moveForward");
  148.  
  149.  
  150. }
  151. else if ((IR_R_FM == 1) && (IR_L_FM == 0)) {
  152.  
  153. moveRight();
  154. Serial.println("moveRight");
  155.  
  156.  
  157. }
  158. else if ((IR_R_FM == 0) && (IR_L_FM == 1)) {
  159.  
  160. moveLeft();
  161. Serial.println("moveLeft");
  162.  
  163.  
  164. }
  165.  
  166. else if ((IR_R_FM == 0) && (distance <= 20) && (IR_L_FM == 0)) {
  167.  
  168. moveBackward;
  169. Serial.println("moveBackward");
  170.  
  171.  
  172. }
  173. else if (distance > 1 && distance < 10) {
  174.  
  175. Stop();
  176. Serial.println("Stop");
  177.  
  178.  
  179. }
  180. }
  181. void loop_code_2() {
  182.  
  183. IR_L_LF = digitalRead (irLeft_LF);
  184. Serial.print("IR_L_LF: ");
  185. Serial.print(IR_L_LF);
  186. IR_M_LF = digitalRead (irMid_LF);
  187. Serial.print(" / IR_M_LF: ");
  188. Serial.print(IR_M_LF);
  189. IR_R_LF = digitalRead (irRight_LF);
  190. Serial.print(" / IR_R_LF: ");
  191. Serial.println(IR_R_LF);
  192.  
  193.  
  194. if (IR_L_LF == 0 && IR_M_LF == 1 && IR_R_LF == 0 ) {
  195. objectAvoid();
  196. Serial.println("FW");
  197. //forword
  198.  
  199. }
  200.  
  201. else if ((IR_L_LF == 0 && IR_M_LF == 0 && IR_R_LF == 1 ) || (IR_L_LF == 0 && IR_M_LF == 1 && IR_R_LF == 1 )) { // when irRight_LF = 1
  202. objectAvoid();
  203. Serial.println("TR");
  204. //rightturn
  205. moveRight();
  206. }
  207. else if ((IR_L_LF == 1 && IR_M_LF == 0 && IR_R_LF == 0 ) || (IR_L_LF == 1 && IR_M_LF == 1 && IR_R_LF == 0 )) { // when irLeft_LF = 1
  208. objectAvoid();
  209. Serial.println("TL");
  210. //leftturn
  211. moveLeft();
  212. }
  213. else if (IR_L_LF == 1 && IR_M_LF == 0 && IR_R_LF == 1 ) {
  214. Serial.println("BK");
  215. //Backward
  216. moveBackward();
  217. }
  218.  
  219. else if (IR_L_LF == 0 && IR_M_LF == 0 && IR_R_LF == 0 ) {
  220. Serial.println("F_Line");
  221. //Find Line
  222. findLine();
  223. }
  224.  
  225. else if (IR_L_LF == 1 && IR_M_LF == 1 && IR_R_LF == 1 ) {
  226. //Stop
  227. Stop();
  228. }
  229.  
  230. }
  231.  
  232. int getDistance() {
  233. delay(50);
  234. int cm = sonar.ping_cm();
  235. return cm;
  236. }
  237.  
  238. int getDistance2() {
  239. delay(50);
  240. int cm = sonar2.ping_cm();
  241. return cm;
  242. }
  243.  
  244. ///////////////////////////////////////////////////from code 2↓
  245. void objectAvoid() {
  246. distance = getDistance2();
  247. if (distance <= 20) {
  248. //stop
  249. Stop();
  250. Serial.println("Obstcal Stop");
  251.  
  252. lookLeft();
  253. lookRight();
  254. delay(100);
  255.  
  256. if (rightDistance <= leftDistance) {
  257. //left
  258. object = true;
  259. turn();
  260. Serial.println("moveLeft");
  261. } else {
  262. //right
  263. object = false;
  264. turn();
  265. Serial.println("moveRight");
  266. }
  267. delay(100);
  268. }
  269. else {
  270. //forword
  271. Serial.println("No Obstcal");
  272. moveForward();
  273. }
  274. }
  275.  
  276.  
  277. int lookLeft () {
  278. //lock left
  279. servo.write(150);
  280. delay(500);
  281. leftDistance = getDistance2();
  282. delay(100);
  283. servo.write(90);
  284. Serial.print("Left:");
  285. Serial.print(leftDistance);
  286. return leftDistance;
  287. delay(100);
  288. }
  289.  
  290. int lookRight() {
  291. //lock right
  292. servo.write(30);
  293. delay(500);
  294. rightDistance = getDistance2();
  295. delay(100);
  296. servo.write(90);
  297. Serial.print(" ");
  298. Serial.print("Right:");
  299. Serial.println(rightDistance);
  300. return rightDistance;
  301. delay(100);
  302. }
  303.  
  304. void turn() {
  305. if (object == false) {
  306. Serial.println("turn Right");
  307. moveRight();
  308. delay(700);
  309. moveForward();
  310. delay(800);
  311. moveLeft();
  312. delay(900);
  313.  
  314. if (digitalRead(irRight_LF) == 1) {
  315. loop();
  316. } else {
  317. moveForward();
  318. }
  319. }
  320. else {
  321. Serial.println("turn left");
  322. moveLeft();
  323. delay(700);
  324. moveForward();
  325. delay(800);
  326. moveRight();
  327. delay(900);
  328.  
  329. if (digitalRead(irLeft_LF) == 1) {
  330. loop();
  331. } else {
  332. moveForward();
  333. }
  334. }
  335. }
  336.  
  337. void findLine() {
  338. if (object == false) {
  339. Serial.println("turn Right");
  340. moveRight();
  341. delay(700);
  342. moveForward();
  343. delay(800);
  344. moveRight();
  345. delay(900);
  346.  
  347. if (digitalRead(irLeft_LF) == 0, digitalRead(irMid_LF) == 0 && digitalRead(irRight_LF) == 0) {
  348. loop();
  349. } else {
  350. moveForward();
  351. }
  352. }
  353. else {
  354. Serial.println("turn left");
  355. moveLeft();
  356. delay(700);
  357. moveForward();
  358. delay(800);
  359. moveRight();
  360. delay(900);
  361. if (digitalRead(irLeft_LF) == 0, digitalRead(irMid_LF) == 0 && digitalRead(irRight_LF) == 0) {
  362. loop();
  363. } else {
  364. moveForward();
  365. }
  366. }
  367. }
  368. ///////////////////////////////////////////////////from code 2↑
  369. void moveForward() {
  370. analogWrite(ENA, MOTOR_SPEED1);
  371. analogWrite(ENB, MOTOR_SPEED1);
  372.  
  373. digitalWrite(DCMotor_IN1, HIGH); //( LEFT MOTOR )
  374. digitalWrite(DCMotor_IN2, LOW); //( LEFT MOTOR )
  375.  
  376. digitalWrite(DCMotor_IN3, HIGH); //( RIGHT MOTOR )
  377. digitalWrite(DCMotor_IN4, LOW); //( RIGHT MOTOR )
  378.  
  379. }
  380.  
  381. void moveBackward() {
  382. analogWrite(ENA, MOTOR_SPEED1);
  383. analogWrite(ENB, MOTOR_SPEED1);
  384.  
  385. digitalWrite(DCMotor_IN1, LOW); //( LEFT MOTOR )
  386. digitalWrite(DCMotor_IN2, HIGH); //( LEFT MOTOR )
  387.  
  388. digitalWrite(DCMotor_IN3, LOW); //( RIGHT MOTOR )
  389. digitalWrite(DCMotor_IN4, HIGH); //( RIGHT MOTOR )
  390. }
  391.  
  392. void Stop() {
  393.  
  394. digitalWrite(Buzzer, HIGH);
  395. delay(50);
  396. digitalWrite(Buzzer, LOW);
  397. delay(500);
  398. digitalWrite(Buzzer, HIGH);
  399. delay(50);
  400. digitalWrite(Buzzer, LOW);
  401. delay(500);
  402.  
  403. analogWrite(ENA, MOTOR_SPEED1);
  404. analogWrite(ENB, MOTOR_SPEED1);
  405.  
  406. digitalWrite(DCMotor_IN1, LOW); //( LEFT MOTOR )
  407. digitalWrite(DCMotor_IN2, LOW); //( LEFT MOTOR )
  408.  
  409. digitalWrite(DCMotor_IN3, LOW); //( RIGHT MOTOR )
  410. digitalWrite(DCMotor_IN4, LOW); //( RIGHT MOTOR )
  411.  
  412. }
  413.  
  414. void moveRight() {
  415.  
  416. analogWrite(ENA, MOTOR_SPEED2);
  417. analogWrite(ENB, MOTOR_SPEED1);
  418.  
  419. digitalWrite(DCMotor_IN1, HIGH); //255- MOTOR_SPEED); //( LEFT MOTOR )
  420. digitalWrite(DCMotor_IN2, LOW); //( LEFT MOTOR )
  421.  
  422. digitalWrite(DCMotor_IN3, LOW); //( RIGHT MOTOR )
  423. digitalWrite(DCMotor_IN4, HIGH);//MOTOR_SPEED); //( RIGHT MOTOR )
  424.  
  425. }
  426. void moveLeft() {
  427. analogWrite(ENA, MOTOR_SPEED1);
  428. analogWrite(ENB, MOTOR_SPEED2);
  429.  
  430. digitalWrite(DCMotor_IN1, LOW); //( LEFT MOTOR )
  431. digitalWrite(DCMotor_IN2, HIGH);//MOTOR_SPEED); //( LEFT MOTOR )
  432.  
  433. digitalWrite(DCMotor_IN3, HIGH); //255- MOTOR_SPEED); //( RIGHT MOTOR )
  434. digitalWrite(DCMotor_IN4, LOW); //( RIGHT MOTOR )
  435.  
  436. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement