Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- IRremote: IRrecvDemo - demonstrates receiving IR codes with IRrecv
- An IR detector/demodulator must be connected to the input RECV_PIN.
- Version 0.1 July, 2009
- Copyright 2009 Ken Shirriff
- http://arcfn.com
- */
- #include <IRremote.h>
- #define OK_BUTTON 1217346747
- #define BUTTON_PRESSED 4294967295
- #define DOWN 465573243
- #define LEFT 2351064443
- #define RIGHT 71952287
- #define UP 1033561079
- #define STAR 3238126971
- #define HASHTAG 4039382595
- #define ONE 16753245
- #define TWO 16736925
- #define THREE 4001918335
- int RECV_PIN = 13;
- int LED_left = 2;
- int LED_right = 3;
- int trackSensor_left_Analog = 0;
- int trackSensor_right_Analog = 1;
- int buzzer = 7; //to be terminated
- int ultraSound_Trig = 2;
- int ultraSound_Echo = 3;
- int powerCircuit = 11;
- int IN1 = 8; // vasak
- int IN2 = 9;
- int IN3 = 10; // parem
- int IN4 = 12;
- int ENA = 5;
- int ENB = 6;
- int mode = 0;
- //int oldMode = 0;
- /*
- 0 - stop
- 1 - forward
- 2 - back
- 3 - left
- 4 - right
- */
- IRrecv irrecv(RECV_PIN);
- decode_results results;
- void setup()
- {
- Serial.begin(9600);
- irrecv.enableIRIn(); // Start the receiver
- pinMode(1, OUTPUT);
- pinMode(LED_left, OUTPUT);
- pinMode(LED_right, OUTPUT);
- pinMode(4, OUTPUT);
- pinMode(5, OUTPUT);
- pinMode(6, OUTPUT);
- //pinMode(7, OUTPUT);
- pinMode(IN1, OUTPUT);
- pinMode(IN2, OUTPUT);
- pinMode(IN3, OUTPUT);
- pinMode(11, OUTPUT);
- pinMode(IN4, OUTPUT);
- pinMode(RECV_PIN, INPUT);
- set_motorspeed(230, 170);
- }
- void loop()
- {
- if (irrecv.decode(&results))
- {
- Serial.println(results.value, DEC);
- irrecv.resume(); // Receive the next value
- switch (results.value)
- {
- // First four case look if any new buttons have been pressed
- case UP:
- mode = 1;
- break;
- case DOWN:
- mode = 2;
- break;
- case LEFT:
- mode = 3;
- break;
- case RIGHT:
- mode = 4;
- break;
- // This one checks if the reciever just got the repeat sign, in which case is just repeats the last command
- case BUTTON_PRESSED:
- mode = mode;
- break;
- // If no interesting input is recieved then will switch to "stop" mode
- default:
- mode = 0;
- break;
- }
- switch (mode) //This switch then executes whichever mode was selected by the input switch
- {
- case 1:
- go_ahead();
- break;
- case 2:
- go_back();
- break;
- case 3:
- turn_left();
- break;
- case 4:
- turn_right();
- break;
- }
- }
- go_stop(); //As a final thing in the loop, the program resets everything to stop mode values.
- }
- void go_ahead() //motor rotate clockwise -->robot go ahead
- {
- digitalWrite(IN1, LOW);
- digitalWrite(IN2, HIGH);
- digitalWrite(IN3, LOW);
- digitalWrite(IN4, HIGH);
- digitalWrite(LED_left, LOW);
- digitalWrite(LED_right, LOW);
- delay(200);
- }
- void go_back() //motor rotate counterclockwise -->robot go back
- {
- digitalWrite(IN1, HIGH);
- digitalWrite(IN2, LOW);
- digitalWrite(IN3, HIGH);
- digitalWrite(IN4, LOW);
- digitalWrite(LED_left, HIGH);
- digitalWrite(LED_right, HIGH);
- delay(200);
- }
- void go_stop() //motor brake -->robot stop
- {
- digitalWrite(IN1, LOW);
- digitalWrite(IN2, LOW);
- digitalWrite(IN3, LOW);
- digitalWrite(IN4, LOW);
- digitalWrite(LED_left, HIGH);
- digitalWrite(LED_right, HIGH);
- //delay(15);
- }
- void turn_left() //left motor rotate counterclockwise and right motor rotate clockwise -->robot turn left
- {
- digitalWrite(IN1, HIGH); //Left motor goes in reverse
- digitalWrite(IN2, LOW);
- digitalWrite(IN3, LOW);
- digitalWrite(IN4, HIGH); //Right motor goes in forward
- digitalWrite(LED_left, LOW);
- digitalWrite(LED_right, HIGH);
- delay(200); //This delay is approximately the time between two IR signals plus some padding for the remote control to appear silky smooth
- }
- void turn_right() //left motor rotate clockwise and right motor rotate counterclockwise -->robot turn right
- {
- digitalWrite(IN1, LOW);
- digitalWrite(IN2, HIGH);
- digitalWrite(IN3, HIGH);
- digitalWrite(IN4, LOW);
- digitalWrite(LED_left, HIGH);
- digitalWrite(LED_right, LOW);
- delay(200);
- }
- /*set motor speed */
- void set_motorspeed(int lspeed, int rspeed) //change motor speed
- {
- analogWrite(ENA, lspeed); //lspeed:0-255
- analogWrite(ENB, rspeed); //rspeed:0-255
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement