Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <IRremote.h>
- #define irPin 11
- #define go_time 1000
- #define turn_time 200
- #define motor_left_A 2
- #define motor_left_B 3
- #define motor_right_A 4
- #define motor_right_B 5
- #define reset_button 6
- #define pin_for_sign_post_left 7
- #define pin_for_sign_post_right 8
- IRrecv irrecv(irPin);
- decode_results results;
- unsigned long current_ms;
- unsigned long sign_post_left_star_ms;
- unsigned long sign_post_right_star_ms;
- const unsigned long sign_post_period = 666;
- byte sign_post_left_enable = 0;
- byte sign_post_right_enable = 0;
- unsigned long go_start_ms;
- const unsigned long go_period = 500;
- byte go_enable = 0;
- unsigned long back_start_ms;
- const unsigned long back_period = 500;
- byte back_enable = 0;
- unsigned long left_start_ms;
- const unsigned long left_period = 270;
- byte left_enable = 0;
- unsigned long right_start_ms;
- const unsigned long right_period = 270;
- byte right_enable = 0;
- uint32_t code_go = 50190375;
- uint32_t code_back = 50198535;
- uint32_t code_left = 50165895;
- uint32_t code_right = 50157735;
- void setup() {
- Serial.begin(9600);
- irrecv.enableIRIn();
- pinMode(motor_left_A, OUTPUT);
- pinMode(motor_left_B, OUTPUT);
- pinMode(motor_right_A, OUTPUT);
- pinMode(motor_right_B, OUTPUT);
- pinMode(reset_button, INPUT);
- pinMode(pin_for_sign_post_left, OUTPUT);
- pinMode(pin_for_sign_post_right, OUTPUT);
- if (digitalRead(reset_button) == LOW) {
- reset();
- }
- }
- void go() {
- digitalWrite(motor_left_A, LOW);
- digitalWrite(motor_left_B, HIGH);
- digitalWrite(motor_right_A, LOW);
- digitalWrite(motor_right_B, HIGH);
- }
- void back() {
- digitalWrite(motor_left_A, HIGH);
- digitalWrite(motor_left_B, LOW);
- digitalWrite(motor_right_A, HIGH);
- digitalWrite(motor_right_B, LOW);
- }
- void left() {
- digitalWrite(motor_left_A, LOW);
- digitalWrite(motor_left_B, HIGH);
- digitalWrite(motor_right_A, HIGH);
- digitalWrite(motor_right_B, LOW);
- }
- void right() {
- digitalWrite(motor_left_A, HIGH);
- digitalWrite(motor_left_B, LOW);
- digitalWrite(motor_right_A, LOW);
- digitalWrite(motor_right_B, HIGH);
- }
- void stop() {
- digitalWrite(motor_left_A, LOW);
- digitalWrite(motor_left_B, LOW);
- digitalWrite(motor_right_A, LOW);
- digitalWrite(motor_right_B, LOW);
- }
- void sign_post_left() {
- if (sign_post_left_enable == 0x1 && sign_post_right_enable == 0x1 ) {
- sign_post_left_enable = 0x0;
- sign_post_right_enable = 0x0;
- digitalWrite(pin_for_sign_post_left, LOW);
- digitalWrite(pin_for_sign_post_right, LOW);
- }
- switch (sign_post_left_enable) {
- case 0x0 :
- sign_post_left_enable = 1;
- sign_post_right_enable = 0;
- break;
- case 0x1 :
- sign_post_left_enable = 0;
- sign_post_right_enable = 0;
- digitalWrite(pin_for_sign_post_left, LOW);
- digitalWrite(pin_for_sign_post_right, LOW);
- break;
- }
- }
- void sign_post_right() {
- if (sign_post_left_enable == 0x1 && sign_post_right_enable == 0x1 ) {
- sign_post_left_enable = 0x0;
- sign_post_right_enable = 0x0;
- digitalWrite(pin_for_sign_post_left, LOW);
- digitalWrite(pin_for_sign_post_right, LOW);
- }
- switch (sign_post_right_enable) {
- case 0x0 :
- sign_post_right_enable = 1;
- sign_post_left_enable = 0;
- break;
- case 0x1 :
- sign_post_right_enable = 0;
- sign_post_left_enable = 0;
- digitalWrite(pin_for_sign_post_right, LOW);
- digitalWrite(pin_for_sign_post_left, LOW);
- break;
- }
- }
- void sign_post_both() {
- // if (sign_post_left_enable == 0x1 || sign_post_right_enable == 0x1 ) {
- // sign_post_left_enable = 0x0;
- // sign_post_right_enable = 0x0;
- // digitalWrite(pin_for_sign_post_left, LOW);
- // digitalWrite(pin_for_sign_post_right, LOW);
- // }
- switch (sign_post_right_enable) {
- case 0x0 :
- sign_post_right_enable = 1;
- sign_post_left_enable = 1;
- break;
- case 0x1 :
- sign_post_right_enable = 0;
- sign_post_left_enable = 0;
- digitalWrite(pin_for_sign_post_right, LOW);
- digitalWrite(pin_for_sign_post_left, LOW);
- break;
- }
- }
- void reset() {
- Serial.println("Programowanie pilota");
- go();
- back();
- left();
- right();
- stop();
- }
- void loop() {
- if (irrecv.decode(&results)) {
- Serial.print("0x");
- Serial.println(results.value, HEX);
- //delay(250);
- // sprawdzanie kodow RC5
- switch (results.value) {
- // dol
- code_back = results.value;
- case 0x2FDF807 :
- Serial.println("back");
- Serial.println(results.value);
- back_enable = 1;
- back_start_ms = millis();
- back();
- break;
- // gora
- case code_go :
- Serial.println("go");
- Serial.println(results.value);
- Serial.println(code_go);
- go_enable = 1;
- go_start_ms = millis();
- go();
- break;
- // lewo
- case 0x2FD58A7 :
- Serial.println("left");
- Serial.println(results.value);
- left_enable = 1;
- left_start_ms = millis();
- left();
- break;
- //prawo
- case 0x2FD7887 :
- Serial.println("right");
- Serial.println(results.value);
- right_enable = 1;
- right_start_ms = millis();
- right();
- break;
- //kierunkowskaz lewy
- case 0x2FD807F :
- Serial.println("sign post left");
- sign_post_left();
- break;
- //kierunkowskaz prawy
- case 0x2FDC03F :
- Serial.println("sign post right");
- sign_post_right();
- break;
- //awaryjne
- case 0x2FD40BF :
- Serial.println("sign post both");
- sign_post_both();
- break;
- //stop
- case 0x2FD48B7 :
- stop();
- break;
- }
- irrecv.resume();
- }
- // obsluga kierunkowskazu
- if (sign_post_left_enable == 0x1 || sign_post_right_enable == 0x1 ) {
- current_ms = millis(); //pobierz i zapisz do zmiennej liczbę milisekund jaka upłynęła od czasu włączenia Arduino
- 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
- {
- if (sign_post_left_enable == 0x1) { digitalWrite(pin_for_sign_post_left, !digitalRead(pin_for_sign_post_left)); //przełącz stan kierunkowskazu
- }
- if (sign_post_right_enable == 0x1) { digitalWrite(pin_for_sign_post_right, !digitalRead(pin_for_sign_post_right)); //przełącz stan kierunkowskazu
- }
- sign_post_left_star_ms = current_ms; //ustaw liczbę startowych milisekund na bieżącą wartość milisekund (od startu Arduino)
- }
- }
- // obsluga jazdy do przodu
- if (go_enable == 0x1) {
- current_ms = millis(); //pobierz i zapisz do zmiennej liczbę milisekund jaka upłynęła od czasu włączenia Arduino
- 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
- {
- stop();
- go_enable = 0;
- }
- }
- // obsluga jazdy do tyłu
- if (back_enable == 0x1) {
- current_ms = millis(); //pobierz i zapisz do zmiennej liczbę milisekund jaka upłynęła od czasu włączenia Arduino
- 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
- {
- stop();
- back_enable = 0;
- }
- }
- // obsluga jazdy w prawo
- if (right_enable == 0x1) {
- current_ms = millis(); //pobierz i zapisz do zmiennej liczbę milisekund jaka upłynęła od czasu włączenia Arduino
- 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
- {
- stop();
- right_enable = 0;
- }
- }
- // obsluga jazdy w lewo
- if (left_enable == 0x1) {
- current_ms = millis(); //pobierz i zapisz do zmiennej liczbę milisekund jaka upłynęła od czasu włączenia Arduino
- 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
- {
- stop();
- left_enable = 0;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement