Advertisement
Guest User

Untitled

a guest
Oct 19th, 2019
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.21 KB | None | 0 0
  1. #include <Servo.h>
  2. Servo servo;
  3.  
  4. #define SERVO_PIN 11
  5. #define LED 13
  6. #define BUZZER 10
  7. #define PRZYCISK 2
  8. #define L_DIR 4
  9. #define L_VEL 5
  10. #define R_DIR 9
  11. #define R_VEL 6
  12. #define TRIG_PIN 7
  13. #define ECHO_PIN 8
  14.  
  15. #define LEFT 0
  16. #define RIGHT 1
  17.  
  18. void setup() {
  19. pinMode(LED, OUTPUT);
  20. pinMode(BUZZER, OUTPUT);
  21. pinMode(PRZYCISK, INPUT_PULLUP);
  22. digitalWrite(LED, LOW);
  23. digitalWrite(BUZZER, LOW);
  24.  
  25. pinMode(L_DIR, OUTPUT);
  26. pinMode(L_VEL, OUTPUT);
  27. pinMode(R_DIR, OUTPUT);
  28. pinMode(R_VEL, OUTPUT);
  29.  
  30. pinMode(TRIG_PIN, OUTPUT);
  31. pinMode(ECHO_PIN, INPUT);
  32.  
  33. servo.attach(SERVO_PIN);
  34.  
  35. digitalWrite(L_DIR, 0);
  36. analogWrite(L_VEL, 0);
  37. digitalWrite(R_DIR, 0);
  38. analogWrite(R_VEL, 0);
  39.  
  40. digitalWrite(TRIG_PIN, LOW);
  41.  
  42. delay(100);
  43. servo.write(90);
  44. delay(500);
  45. }
  46.  
  47. static void Forward(void){
  48. digitalWrite(L_DIR, 0);
  49. analogWrite(L_VEL, 100);
  50. digitalWrite(R_DIR, 0);
  51. analogWrite(R_VEL, 100);
  52.  
  53. delay(1000);
  54.  
  55. analogWrite(L_VEL, 0);
  56. analogWrite(R_VEL, 0);
  57. }
  58.  
  59. int Distance(){
  60. int czas, distance;
  61.  
  62. digitalWrite(TRIG_PIN, LOW);
  63. delayMicroseconds(2);
  64. digitalWrite(TRIG_PIN, HIGH);
  65. delayMicroseconds(10);
  66. digitalWrite(TRIG_PIN, LOW);
  67.  
  68. czas = pulseIn(ECHO_PIN, HIGH, 10000);
  69. if(czas == 0)
  70. czas = 10000;
  71. distance = czas / 58;
  72. return distance;
  73. }
  74.  
  75. void Turnleft (void){
  76.  
  77. digitalWrite(L_DIR, 1);
  78. analogWrite(L_VEL, 255-200);
  79.  
  80. delay(500);
  81.  
  82. digitalWrite(L_DIR, 0);
  83. analogWrite(L_VEL, 0);
  84. }
  85.  
  86. void Turnright (void){
  87.  
  88. digitalWrite(R_DIR, 1);
  89. analogWrite(R_VEL, 25-200);
  90.  
  91. delay(500);
  92.  
  93. digitalWrite(R_DIR, 0);
  94. analogWrite(R_VEL, 0);
  95. }
  96.  
  97.  
  98. bool Checkright(){
  99. servo.write(0);
  100. delay(500);
  101. bool ret = (Distance() > 30);
  102. servo.write(90);
  103. delay(400);
  104. return ret;
  105. }
  106.  
  107. bool Checkleft(){
  108. servo.write(180);
  109. delay(500);
  110. bool ret = (Distance() > 30);
  111. servo.write(90);
  112. delay(400);
  113. return ret;
  114. }
  115.  
  116. bool Checkforward() {
  117. servo.write(90);
  118. return (Distance() < 30);
  119. }
  120.  
  121. void Back(int i, int j, int *For, int *Tur){
  122. int dire, times_for;
  123. Turnright(); Turnright();
  124.  
  125. for( ; i>0 ; i--){
  126. times_for = For[i];
  127. for( ; times_for > 0; times_for--){
  128. Forward();
  129. }
  130. dire = Tur[j];
  131. if(dire == LEFT) Turnright();
  132. else Turnleft();
  133. j--;
  134. }
  135. }
  136.  
  137. void loop() {
  138. static int For[200], Tur[50]; // tablice 1: ile kroków do przodu, 2: w którą strone skręcił
  139. static int times_for = 0, i = 0, j = 0;
  140. Tur[0] = 0;
  141. if(!Checkforward()){
  142. times_for++;
  143. Forward();
  144. }
  145. else {
  146. For[i] = times_for;
  147. times_for = 0;
  148. i++;
  149. if(Tur[j] == LEFT){
  150. if(Checkright()) { Tur[j] = RIGHT; j++; Turnright();
  151. }
  152. else {
  153. if(Checkleft()){ Tur[j] = LEFT; j++; Turnleft();
  154. }
  155. else{ Back(i, j, &For[0], &Tur[0]);
  156. }
  157. }
  158. }
  159. else{
  160. if(Checkleft()){ Tur[j] = LEFT; j++; Turnleft();
  161. }
  162. else {
  163. if(Checkright()) { Tur[j] = RIGHT; j++; Turnright();
  164. }
  165. else{ Back(i, j, &For[0], &Tur[0]);
  166. }
  167. }
  168. }
  169. }
  170. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement