#include <IRremote.h>
#define IR_RECEIVE_PIN 3
#define RIGHT_FORWARD 4
#define RIGHT_BACKWARD 5
#define LEFT_FORWARD 7
#define LEFT_BACKWARD 6
#define TRIG_PIN A5
#define ECHO_PIN A4
#define BUZZER_PIN 11
// SMALL IR REMOTE
// #define UP_ARROW 24
// #define DOWN_ARROW 82
// #define LEFT_ARROW 8
// #define RIGHT_ARROW 90
// BIG IR REMOTE ===
#define UP_ARROW 22
#define DOWN_ARROW 26
#define LEFT_ARROW 81
#define RIGHT_ARROW 80
#define RIGHT_ARROW_1 1728
#define MIDDLE_ARROW 104
#define UP_VOLUME 7
#define DOWN_VOLUME 11
int Distance;
long previousMillis = 0;
long Interval = 400; // millis()
void setup() {
Serial.begin(115200);
IrReceiver.begin(IR_RECEIVE_PIN);
pinMode(LEFT_FORWARD, OUTPUT);
pinMode(LEFT_BACKWARD, OUTPUT);
pinMode(RIGHT_FORWARD, OUTPUT);
pinMode(RIGHT_BACKWARD, OUTPUT);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(BUZZER_PIN, OUTPUT);
BEEP();
BEEP();
}
void loop() {
checkdistance();
if (millis() - previousMillis > Interval) {
Stop();
Serial.println("=============== NOT RF");
}
if (IrReceiver.decode()) {
Serial.println("Receiver IR Code");
Serial.println(IrReceiver.decodedIRData.command);
previousMillis = millis();
if (IrReceiver.decodedIRData.command == DOWN_ARROW) {
Backward();
} else if (IrReceiver.decodedIRData.command == UP_ARROW) {
Forward();
}
if (IrReceiver.decodedIRData.command == LEFT_ARROW) {
LeftOneWheel();
} else if (IrReceiver.decodedIRData.command == RIGHT_ARROW) {
RightOneWheel();
}
IrReceiver.resume();
}
}
void checkdistance() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
Distance = pulseIn(ECHO_PIN, HIGH, 100000) / 58.00;
Serial.println(Distance);
delay(10);
if (Distance < 12) {
BEEP();
}
}
void BEEP() {
digitalWrite(BUZZER_PIN, HIGH);
delay(50);
digitalWrite(BUZZER_PIN, LOW);
delay(50);
}
void Forward() {
BEEP();
digitalWrite(RIGHT_FORWARD, HIGH);
digitalWrite(RIGHT_BACKWARD, LOW);
digitalWrite(LEFT_FORWARD, HIGH);
digitalWrite(LEFT_BACKWARD, LOW);
}
void Backward() {
BEEP();
digitalWrite(RIGHT_FORWARD, LOW);
digitalWrite(RIGHT_BACKWARD, HIGH);
digitalWrite(LEFT_FORWARD, LOW);
digitalWrite(LEFT_BACKWARD, HIGH);
}
void RightOneWheel() {
BEEP();
digitalWrite(RIGHT_FORWARD, LOW);
digitalWrite(RIGHT_BACKWARD, LOW);
digitalWrite(LEFT_FORWARD, HIGH);
digitalWrite(LEFT_BACKWARD, LOW);
}
void LeftOneWheel() {
BEEP();
digitalWrite(RIGHT_FORWARD, HIGH);
digitalWrite(RIGHT_BACKWARD, LOW);
digitalWrite(LEFT_FORWARD, LOW);
digitalWrite(LEFT_BACKWARD, LOW);
}
void Stop() {
digitalWrite(RIGHT_FORWARD, LOW);
digitalWrite(RIGHT_BACKWARD, LOW);
digitalWrite(LEFT_FORWARD, LOW);
digitalWrite(LEFT_BACKWARD, LOW);
}