Guest User

Untitled

a guest
Apr 25th, 2018
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.08 KB | None | 0 0
  1. #define SPEED_1 5 //left PWM
  2. #define DIR_1 4 //HIGH to forward
  3. #define SPEED_2 6 //right PWM
  4. #define DIR_2 7 //HIGH to forward
  5. #define gear_sound 70
  6. ///#define gear_1 160
  7. #define gear_1 250
  8. #define gear_2 250
  9. #define trigPin_left 3 //HC-SR04 Trig
  10. #define echoPin_left 2 //HC-SR04 Echo
  11. #define trigPin_right 9 //HC-SR04 Trig
  12. #define echoPin_right 8 //HC-SR04 Echo
  13. #define min_distance 35 //in centimetres
  14. #define breaking_rc '_'
  15. #define forward_rc 'w'
  16. #define back_rc 's'
  17. #define right_rc 'd'
  18. #define left_rc 'a'
  19. #define gear1_rc '<'
  20. #define gear2_rc '>'
  21. #define changmod_rc 'm'
  22. #define logging false
  23. char tmp = breaking_rc;
  24. bool manual = true; //is radio control enable
  25. byte cur_speed = gear_2;
  26. void forward(){
  27. digitalWrite(DIR_1, HIGH);
  28. digitalWrite(DIR_2, HIGH);
  29. analogWrite(SPEED_1, cur_speed);
  30. analogWrite(SPEED_2, cur_speed);
  31. }
  32. void breaking(){
  33. analogWrite(SPEED_1, 0);
  34. analogWrite(SPEED_2, 0);
  35. }
  36. void left(){
  37. digitalWrite(DIR_1, HIGH);
  38. digitalWrite(DIR_2, LOW);
  39. analogWrite(SPEED_1, cur_speed);
  40. analogWrite(SPEED_2, cur_speed);
  41. }
  42. void right(){
  43. digitalWrite(DIR_1, LOW);
  44. digitalWrite(DIR_2, HIGH);
  45. analogWrite(SPEED_1, cur_speed);
  46. analogWrite(SPEED_2, cur_speed);
  47. }
  48. void back(){
  49. digitalWrite(DIR_1, LOW);
  50. digitalWrite(DIR_2, LOW);
  51. analogWrite(SPEED_1, cur_speed);
  52. analogWrite(SPEED_2, cur_speed);
  53. }
  54. float distance_left(){
  55. digitalWrite(trigPin_left, LOW);
  56. delayMicroseconds(5); //2-5 ?s
  57. digitalWrite(trigPin_left, HIGH);
  58. delayMicroseconds(10); //10 ?s
  59. digitalWrite(trigPin_left, LOW);
  60. return pulseIn(echoPin_left, HIGH) / 58.2;
  61. }
  62. float distance_right(){
  63. digitalWrite(trigPin_right, LOW);
  64. delayMicroseconds(5); //2-5 ?s
  65. digitalWrite(trigPin_right, HIGH);
  66. delayMicroseconds(10); //10 ?s
  67. digitalWrite(trigPin_right, LOW);
  68. return pulseIn(echoPin_right, HIGH) / 58.2;
  69. }
  70. void setup() {
  71. for(int i = 4; i <= 7; i++)
  72. pinMode(i, OUTPUT);
  73. pinMode(12, INPUT);
  74. pinMode(trigPin_left, OUTPUT);
  75. pinMode(echoPin_left, INPUT);
  76. pinMode(trigPin_right, OUTPUT);
  77. pinMode(echoPin_right, INPUT);
  78. randomSeed(analogRead(0));
  79. if (logging) {
  80. Serial.begin(9600);
  81. while(!Serial);
  82. }
  83. Serial2.begin(9600);
  84. //=
  85. while(!Serial2);
  86. if (manual) {
  87. while (!Serial2.available());
  88. if (Serial2.read() == 'p') {
  89. Serial2.write('1');
  90. //=
  91. while (Serial2.read() != breaking_rc);
  92. analogWrite(SPEED_1, gear_sound);
  93. analogWrite(SPEED_2, gear_sound);
  94. delay(256);
  95. analogWrite(SPEED_1, 0);
  96. analogWrite(SPEED_2, 0);
  97. delay(128);
  98. analogWrite(SPEED_1, gear_sound);
  99. analogWrite(SPEED_2, gear_sound);
  100. delay(256);
  101. analogWrite(SPEED_1, 0);
  102. analogWrite(SPEED_2, 0);
  103. delay(128);
  104. analogWrite(SPEED_1, gear_sound);
  105. analogWrite(SPEED_2, gear_sound);
  106. delay(256);
  107. analogWrite(SPEED_1, 0);
  108. analogWrite(SPEED_2, 0);
  109. delay(128);
  110. analogWrite(SPEED_1, gear_sound);
  111. analogWrite(SPEED_2, gear_sound);
  112. delay(128);
  113. analogWrite(SPEED_1, 0);
  114. analogWrite(SPEED_2, 0);
  115. delay(64);
  116. analogWrite(SPEED_1, gear_sound);
  117. analogWrite(SPEED_2, gear_sound);
  118. delay(128);
  119. analogWrite(SPEED_1, 0);
  120. analogWrite(SPEED_2, 0);
  121. delay(64);
  122. analogWrite(SPEED_1, gear_sound);
  123. analogWrite(SPEED_2, gear_sound);
  124. delay(128);
  125. analogWrite(SPEED_1, 0);
  126. analogWrite(SPEED_2, 0);
  127. }
  128. } else {
  129. analogWrite(SPEED_1, gear_sound);
  130. analogWrite(SPEED_2, gear_sound);
  131. delay(256);
  132. analogWrite(SPEED_1, 0);
  133. analogWrite(SPEED_2, 0);
  134. delay(256);
  135. analogWrite(SPEED_1, gear_sound);
  136. analogWrite(SPEED_2, gear_sound);
  137. delay(512);
  138. analogWrite(SPEED_1, 0);
  139. analogWrite(SPEED_2, 0);
  140. Serial2.write('0');
  141. }
  142. }
  143. void loop() {
  144. if (manual) {
  145. while (Serial2.available()){
  146. tmp = Serial2.read();
  147. if (logging) {
  148. Serial.print(tmp);
  149. Serial.print(" $ ");
  150. Serial.print(distance_left());
  151. Serial.print(" - ");
  152. Serial.println(distance_right());
  153. }
  154. switch (tmp) {
  155. case forward_rc:
  156. forward();
  157. break;
  158. case back_rc:
  159. back();
  160. break;
  161. case right_rc:
  162. right();
  163. break;
  164. case left_rc:
  165. left();
  166. break;
  167. case gear1_rc:
  168. cur_speed = gear_1;
  169. break;
  170. case gear2_rc:
  171. cur_speed = gear_2;
  172. break;
  173. case changmod_rc:
  174. cur_speed = gear_1;//чтобы сам ездил медленно
  175. manual = !manual;
  176. break;
  177. default:
  178. breaking();
  179. break;
  180. }
  181. }
  182. //breaking();
  183. } else {
  184. if (Serial2.read() == changmod_rc)
  185. manual = !manual;
  186. if ((distance_left() < min_distance) || (distance_right() < min_distance)) {
  187. breaking();
  188. if (distance_left() >= distance_right())
  189. left();
  190. else
  191. right();
  192. //delay(256);//продолжительность автоповорота
  193. } else {
  194. //ran = random();
  195. forward();
  196. }
  197. }
  198. }
Add Comment
Please, Sign In to add comment