Advertisement
Guest User

Untitled

a guest
Oct 20th, 2019
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.46 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){ // poruszenie się do przodu o jedno pole
  48. digitalWrite(L_DIR, 0);
  49. analogWrite(L_VEL, 100);
  50. digitalWrite(R_DIR, 0);
  51. analogWrite(R_VEL, 100);
  52.  
  53. delay(500); // czas w którym robot pokona jedno pole ( do wyznaczenia)
  54.  
  55. analogWrite(L_VEL, 0);
  56. analogWrite(R_VEL, 0);
  57.  
  58. delay(500);
  59. }
  60.  
  61. int Distance(){ // pomiar odległości
  62. int czas, distance;
  63.  
  64. digitalWrite(TRIG_PIN, LOW);
  65. delayMicroseconds(2);
  66. digitalWrite(TRIG_PIN, HIGH);
  67. delayMicroseconds(10);
  68. digitalWrite(TRIG_PIN, LOW);
  69.  
  70. czas = pulseIn(ECHO_PIN, HIGH, 10000);
  71. if(czas == 0)
  72. czas = 10000;
  73. distance = czas / 58;
  74. return distance;
  75. }
  76.  
  77. void Turnleft (void){ // Skręcanie w lewo (do tyłu dla lepszego pola manewru
  78.  
  79. digitalWrite(L_DIR, 1);
  80. analogWrite(L_VEL, 255-200);
  81.  
  82. delay(300);
  83.  
  84. digitalWrite(L_DIR, 0);
  85. analogWrite(L_VEL, 0);
  86. }
  87.  
  88. void Turnright (void){
  89.  
  90. digitalWrite(R_DIR, 1);
  91. analogWrite(R_VEL, 25-200);
  92.  
  93. delay(300);
  94.  
  95. digitalWrite(R_DIR, 0);
  96. analogWrite(R_VEL, 0);
  97. }
  98.  
  99.  
  100. bool Checkright(){ // obrót serva w prawo i zczytanie odległości
  101. servo.write(0);
  102. delay(500);
  103. bool ret = (Distance() > 30);
  104. servo.write(90);
  105. delay(400);
  106. return ret;
  107. }
  108.  
  109. bool Checkleft(){
  110. servo.write(180);
  111. delay(500);
  112. bool ret = (Distance() > 30);
  113. servo.write(90);
  114. delay(400);
  115. return ret;
  116. }
  117.  
  118. bool Checkforward() {
  119. servo.write(90);
  120. return (Distance() > 30);
  121. }
  122.  
  123. void Back(int i, int j, int *For, int *Tur){ // tryb powrotu
  124. int dire, times_for;
  125. Turnright(); Turnright();
  126.  
  127. for( ; i>0 ; i--){
  128. times_for = For[i];
  129. for( ; times_for > 0; times_for--){
  130. Forward();
  131. }
  132. dire = Tur[j];
  133. if(dire == LEFT) Turnright();
  134. else Turnleft();
  135. j--;
  136. }
  137. }
  138.  
  139. void loop() {
  140. static int For[200], Tur[50]; // tablice 1: ile kroków do przodu, 2: w którą strone skręcił
  141. static int times_for = 0, i = 0, j = 0;
  142. Tur[0] = 0;
  143. if(Checkforward()){
  144. times_for++;
  145. Forward();
  146. }
  147. else {
  148. For[i] = times_for;
  149. times_for = 0;
  150. i++;
  151. if(Tur[j] == LEFT){
  152. if(Checkright()) { Tur[j] = RIGHT; j++; Turnright();
  153. }
  154. else {
  155. if(Checkleft()){ Tur[j] = LEFT; j++; Turnleft();
  156. }
  157. else{ Back(i, j, For[0], Tur[0]);
  158. }
  159. }
  160. }
  161. else{
  162. if(Checkleft()){ Tur[j] = LEFT; j++; Turnleft();
  163. }
  164. else {
  165. if(Checkright()) { Tur[j] = RIGHT; j++; Turnright();
  166. }
  167. else{ Back(i, j, For[0], Tur[0]);
  168. }
  169. }
  170. }
  171. }
  172. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement