Advertisement
safwan092

Untitled

May 14th, 2022
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.14 KB | None | 0 0
  1. /********************************************************
  2. Connections:
  3. -------------------------------------------------------
  4. [Arduino Uno] --> [L298N Red Board]:
  5. 9 --> ENA
  6. 6 --> IN1
  7. 7 --> IN2
  8. 4 --> IN3
  9. 5 --> IN4
  10. 10 --> ENB
  11. [Arduino Uno] --> [IR Sensor (Left)]:
  12. GND --> GND
  13. 5V --> VCC
  14. 2 --> OUT
  15. [Arduino Uno] --> [IR Sensor (Center)]:
  16. GND --> GND
  17. 5V --> VCC
  18. 8 --> OUT
  19. [Arduino Uno] --> [IR Sensor (Right)]:
  20. GND --> GND
  21. 5V --> VCC
  22. 3 --> OUT
  23. [Arduino Uno] --> [Ultrasonic Sensor HC-SR04]:
  24. GND --> GND
  25. 5V --> VCC
  26. A3 --> Trig
  27. A2 --> Echo
  28. [Arduino Uno] --> [LCD 16x2 I2C]:
  29. GND --> GND
  30. 5V --> VCC
  31. SDA --> SDA
  32. SCL --> SCL
  33. -------------------------------------------------------
  34. *********************************************************/
  35.  
  36. #include <Wire.h>
  37. #include <LiquidCrystal_I2C.h>
  38.  
  39. LiquidCrystal_I2C lcd(0x27, 16, 2);
  40.  
  41. int maxDistance = 10; // 10cm
  42. #define tr A3
  43. #define ec A2
  44. long duration;
  45. int distance;
  46. int counter = 0;
  47.  
  48. #define SensorLeft 2
  49. #define SensorMiddle 8
  50. #define SensorRight 3
  51. unsigned char SL;
  52. unsigned char SM;
  53. unsigned char SR;
  54.  
  55. int mSpeed = 90; //0-255
  56. int pinLB = 5;//IN4
  57. int pinLF = 4;//IN3
  58. int pinRB = 7;//IN2
  59. int pinRF = 6;//IN1
  60. int ENA = 9;
  61. int ENB = 10;
  62.  
  63. void IO_config(void)
  64. {
  65. pinMode(tr, OUTPUT);
  66. pinMode(ec, INPUT);
  67. pinMode(SensorLeft, INPUT);
  68. pinMode(SensorMiddle, INPUT);
  69. pinMode(SensorRight, INPUT);
  70. pinMode(pinLB, OUTPUT);
  71. pinMode(pinLF, OUTPUT);
  72. pinMode(pinRB, OUTPUT);
  73. pinMode(pinRF, OUTPUT);
  74. pinMode(ENA, OUTPUT);
  75. pinMode(ENB, OUTPUT);
  76. analogWrite(ENA, mSpeed); //0-255
  77. analogWrite(ENB, mSpeed); //0-255
  78. }
  79.  
  80. void turnR()
  81. {
  82. digitalWrite(pinRB, LOW);
  83. digitalWrite(pinRF, HIGH);
  84. digitalWrite(pinLB, LOW);
  85. digitalWrite(pinLF, HIGH);
  86. delay(10);
  87. }
  88. void back()
  89. {
  90. digitalWrite(pinRB, LOW);
  91. digitalWrite(pinRF, HIGH);
  92. digitalWrite(pinLB, HIGH);
  93. digitalWrite(pinLF, LOW);
  94. delay(10);
  95. }
  96. void advance()
  97. {
  98. digitalWrite(pinRB, HIGH);
  99. digitalWrite(pinRF, LOW );
  100. digitalWrite(pinLB, LOW);
  101. digitalWrite(pinLF, HIGH);
  102. delay(10);
  103. }
  104. void stopp()
  105. {
  106. digitalWrite(pinRB, HIGH);
  107. digitalWrite(pinRF, HIGH);
  108. digitalWrite(pinLB, HIGH);
  109. digitalWrite(pinLF, HIGH);
  110. delay(10);
  111. }
  112. void turnL()
  113. {
  114. digitalWrite(pinRB, HIGH);
  115. digitalWrite(pinRF, LOW);
  116. digitalWrite(pinLB, HIGH);
  117. digitalWrite(pinLF, LOW);
  118. delay(10);
  119. }
  120.  
  121. void setup()
  122. {
  123. Serial.begin(9600);
  124. lcd.init();
  125. lcd.backlight();
  126. lcd.setCursor(0, 0);
  127. lcd.print("Hello, world!");
  128. IO_config();
  129. stopp();
  130. delay(5000);// milli Second
  131. lcd.clear();
  132. lcd.setCursor(0, 0);
  133. lcd.print("Counter:");
  134. lcd.setCursor(0, 1);
  135. lcd.print(counter);
  136. }
  137.  
  138. void Sensor_Scan(void)
  139. {
  140. SL = digitalRead(SensorLeft);
  141. SM = digitalRead(SensorMiddle);
  142. SR = digitalRead(SensorRight);
  143. Serial.print(SL);
  144. Serial.print(SM);
  145. Serial.println(SR);
  146. }
  147.  
  148. void loop()
  149. {
  150. Sensor_Scan();
  151. US();
  152. showDataOnLCD();
  153. if (distance > maxDistance && counter < 7) {
  154. ///////////////////////////////////////////////////////////////////////////////
  155. if (SM == 0)// middle sensor in black area
  156. {
  157. if (SL == 1 & SR == 0) // black on left, white on right, turn left
  158. {
  159. turnR();
  160. }
  161. else if (SR == 1 & SL == 0) // white on left, black on right, turn right
  162. {
  163. turnL();
  164. }
  165. else if (SR == 0 & SL == 0) {// all sensors BLACK
  166. counter = counter + 1;
  167. if (counter == 7) {
  168. stopp() ;
  169. }
  170. else {
  171. advance();
  172. delay(200);
  173. }
  174. }
  175. else // white on both sides, going forward
  176. {
  177. advance();
  178. }
  179. }
  180. ///////////////////////////////////////////////////////////////////////////////
  181. else // middle sensor on white area
  182. {
  183. if (SL == 1 & SR == 0) // black on left, white on right, turn left
  184. {
  185. turnR();
  186.  
  187. }
  188. else if (SR == 1 & SL == 0) // white on left, black on right, turn right
  189. {
  190. turnL();
  191.  
  192.  
  193. }
  194. else // all white or counter is equal to 7, stop
  195. {
  196. stopp() ;
  197. delay(100);
  198. }
  199. }
  200. ///////////////////////////////////////////////////////////////////////////////
  201. }
  202.  
  203. else {
  204. stopp();
  205. delay(2000);
  206. }
  207.  
  208. }//end of LOOP
  209.  
  210.  
  211. void US() {
  212. digitalWrite(tr, LOW);
  213. delayMicroseconds(5);
  214. digitalWrite(tr, HIGH);
  215. delayMicroseconds(10);
  216. digitalWrite(tr, LOW);
  217. duration = pulseIn(ec, HIGH);
  218. distance = duration * 0.034 / 2;
  219. Serial.print("Distance = ");
  220. Serial.print(distance);
  221. Serial.println(" cm");
  222. }
  223.  
  224. void showDataOnLCD() {
  225. lcd.clear();
  226. lcd.setCursor(0, 0);
  227. lcd.print("Counter: ");
  228. lcd.print(counter);
  229. //lcd.setCursor(0, 1);
  230. //lcd.print("Distance: ");
  231. //lcd.print(distance);
  232. //lcd.print(" cm");
  233. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement