Advertisement
mesmariusz

auto_005

Jul 28th, 2018
216
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.02 KB | None | 0 0
  1. #include <IRremote.h>
  2. #define irPin 11
  3. #define go_time 1000
  4. #define turn_time 200
  5. #define motor_left_A 2
  6. #define motor_left_B 3
  7. #define motor_right_A 4
  8. #define motor_right_B 5
  9. #define reset_button 6
  10. #define pin_for_sign_post_left 7
  11. #define pin_for_sign_post_right 8
  12.  
  13. IRrecv irrecv(irPin);
  14. decode_results results;
  15. unsigned long current_ms;
  16.  
  17. unsigned long sign_post_left_star_ms;
  18. unsigned long sign_post_right_star_ms;
  19. const unsigned long sign_post_period = 666;
  20. byte sign_post_left_enable = 0;
  21. byte sign_post_right_enable = 0;
  22.  
  23. unsigned long go_start_ms;
  24. const unsigned long go_period = 500;
  25. byte go_enable = 0;
  26.  
  27. unsigned long back_start_ms;
  28. const unsigned long back_period = 500;
  29. byte back_enable = 0;
  30.  
  31. unsigned long left_start_ms;
  32. const unsigned long left_period = 270;
  33. byte left_enable = 0;
  34.  
  35. unsigned long right_start_ms;
  36. const unsigned long right_period = 270;
  37. byte right_enable = 0;
  38.  
  39. uint32_t code_go = 50190375;
  40. uint32_t code_back = 50198535;
  41. uint32_t code_left = 50165895;
  42. uint32_t code_right = 50157735;
  43.  
  44.  
  45. void setup() {
  46. Serial.begin(9600);
  47. irrecv.enableIRIn();
  48. pinMode(motor_left_A, OUTPUT);
  49. pinMode(motor_left_B, OUTPUT);
  50. pinMode(motor_right_A, OUTPUT);
  51. pinMode(motor_right_B, OUTPUT);
  52. pinMode(reset_button, INPUT);
  53. pinMode(pin_for_sign_post_left, OUTPUT);
  54. pinMode(pin_for_sign_post_right, OUTPUT);
  55. if (digitalRead(reset_button) == LOW) {
  56. reset();
  57. }
  58. }
  59.  
  60. void go() {
  61. digitalWrite(motor_left_A, LOW);
  62. digitalWrite(motor_left_B, HIGH);
  63. digitalWrite(motor_right_A, LOW);
  64. digitalWrite(motor_right_B, HIGH);
  65. }
  66.  
  67. void back() {
  68. digitalWrite(motor_left_A, HIGH);
  69. digitalWrite(motor_left_B, LOW);
  70. digitalWrite(motor_right_A, HIGH);
  71. digitalWrite(motor_right_B, LOW);
  72. }
  73.  
  74. void left() {
  75. digitalWrite(motor_left_A, LOW);
  76. digitalWrite(motor_left_B, HIGH);
  77. digitalWrite(motor_right_A, HIGH);
  78. digitalWrite(motor_right_B, LOW);
  79. }
  80.  
  81. void right() {
  82. digitalWrite(motor_left_A, HIGH);
  83. digitalWrite(motor_left_B, LOW);
  84. digitalWrite(motor_right_A, LOW);
  85. digitalWrite(motor_right_B, HIGH);
  86. }
  87.  
  88. void stop() {
  89. digitalWrite(motor_left_A, LOW);
  90. digitalWrite(motor_left_B, LOW);
  91. digitalWrite(motor_right_A, LOW);
  92. digitalWrite(motor_right_B, LOW);
  93. }
  94.  
  95. void sign_post_left() {
  96. if (sign_post_left_enable == 0x1 && sign_post_right_enable == 0x1 ) {
  97. sign_post_left_enable = 0x0;
  98. sign_post_right_enable = 0x0;
  99. digitalWrite(pin_for_sign_post_left, LOW);
  100. digitalWrite(pin_for_sign_post_right, LOW);
  101. }
  102. switch (sign_post_left_enable) {
  103. case 0x0 :
  104. sign_post_left_enable = 1;
  105. sign_post_right_enable = 0;
  106. break;
  107. case 0x1 :
  108. sign_post_left_enable = 0;
  109. sign_post_right_enable = 0;
  110. digitalWrite(pin_for_sign_post_left, LOW);
  111. digitalWrite(pin_for_sign_post_right, LOW);
  112. break;
  113. }
  114. }
  115.  
  116. void sign_post_right() {
  117. if (sign_post_left_enable == 0x1 && sign_post_right_enable == 0x1 ) {
  118. sign_post_left_enable = 0x0;
  119. sign_post_right_enable = 0x0;
  120. digitalWrite(pin_for_sign_post_left, LOW);
  121. digitalWrite(pin_for_sign_post_right, LOW);
  122. }
  123. switch (sign_post_right_enable) {
  124. case 0x0 :
  125. sign_post_right_enable = 1;
  126. sign_post_left_enable = 0;
  127. break;
  128. case 0x1 :
  129. sign_post_right_enable = 0;
  130. sign_post_left_enable = 0;
  131. digitalWrite(pin_for_sign_post_right, LOW);
  132. digitalWrite(pin_for_sign_post_left, LOW);
  133. break;
  134. }
  135. }
  136.  
  137. void sign_post_both() {
  138. // if (sign_post_left_enable == 0x1 || sign_post_right_enable == 0x1 ) {
  139. // sign_post_left_enable = 0x0;
  140. // sign_post_right_enable = 0x0;
  141. // digitalWrite(pin_for_sign_post_left, LOW);
  142. // digitalWrite(pin_for_sign_post_right, LOW);
  143. // }
  144. switch (sign_post_right_enable) {
  145. case 0x0 :
  146. sign_post_right_enable = 1;
  147. sign_post_left_enable = 1;
  148. break;
  149. case 0x1 :
  150. sign_post_right_enable = 0;
  151. sign_post_left_enable = 0;
  152. digitalWrite(pin_for_sign_post_right, LOW);
  153. digitalWrite(pin_for_sign_post_left, LOW);
  154. break;
  155. }
  156. }
  157.  
  158. void reset() {
  159. Serial.println("Programowanie pilota");
  160. go();
  161. back();
  162. left();
  163. right();
  164. stop();
  165. }
  166.  
  167.  
  168.  
  169. void loop() {
  170. if (irrecv.decode(&results)) {
  171.  
  172. Serial.print("0x");
  173. Serial.println(results.value, HEX);
  174. //delay(250);
  175.  
  176.  
  177. // sprawdzanie kodow RC5
  178. switch (results.value) {
  179.  
  180. // dol
  181. code_back = results.value;
  182. case 0x2FDF807 :
  183. Serial.println("back");
  184. Serial.println(results.value);
  185. back_enable = 1;
  186. back_start_ms = millis();
  187. back();
  188. break;
  189.  
  190. // gora
  191. case code_go :
  192. Serial.println("go");
  193. Serial.println(results.value);
  194. Serial.println(code_go);
  195.  
  196. go_enable = 1;
  197. go_start_ms = millis();
  198. go();
  199. break;
  200.  
  201. // lewo
  202. case 0x2FD58A7 :
  203. Serial.println("left");
  204. Serial.println(results.value);
  205. left_enable = 1;
  206. left_start_ms = millis();
  207. left();
  208. break;
  209.  
  210. //prawo
  211. case 0x2FD7887 :
  212. Serial.println("right");
  213. Serial.println(results.value);
  214. right_enable = 1;
  215. right_start_ms = millis();
  216. right();
  217. break;
  218.  
  219. //kierunkowskaz lewy
  220. case 0x2FD807F :
  221. Serial.println("sign post left");
  222. sign_post_left();
  223. break;
  224.  
  225. //kierunkowskaz prawy
  226. case 0x2FDC03F :
  227. Serial.println("sign post right");
  228. sign_post_right();
  229. break;
  230.  
  231. //awaryjne
  232. case 0x2FD40BF :
  233. Serial.println("sign post both");
  234. sign_post_both();
  235. break;
  236.  
  237. //stop
  238. case 0x2FD48B7 :
  239. stop();
  240. break;
  241. }
  242.  
  243. irrecv.resume();
  244. }
  245.  
  246. // obsluga kierunkowskazu
  247. if (sign_post_left_enable == 0x1 || sign_post_right_enable == 0x1 ) {
  248. current_ms = millis(); //pobierz i zapisz do zmiennej liczbę milisekund jaka upłynęła od czasu włączenia Arduino
  249. if (current_ms - sign_post_left_star_ms >= sign_post_period) //jeśli aktualna liczba milisekund po odjęciu startowych milisekund przekracza liczbę zadeklarowaną w zmiennej sign_post_period milisekund
  250. {
  251. if (sign_post_left_enable == 0x1) { digitalWrite(pin_for_sign_post_left, !digitalRead(pin_for_sign_post_left)); //przełącz stan kierunkowskazu
  252. }
  253. if (sign_post_right_enable == 0x1) { digitalWrite(pin_for_sign_post_right, !digitalRead(pin_for_sign_post_right)); //przełącz stan kierunkowskazu
  254. }
  255. sign_post_left_star_ms = current_ms; //ustaw liczbę startowych milisekund na bieżącą wartość milisekund (od startu Arduino)
  256. }
  257. }
  258.  
  259. // obsluga jazdy do przodu
  260. if (go_enable == 0x1) {
  261. current_ms = millis(); //pobierz i zapisz do zmiennej liczbę milisekund jaka upłynęła od czasu włączenia Arduino
  262. if (current_ms - go_start_ms >= go_period) //jeśli aktualna liczba milisekund po odjęciu startowych milisekund przekracza liczbę zadeklarowaną w zmiennej period milisekund
  263. {
  264. stop();
  265. go_enable = 0;
  266. }
  267. }
  268.  
  269.  
  270. // obsluga jazdy do tyłu
  271. if (back_enable == 0x1) {
  272. current_ms = millis(); //pobierz i zapisz do zmiennej liczbę milisekund jaka upłynęła od czasu włączenia Arduino
  273. if (current_ms - back_start_ms >= go_period) //jeśli aktualna liczba milisekund po odjęciu startowych milisekund przekracza liczbę zadeklarowaną w zmiennej period milisekund
  274. {
  275. stop();
  276. back_enable = 0;
  277. }
  278. }
  279.  
  280.  
  281. // obsluga jazdy w prawo
  282. if (right_enable == 0x1) {
  283. current_ms = millis(); //pobierz i zapisz do zmiennej liczbę milisekund jaka upłynęła od czasu włączenia Arduino
  284. if (current_ms - right_start_ms >= right_period) //jeśli aktualna liczba milisekund po odjęciu startowych milisekund przekracza liczbę zadeklarowaną w zmiennej period milisekund
  285. {
  286. stop();
  287. right_enable = 0;
  288. }
  289. }
  290.  
  291. // obsluga jazdy w lewo
  292. if (left_enable == 0x1) {
  293. current_ms = millis(); //pobierz i zapisz do zmiennej liczbę milisekund jaka upłynęła od czasu włączenia Arduino
  294. if (current_ms - left_start_ms >= left_period) //jeśli aktualna liczba milisekund po odjęciu startowych milisekund przekracza liczbę zadeklarowaną w zmiennej period milisekund
  295. {
  296. stop();
  297. left_enable = 0;
  298. }
  299. }
  300.  
  301. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement