mesmariusz

Auto5_002

Jul 28th, 2018
508
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 11.81 KB | None | 0 0
  1. #include <IRremote.h>
  2. #include <EEPROM.h>
  3.  
  4. #define irPin 11
  5. #define go_time 1000
  6. #define turn_time 200
  7. #define motor_left_A 2
  8. #define motor_left_B 3
  9. #define motor_right_A 4
  10. #define motor_right_B 5
  11. #define reset_button 6
  12. #define pin_for_sign_post_left 7
  13. #define pin_for_sign_post_right 8
  14.  
  15. IRrecv irrecv(irPin);
  16. decode_results results;
  17. unsigned long current_ms;
  18.  
  19. unsigned long sign_post_left_star_ms;
  20. unsigned long sign_post_right_star_ms;
  21. const unsigned long sign_post_period = 666;
  22. byte sign_post_left_enable = 0;
  23. byte sign_post_right_enable = 0;
  24.  
  25. unsigned long go_start_ms;
  26. const unsigned long go_period = 500;
  27. byte go_enable = 0;
  28.  
  29. unsigned long back_start_ms;
  30. const unsigned long back_period = 500;
  31. byte back_enable = 0;
  32.  
  33. unsigned long left_start_ms;
  34. const unsigned long left_period = 270;
  35. byte left_enable = 0;
  36.  
  37. unsigned long right_start_ms;
  38. const unsigned long right_period = 270;
  39. byte right_enable = 0;
  40.  
  41. const uint32_t code_go = 50190375;
  42. const uint32_t code_back = 50198535;
  43. const uint32_t code_left = 50165895;
  44. const uint32_t code_right = 50157735;
  45. const uint32_t code_sign_left = 50167935;
  46. const uint32_t code_sign_right = 50184255;
  47. const uint32_t code_sign_both = 50151615;
  48.  
  49.  
  50.  
  51. //Funcje
  52.  
  53. void EEPROMWritelong(int address, long value)
  54.       {
  55.       //Decomposition from a long to 4 bytes by using bitshift.
  56.       //One = Most significant -> Four = Least significant byte
  57.       byte four = (value & 0xFF);
  58.       byte three = ((value >> 8) & 0xFF);
  59.       byte two = ((value >> 16) & 0xFF);
  60.       byte one = ((value >> 24) & 0xFF);
  61.  
  62.       //Write the 4 bytes into the eeprom memory.
  63.       EEPROM.write(address, four);
  64.       EEPROM.write(address + 1, three);
  65.       EEPROM.write(address + 2, two);
  66.       EEPROM.write(address + 3, one);
  67.       }
  68.  
  69. long EEPROMReadlong(long address)
  70.       {
  71.       //Read the 4 bytes from the eeprom memory.
  72.       long four = EEPROM.read(address);
  73.       long three = EEPROM.read(address + 1);
  74.       long two = EEPROM.read(address + 2);
  75.       long one = EEPROM.read(address + 3);
  76.  
  77.       //Return the recomposed long by using bitshift.
  78.       return ((four << 0) & 0xFF) + ((three << 8) & 0xFFFF) + ((two << 16) & 0xFFFFFF) + ((one << 24) & 0xFFFFFFFF);
  79.       }
  80.  
  81.  
  82.  
  83. void setup() {
  84.   Serial.begin(9600);
  85.   irrecv.enableIRIn();
  86.   pinMode(motor_left_A, OUTPUT);
  87.   pinMode(motor_left_B, OUTPUT);
  88.   pinMode(motor_right_A, OUTPUT);
  89.   pinMode(motor_right_B, OUTPUT);
  90.   pinMode(reset_button, INPUT);
  91.   pinMode(pin_for_sign_post_left, OUTPUT);
  92.   pinMode(pin_for_sign_post_right, OUTPUT);
  93.   if (digitalRead(reset_button) == LOW) {
  94.     reset();
  95.   }
  96. }
  97.  
  98. void go() {
  99.   digitalWrite(motor_left_A, LOW);
  100.   digitalWrite(motor_left_B, HIGH);
  101.   digitalWrite(motor_right_A, LOW);
  102.   digitalWrite(motor_right_B, HIGH);
  103. }
  104.  
  105. void back() {
  106.   digitalWrite(motor_left_A, HIGH);
  107.   digitalWrite(motor_left_B, LOW);
  108.   digitalWrite(motor_right_A, HIGH);
  109.   digitalWrite(motor_right_B, LOW);
  110. }
  111.  
  112. void left() {
  113.   digitalWrite(motor_left_A, LOW);
  114.   digitalWrite(motor_left_B, HIGH);
  115.   digitalWrite(motor_right_A, HIGH);
  116.   digitalWrite(motor_right_B, LOW);
  117. }
  118.  
  119. void right() {
  120.   digitalWrite(motor_left_A, HIGH);
  121.   digitalWrite(motor_left_B, LOW);
  122.   digitalWrite(motor_right_A, LOW);
  123.   digitalWrite(motor_right_B, HIGH);
  124. }
  125.  
  126. void stop() {
  127.   digitalWrite(motor_left_A, LOW);
  128.   digitalWrite(motor_left_B, LOW);
  129.   digitalWrite(motor_right_A, LOW);
  130.   digitalWrite(motor_right_B, LOW);
  131. }
  132.  
  133. void sign_post_left() {
  134.   if (sign_post_left_enable == 0x1 && sign_post_right_enable == 0x1 ) {
  135.     sign_post_left_enable = 0x0;
  136.     sign_post_right_enable = 0x0;
  137.     digitalWrite(pin_for_sign_post_left, LOW);
  138.     digitalWrite(pin_for_sign_post_right, LOW);
  139.   }
  140.   switch (sign_post_left_enable) {    
  141.       case 0x0 :
  142.       sign_post_left_enable = 1;
  143.       sign_post_right_enable = 0;
  144.       break;
  145.       case 0x1 :
  146.       sign_post_left_enable = 0;
  147.       sign_post_right_enable = 0;
  148.       digitalWrite(pin_for_sign_post_left, LOW);
  149.       digitalWrite(pin_for_sign_post_right, LOW);
  150.       break;
  151.   }  
  152. }
  153.  
  154. void sign_post_right() {
  155.   if (sign_post_left_enable == 0x1 && sign_post_right_enable == 0x1 ) {
  156.     sign_post_left_enable = 0x0;
  157.     sign_post_right_enable = 0x0;
  158.     digitalWrite(pin_for_sign_post_left, LOW);
  159.     digitalWrite(pin_for_sign_post_right, LOW);    
  160.   }
  161.   switch (sign_post_right_enable) {    
  162.       case 0x0 :
  163.       sign_post_right_enable = 1;
  164.       sign_post_left_enable = 0;
  165.       break;
  166.       case 0x1 :
  167.       sign_post_right_enable = 0;
  168.       sign_post_left_enable = 0;
  169.       digitalWrite(pin_for_sign_post_right, LOW);
  170.       digitalWrite(pin_for_sign_post_left, LOW);
  171.       break;
  172.   }
  173. }
  174.  
  175. void sign_post_both() {
  176. //  if (sign_post_left_enable == 0x1 || sign_post_right_enable == 0x1 ) {
  177. //    sign_post_left_enable = 0x0;
  178. //    sign_post_right_enable = 0x0;
  179. //    digitalWrite(pin_for_sign_post_left, LOW);
  180. //    digitalWrite(pin_for_sign_post_right, LOW);    
  181. //  }  
  182.   switch (sign_post_right_enable) {
  183.       case 0x0 :
  184.       sign_post_right_enable = 1;
  185.       sign_post_left_enable = 1;
  186.       break;
  187.       case 0x1 :
  188.       sign_post_right_enable = 0;
  189.       sign_post_left_enable = 0;
  190.       digitalWrite(pin_for_sign_post_right, LOW);
  191.       digitalWrite(pin_for_sign_post_left, LOW);
  192.       break;
  193.   }
  194. }
  195.  
  196. void reset() {
  197.  
  198.   long address=0;
  199.  
  200.   Serial.println("Programowanie pilota");
  201.  
  202.   byte zaprogramowano = 0;
  203.  
  204.   Serial.println("Programowanie: przod");
  205.   zaprogramowano = 0;
  206.   go();
  207.   while (zaprogramowano == 0) {
  208.     if (irrecv.decode(&results)) {
  209.       EEPROMWritelong(0, results.value);
  210.       stop();
  211.       delay(1000);
  212.       irrecv.resume();
  213.       Serial.println("Zaprogramowano");
  214.       zaprogramowano = 1;  
  215.     }
  216.   }
  217.  
  218.   Serial.println("Programowanie: tyl");  
  219.   zaprogramowano = 0;
  220.   back();
  221.   while (zaprogramowano == 0) {
  222.     if (irrecv.decode(&results)) {  
  223.       EEPROMWritelong(4, results.value);
  224.       stop();
  225.       delay(1000);
  226.       irrecv.resume();
  227.       Serial.println("Zaprogramowano");
  228.       zaprogramowano = 1;  
  229.     }  
  230.   }
  231.  
  232.   Serial.println("Programowanie: prawo");  
  233.   zaprogramowano = 0;
  234.   right();
  235.   while (zaprogramowano == 0) {
  236.     if (irrecv.decode(&results)) {  
  237.       EEPROMWritelong(12, results.value);
  238.       stop();
  239.       delay(1000);
  240.       irrecv.resume();
  241.       Serial.println("Zaprogramowano");
  242.       zaprogramowano = 1;  
  243.     }  
  244.   }
  245.  
  246.   Serial.println("Programowanie: lewo");  
  247.   zaprogramowano = 0;
  248.   left();
  249.   while (zaprogramowano == 0) {
  250.     if (irrecv.decode(&results)) {  
  251.       EEPROMWritelong(8, results.value);
  252.       stop();
  253.       delay(1000);
  254.       irrecv.resume();
  255.       Serial.println("Zaprogramowano");
  256.       zaprogramowano = 1;  
  257.     }  
  258.   }
  259.  
  260.   Serial.println("Programowanie: kierunkowskaz lewy");  
  261.   zaprogramowano = 0;
  262.   digitalWrite(pin_for_sign_post_left, 1);
  263.   while (zaprogramowano == 0) {
  264.     if (irrecv.decode(&results)) {  
  265.       EEPROMWritelong(16, results.value);
  266.       stop();
  267.       delay(1000);
  268.       irrecv.resume();
  269.       Serial.println("Zaprogramowano");
  270.       digitalWrite(pin_for_sign_post_left, 0);
  271.       zaprogramowano = 1;  
  272.     }  
  273.   }
  274.  
  275.   Serial.println("Programowanie: kierunkowskaz prawy");  
  276.   zaprogramowano = 0;
  277.   digitalWrite(pin_for_sign_post_right, 1);
  278.   while (zaprogramowano == 0) {
  279.     if (irrecv.decode(&results)) {  
  280.       EEPROMWritelong(20, results.value);
  281.       stop();
  282.       delay(1000);
  283.       irrecv.resume();
  284.       Serial.println("Zaprogramowano");
  285.       digitalWrite(pin_for_sign_post_right, 0);
  286.       zaprogramowano = 1;  
  287.     }  
  288.   }
  289.  
  290.   Serial.println("Programowanie: awaryjne");  
  291.   zaprogramowano = 0;
  292.   digitalWrite(pin_for_sign_post_left, 1);
  293.   digitalWrite(pin_for_sign_post_right, 1);
  294.   while (zaprogramowano == 0) {
  295.     if (irrecv.decode(&results)) {  
  296.       EEPROMWritelong(24, results.value);
  297.       stop();
  298.       delay(1000);
  299.       irrecv.resume();
  300.       Serial.println("Zaprogramowano");
  301.       digitalWrite(pin_for_sign_post_left, 0);
  302.       digitalWrite(pin_for_sign_post_right, 0);
  303.       zaprogramowano = 1;  
  304.     }  
  305.   }  
  306.  
  307. stop();
  308.  
  309.  
  310.   Serial.println("Odczytuje z EEPROM:");
  311.   address=0;
  312.   Serial.println(EEPROMReadlong(address));
  313.   address+=4;
  314.   Serial.println(EEPROMReadlong(address));
  315.   address+=4;
  316.   Serial.println(EEPROMReadlong(address));
  317.   address+=4;
  318.   Serial.println(EEPROMReadlong(address));
  319.   address+=4;
  320.   Serial.println(EEPROMReadlong(address));
  321.   address+=4;
  322.   Serial.println(EEPROMReadlong(address));
  323.   address+=4;
  324.   Serial.println(EEPROMReadlong(address));
  325. }
  326.  
  327.  
  328.  
  329. void loop() {
  330.  
  331.   if (irrecv.decode(&results)) {
  332.  
  333.   //Serial.print("0x");
  334.   //Serial.println(results.value);
  335.   //delay(250);
  336.    
  337.  
  338.   // sprawdzanie kodow RC5
  339.  
  340.   if (results.value == EEPROMReadlong(0)) {
  341.       Serial.println("go");
  342.       go_enable = 1;
  343.       go_start_ms = millis();
  344.       go();
  345.   }
  346.  
  347.   if (results.value == EEPROMReadlong(4)) {
  348.       Serial.println("back");
  349.       back_enable = 1;
  350.       back_start_ms = millis();
  351.       back();
  352.   }
  353.  
  354.   if (results.value == EEPROMReadlong(8)) {
  355.       Serial.println("left");
  356.       left_enable = 1;
  357.       left_start_ms = millis();
  358.       left();
  359.   }
  360.  
  361.   if (results.value == EEPROMReadlong(12)) {
  362.       Serial.println("right");
  363.       right_enable = 1;
  364.       right_start_ms = millis();
  365.       right();
  366.   }
  367.  
  368.   if (results.value == EEPROMReadlong(16)) {
  369.       Serial.println("sign post left");
  370.       sign_post_left();
  371.   }
  372.  
  373.   if (results.value == EEPROMReadlong(20)) {
  374.       Serial.println("sign post right");
  375.       sign_post_right();
  376.   }
  377.  
  378.   if (results.value == EEPROMReadlong(24)) {
  379.       Serial.println("sign post both");
  380.       sign_post_both();
  381.   }
  382.    
  383.     irrecv.resume();  
  384.   }
  385.  
  386. // obsluga kierunkowskazu
  387.   if (sign_post_left_enable == 0x1 || sign_post_right_enable == 0x1 ) {
  388.     current_ms = millis();  //pobierz i zapisz do zmiennej liczbę milisekund jaka upłynęła od czasu włączenia Arduino
  389.     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
  390.     {
  391.       if (sign_post_left_enable == 0x1) { digitalWrite(pin_for_sign_post_left, !digitalRead(pin_for_sign_post_left));  //przełącz stan kierunkowskazu
  392.       }
  393.       if (sign_post_right_enable == 0x1) { digitalWrite(pin_for_sign_post_right, !digitalRead(pin_for_sign_post_right));  //przełącz stan kierunkowskazu
  394.       }
  395.       sign_post_left_star_ms = current_ms;  //ustaw liczbę startowych milisekund na bieżącą wartość milisekund (od startu Arduino)
  396.     }
  397.   }
  398.  
  399. // obsluga jazdy do przodu
  400.   if (go_enable == 0x1) {
  401.     current_ms = millis();  //pobierz i zapisz do zmiennej liczbę milisekund jaka upłynęła od czasu włączenia Arduino
  402.     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
  403.     {
  404.       stop();
  405.       go_enable = 0;
  406.     }
  407.   }
  408.  
  409.  
  410. // obsluga jazdy do tyłu
  411.   if (back_enable == 0x1) {
  412.     current_ms = millis();  //pobierz i zapisz do zmiennej liczbę milisekund jaka upłynęła od czasu włączenia Arduino
  413.     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
  414.     {
  415.       stop();
  416.       back_enable = 0;
  417.     }
  418.   }
  419.  
  420.  
  421. // obsluga jazdy w prawo
  422.   if (right_enable == 0x1) {
  423.     current_ms = millis();  //pobierz i zapisz do zmiennej liczbę milisekund jaka upłynęła od czasu włączenia Arduino
  424.     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
  425.     {
  426.       stop();
  427.       right_enable = 0;
  428.     }
  429.   }  
  430.  
  431. // obsluga jazdy w lewo
  432.   if (left_enable == 0x1) {
  433.     current_ms = millis();  //pobierz i zapisz do zmiennej liczbę milisekund jaka upłynęła od czasu włączenia Arduino
  434.     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
  435.     {
  436.       stop();
  437.       left_enable = 0;
  438.     }
  439.   }
  440.  
  441. }
Advertisement
Add Comment
Please, Sign In to add comment