Advertisement
Guest User

Untitled

a guest
Apr 25th, 2019
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.73 KB | None | 0 0
  1.  
  2.  
  3.  
  4. #include <Servo.h>
  5.  
  6. // piny dla sonaru (HC-SR04)
  7. #define TRIG A4
  8. #define ECHO A5
  9.  
  10. // pin kontroli serwo (musi być PWM)
  11. #define SERVO 3
  12.  
  13. Servo serwo;
  14.  
  15. int stops_1 ;
  16. int speeds = 60;
  17. int trap = 0 ;
  18. void setup() {
  19.  
  20. stops_1 = 0;
  21.  
  22. //PRAWE
  23. pinMode(9, OUTPUT); // ENB
  24. pinMode(4, OUTPUT); //IN4
  25. pinMode(5, OUTPUT); //IN3
  26.  
  27. //LEWE
  28. pinMode(7, OUTPUT); //IN2
  29. pinMode(8, OUTPUT); //IN1
  30. pinMode(11, OUTPUT); //ENA
  31.  
  32.  
  33.  
  34. pinMode(TRIG, OUTPUT); // TRIG startuje sonar
  35. pinMode(ECHO, INPUT); // ECHO odbiera powracający impuls
  36.  
  37. Serial.begin(9600);
  38.  
  39. serwo.attach(SERVO);
  40.  
  41. /* rozejrzyj się w zakresie od 0 stopni (patrz na jedną burtę)
  42. * do 180 stopni (patrz na prawą burtę). Wydrukuj na konsoli
  43. * kierunek patrzenia i najbliżej widziany obiekt (pojedynczy pomiar)
  44. */
  45. for(byte angle = 0; angle < 180; angle+= 20) {
  46. //lookAndTellDistance(angle);
  47. delay(500);
  48. }
  49.  
  50. /* patrz przed siebie */
  51. serwo.write(90);
  52.  
  53.  
  54.  
  55. backward();
  56. // analogWrite(11, 0);
  57. // analogWrite(9, 0);
  58. //setSpeed(50);
  59.  
  60.  
  61. delay(100);
  62.  
  63. }
  64.  
  65. /*
  66. * for(byte angle = 0; angle < 180; angle+= 10) {
  67. lookAndTellDistance(angle);
  68. */
  69. void loop() {
  70.  
  71. /* nic nie rób */
  72.  
  73. for(byte angle = 40; angle <90; angle+= 1) {
  74.  
  75. lookAndTellDistance(angle);
  76. if(trap)
  77. {
  78. while(true)
  79. follow(angle);
  80. break;
  81. }
  82. }
  83.  
  84.  
  85.  
  86. delay(200);
  87.  
  88.  
  89.  
  90.  
  91.  
  92. }
  93.  
  94. void follow(byte angle){
  95.  
  96. unsigned long tot; // czas powrotu (time-of-travel)
  97. unsigned int distance;
  98.  
  99. Serial.print("Patrzę w kącie ");
  100. Serial.print(angle);
  101. serwo.write(angle);
  102.  
  103. /* uruchamia sonar (puls 10 ms na `TRIGGER')
  104. * oczekuje na powrotny sygnał i aktualizuje
  105. */
  106. digitalWrite(TRIG, HIGH);
  107. delay(10);
  108. digitalWrite(TRIG, LOW);
  109. tot = pulseIn(ECHO, HIGH);
  110.  
  111.  
  112. /* prędkość dźwięku = 340m/s => 1 cm w 29 mikrosekund
  113. * droga tam i z powrotem, zatem:
  114. */
  115. distance = tot/58;
  116.  
  117.  
  118. int distance_old = distance ;
  119. delay(200);
  120. digitalWrite(TRIG, HIGH);
  121. delay(10);
  122. digitalWrite(TRIG, LOW);
  123. tot = pulseIn(ECHO, HIGH);
  124.  
  125.  
  126. /* prędkość dźwięku = 340m/s => 1 cm w 29 mikrosekund
  127. * droga tam i z powrotem, zatem:
  128. */
  129. distance = tot/58;
  130.  
  131. if(distance > distance_old)
  132. backward();
  133. else
  134. forward();
  135.  
  136.  
  137.  
  138.  
  139. }
  140.  
  141.  
  142. void lookAndTellDistance(byte angle) {
  143.  
  144.  
  145. unsigned long tot; // czas powrotu (time-of-travel)
  146. unsigned int distance;
  147.  
  148. Serial.print("Patrzę w kącie ");
  149. Serial.print(angle);
  150. serwo.write(angle);
  151.  
  152. /* uruchamia sonar (puls 10 ms na `TRIGGER')
  153. * oczekuje na powrotny sygnał i aktualizuje
  154. */
  155. digitalWrite(TRIG, HIGH);
  156. delay(10);
  157. digitalWrite(TRIG, LOW);
  158. tot = pulseIn(ECHO, HIGH);
  159.  
  160. /* prędkość dźwięku = 340m/s => 1 cm w 29 mikrosekund
  161. * droga tam i z powrotem, zatem:
  162. */
  163. distance = tot/58;
  164.  
  165. byte angle_old = angle;
  166. if(distance < 500 && distance!=0 ) {
  167. trap = 1;
  168.  
  169. if(distance > 100 && speeds > 10){
  170. speeds = speeds - 10;
  171. analogWrite(9, speeds);
  172. analogWrite(11, speeds);
  173.  
  174. }
  175. else stops();
  176.  
  177. //if(distance > 100) {
  178.  
  179.  
  180. // setSpeed(speeds);
  181. // }
  182.  
  183. // stops();
  184. /*
  185. for(int i= 0; i<10; i++) {
  186. angle = angle + 10*i;
  187.  
  188. digitalWrite(TRIG, HIGH);
  189. delay(10);
  190. digitalWrite(TRIG, LOW);
  191. tot = pulseIn(ECHO, HIGH);
  192. distance = tot/58;
  193. if(distance > 50)
  194. {
  195. if(angle < 90) {
  196. turnleft();
  197. }
  198. else
  199. {
  200. turnright();
  201. }
  202.  
  203. break;
  204. }
  205.  
  206. angle = angle -10 - 10*i;
  207.  
  208. digitalWrite(TRIG, HIGH);
  209. delay(10);
  210. digitalWrite(TRIG, LOW);
  211. tot = pulseIn(ECHO, HIGH);
  212. distance = tot/58;
  213. if(distance > 50)
  214. {
  215. if(angle < 90) {
  216. turnright();
  217. }
  218. else
  219. {
  220. turnleft();
  221. }
  222.  
  223. break;
  224. }
  225.  
  226. angle = angle + 10*i;
  227. }
  228.  
  229. if(angle_old == angle)
  230. {
  231. forward();
  232. delay(100);
  233. turnleft();
  234. delay(100);
  235. backward();
  236.  
  237. }
  238. */
  239.  
  240. }
  241. else {
  242. speeds = speeds + 10;
  243. analogWrite(9, speeds);
  244. analogWrite(11, speeds);
  245. }
  246.  
  247. //if(stops && distance > 100)
  248. //backward();
  249.  
  250. Serial.print(": widzę coś w odległości ");
  251. Serial.println(distance);
  252. Serial.println(speeds);
  253. }
  254.  
  255.  
  256. void forward() {
  257. //dobrze
  258. digitalWrite(9,HIGH);
  259. digitalWrite(4,LOW);
  260. digitalWrite(5,HIGH);
  261.  
  262. digitalWrite(7,HIGH);
  263. digitalWrite(8,LOW);
  264. digitalWrite(11,HIGH);
  265.  
  266. stops_1 = 0;
  267. }
  268.  
  269.  
  270. void turnleft() {
  271.  
  272. backward();
  273.  
  274.  
  275. digitalWrite(9,LOW);
  276. digitalWrite(4,LOW);
  277. digitalWrite(5,LOW);
  278.  
  279. delay(200);
  280.  
  281. digitalWrite(9,HIGH);
  282. digitalWrite(4,LOW);
  283. digitalWrite(5,HIGH);
  284.  
  285.  
  286. }
  287.  
  288. void setSpeed(int speeds){
  289. analogWrite(11, 0);
  290. analogWrite(9, 0);
  291.  
  292. }
  293. void turnright() {
  294.  
  295. forward();
  296.  
  297. digitalWrite(7,LOW);
  298. digitalWrite(8,LOW);
  299. digitalWrite(11,LOW);
  300.  
  301.  
  302. delay(900);
  303.  
  304. digitalWrite(7,HIGH);
  305. digitalWrite(8,LOW);
  306. digitalWrite(11,HIGH);
  307.  
  308. }
  309.  
  310.  
  311. void stops() {
  312. //dobrze
  313. digitalWrite(9,LOW);
  314. digitalWrite(4,LOW);
  315. digitalWrite(5,LOW);
  316.  
  317. digitalWrite(7,LOW);
  318. digitalWrite(8,LOW);
  319. digitalWrite(11,LOW);
  320.  
  321. stops_1 =1;
  322.  
  323.  
  324. }
  325. void backward() {
  326.  
  327.  
  328. digitalWrite(9,HIGH);
  329. digitalWrite(4,HIGH);
  330. digitalWrite(5,LOW);
  331.  
  332. digitalWrite(7,LOW);
  333. digitalWrite(8,HIGH);
  334. digitalWrite(11,HIGH);
  335.  
  336.  
  337. stops_1 = 0;
  338.  
  339. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement