Advertisement
safwan092

Untitled

Jun 20th, 2022
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.79 KB | None | 0 0
  1. #define ENA 5 //must be PWM (~)
  2. #define IN1 2
  3. #define IN2 3
  4. #define IN3 4
  5. #define IN4 7
  6. #define ENB 6 //must be PWM (~)
  7. #define SensorLeft 9
  8. #define SensorMiddle 10
  9. #define SensorRight 11
  10. #define redLED 12
  11.  
  12. int mSpeed = 150; //0-255
  13. int flag = 0; // Start/Close | ON/OFF
  14. int L = 0; // Move/Stop
  15.  
  16. byte com = 0; //reply from voice recognition
  17.  
  18. unsigned char SL;// Left Sensor Value | 1 = Black | 0 = White
  19. unsigned char SM;// Middle Sensor Value | 1 = Black | 0 = White
  20. unsigned char SR;// Right Sensor Value | 1 = Black | 0 = White
  21.  
  22. void setup() {
  23. Serial.begin(9600);
  24. IO_config();
  25. stopp();
  26. delay(5000);
  27. Serial.write(0xAA);
  28. Serial.write(0x37);//Switch to Compact Mode
  29. delay(2000);
  30. Serial.write(0xAA);
  31. Serial.write(0x23);//Import group 3 and be ready for voice instruction
  32. delay(2000);
  33. }
  34.  
  35. void loop() {
  36.  
  37. Sensor_Scan();
  38. if (flag == 1 && L == 1) {
  39. followLine();
  40. }
  41. while (Serial.available())
  42. {
  43. com = Serial.read();
  44.  
  45. switch (com)
  46. {
  47. case 0x11:
  48. //START/ON
  49. flag = 1;
  50. digitalWrite(redLED, 1);
  51. break;
  52. case 0x12:
  53. //CLOSE/OFF
  54. flag = 0;
  55. L = 0;
  56. digitalWrite(redLED, 0);
  57. break;
  58. case 0x13:
  59. //MOVE
  60. if (flag == 1) {
  61. L = 1;
  62. //Sensor_Scan();
  63. //followLine();
  64. }
  65. break;
  66. case 0x14:
  67. //STOP
  68. L = 0;
  69. stopp();
  70. break;
  71. case 0x15:
  72. //G
  73. stopp();
  74. break;
  75. }// end of SWITCH
  76. }
  77.  
  78. }// end of LOOP
  79.  
  80. void right() {
  81. digitalWrite(IN1, 1);
  82. digitalWrite(IN2, 0);
  83. digitalWrite(IN3, 1);
  84. digitalWrite(IN4, 0);
  85. }
  86.  
  87. void left() {
  88. digitalWrite(IN1, 0);
  89. digitalWrite(IN2, 1);
  90. digitalWrite(IN3, 0);
  91. digitalWrite(IN4, 1);
  92. }
  93.  
  94. void front() {
  95. digitalWrite(IN1, 1);
  96. digitalWrite(IN2, 0);
  97. digitalWrite(IN3, 0);
  98. digitalWrite(IN4, 1);
  99. }
  100.  
  101. void back() {
  102. digitalWrite(IN1, 0);
  103. digitalWrite(IN2, 1);
  104. digitalWrite(IN3, 1);
  105. digitalWrite(IN4, 0);
  106. }
  107.  
  108. void stopp() {
  109. digitalWrite(IN1, 0);
  110. digitalWrite(IN2, 0);
  111. digitalWrite(IN3, 0);
  112. digitalWrite(IN4, 0);
  113. }
  114.  
  115.  
  116. void IO_config(void) {
  117. pinMode(SensorLeft, INPUT);
  118. pinMode(SensorMiddle, INPUT);
  119. pinMode(SensorRight, INPUT);
  120. pinMode(ENA, OUTPUT);
  121. pinMode(IN1, OUTPUT);
  122. pinMode(IN2, OUTPUT);
  123. pinMode(IN3, OUTPUT);
  124. pinMode(IN4, OUTPUT);
  125. pinMode(ENB, OUTPUT);
  126. pinMode(redLED, OUTPUT);
  127. digitalWrite(redLED, 0);
  128. analogWrite(ENA, mSpeed); //0-255
  129. analogWrite(ENB, mSpeed); //0-255
  130. }
  131.  
  132. void Sensor_Scan(void) {
  133. SL = digitalRead(SensorLeft);
  134. SM = digitalRead(SensorMiddle);
  135. SR = digitalRead(SensorRight);
  136. }
  137.  
  138. void followLine() {
  139. ///////////////////////////////////////////////////////////////////////////////
  140. if (SM == 1)// middle sensor in black area
  141. {
  142. if (SL == 0 & SR == 1) // black on left, white on right, turn left
  143. {
  144. right();
  145. }
  146. else if (SR == 0 & SL == 1) // white on left, black on right, turn right
  147. {
  148. left();
  149. }
  150. else if (SR == 1 & SL == 1) {// all sensors BLACK
  151. stopp() ;
  152. }
  153. else // white on both sides, going forward
  154. {
  155. front();
  156. }
  157. }
  158. ///////////////////////////////////////////////////////////////////////////////
  159. else // middle sensor on white area
  160. {
  161. if (SL == 0 & SR == 1) // black on left, white on right, turn left
  162. {
  163. right();
  164. }
  165. else if (SR == 0 & SL == 1) // white on left, black on right, turn right
  166. {
  167. left();
  168. }
  169. else // all white or counter is equal to 7, stop
  170. {
  171. stopp() ;
  172. }
  173. }
  174. ///////////////////////////////////////////////////////////////////////////////
  175. }//end of function
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement