// Hook up Motors // Motor 1 int dir1PinA = 2; int dir2PinA = 3; int speedPinA = 9; // Needs to be a PWM pin to be able to control motor speed // Motor 2 int dir1PinB = 4; int dir2PinB = 5; int speedPinB = 10; // Needs to be a PWM pin to be able to control motor speed // Hook up IR Reciver #include "IRremote.h" const int RECV_PIN = 11; // Signal Pin of IR receiver to Arduino Digital Pin 11 IRrecv irrecv(RECV_PIN); // create instance of 'irrecv' decode_results results; // create instance of 'decode_results' // Hook up LCD #include LiquidCrystal lcd(A0, A1, A2, A3, A4, A5); // Hook up sonar #define trigPin 7 #define echoPin 6 float duration, distance; // Start the servo motor // #include // int servoPin = 12; // Servo servo; // int servoAngle = 0; // servo position in degrees void setup() { Serial.begin (9600); // LCD screen setup lcd.begin(16, 2); lcd.setCursor(0,1); lcd.write("Hello Master!!!"); delay(1000); // Sensor setup pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); //L298N Setup pinMode(dir1PinA,OUTPUT); pinMode(dir2PinA,OUTPUT); pinMode(speedPinA,OUTPUT); pinMode(dir1PinB,OUTPUT); pinMode(dir2PinB,OUTPUT); pinMode(speedPinB,OUTPUT); // Start the IR reciver irrecv.enableIRIn(); // Start the receiver irrecv.blink13(true); //Blink if the recive code // Start the servo motor // servo.attach(servoPin); } void loop() { // Write a pulse to the HC-SR04 Trigger Pin digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); // Measure the response from the HC-SR04 Echo Pin duration = pulseIn(echoPin, HIGH); // Determine distance from duration // Use 343 metres per second as speed of sound distance = (duration / 2) * 0.0343; // Send results to Serial Monitor Serial.print("Distance = "); if (distance < 5 || distance < 1) { if (irrecv.decode(&results)) { //bot moves backward if(results.value==0xFFA857) { analogWrite(speedPinA, 180);//Sets speed variable via PWM digitalWrite(dir1PinA, LOW); digitalWrite(dir2PinA, HIGH); analogWrite(speedPinB, 255); digitalWrite(dir1PinB, LOW); digitalWrite(dir2PinB, HIGH); } //bot moves forward if(results.value==0xFF629D) { analogWrite(speedPinA, 180); digitalWrite(dir1PinA, HIGH); digitalWrite(dir2PinA, LOW); analogWrite(speedPinB, 180); digitalWrite(dir1PinB, HIGH); digitalWrite(dir2PinB, LOW); } //bot moves left if(results.value==0xFFC23D) { analogWrite(speedPinA, 0);//Sets speed variable via PWM digitalWrite(dir1PinA, LOW); digitalWrite(dir2PinA, LOW); analogWrite(speedPinB, 180); digitalWrite(dir1PinB, HIGH); digitalWrite(dir2PinB, LOW); } //bot moves right if(results.value==0xFF22DD) { analogWrite(speedPinA, 180);//Sets speed variable via PWM digitalWrite(dir1PinA, HIGH); digitalWrite(dir2PinA, LOW); analogWrite(speedPinB, 0); digitalWrite(dir1PinB, LOW); digitalWrite(dir2PinB, LOW); } //bot stops if(results.value==0xFFA25D) { analogWrite(speedPinA, 0); digitalWrite(dir1PinA, LOW); digitalWrite(dir2PinA, LOW); analogWrite(speedPinB, 0); digitalWrite(dir1PinB, LOW); digitalWrite(dir2PinB, LOW); } //bot rotate clockwise if(results.value==0xFFE01F) { analogWrite(speedPinA, 200); digitalWrite(dir1PinA, LOW); digitalWrite(dir2PinA, HIGH); analogWrite(speedPinB, 200); digitalWrite(dir1PinB, HIGH); digitalWrite(dir2PinB, LOW); } //bot rotate counteclockwise if(results.value==0xFF906F) { analogWrite(speedPinA, 200); digitalWrite(dir1PinA, HIGH); digitalWrite(dir2PinA, LOW); analogWrite(speedPinB, 200); digitalWrite(dir1PinB, LOW); digitalWrite(dir2PinB, HIGH); } //roger roger if(results.value==0xFF9867) { lcd.setCursor(0,1); lcd.write("Roger, Roger!!"); delay(2000); lcd.clear(); } //amazed if(results.value==0xFF6897) { lcd.setCursor(0,0); lcd.write("WaaaaaAAAAAAAwWW"); delay(2000); lcd.setCursor(0,1); lcd.write("WaAAaaAAaaWWWW!!"); delay(2000); lcd.clear(); } //scared if(results.value==0xFF30CF) { lcd.setCursor(0,0); lcd.write("AaaaaaAAAAAAAaaa"); delay(2000); lcd.setCursor(0,1); lcd.write("aaAAaaAAaaaaAA!!"); delay(2000); lcd.clear(); } //sad if(results.value==0xFF18E7) { lcd.setCursor(0,1); lcd.write("I'm sad, :("); delay(2000); lcd.clear(); } //introduction if(results.value==0xFFB04F) { lcd.setCursor(0,0); lcd.write("Good morning! :)"); lcd.setCursor(0,1); lcd.write("My name is BFR."); delay(2000); lcd.clear(); } irrecv.resume(); // Receive the next value } } else { Serial.print(distance); Serial.println(" cm"); moveStop(); lcd.clear(); lcd.setCursor(0,1); lcd.write("Im scared!!!"); lcd.setCursor(0,0); lcd.write("It's too high!!!"); moveBackward(); delay(2000); moveSpin(); delay(4000); moveStop(); lcd.clear(); lcd.setCursor(0,0); lcd.write("I'm calm now"); delay(1000); lcd.setCursor(0,1); lcd.write("what to do??"); delay(2000); lcd.clear(); } delay(50); } void moveBackward() { analogWrite(speedPinA, 180); digitalWrite(dir1PinA, LOW); digitalWrite(dir2PinA, HIGH); analogWrite(speedPinB, 180); digitalWrite(dir1PinB, LOW); digitalWrite(dir2PinB, HIGH); } void moveStop() { analogWrite(speedPinA, 0); digitalWrite(dir1PinA, LOW); digitalWrite(dir2PinA, LOW); analogWrite(speedPinB, 0); digitalWrite(dir1PinB, LOW); digitalWrite(dir2PinB, LOW); } void moveSpin() { analogWrite(speedPinA, 220); digitalWrite(dir1PinA, LOW); digitalWrite(dir2PinA, HIGH); analogWrite(speedPinB, 220); digitalWrite(dir1PinB, HIGH); digitalWrite(dir2PinB, LOW); } /*void head() { servo.write(45); // Turn SG90 servo Left to 45 degrees delay(1000); // Wait 1 second servo.write(90); // Turn SG90 servo back to 90 degrees (center position) delay(1000); // Wait 1 second servo.write(135); // Turn SG90 servo Right to 135 degrees delay(1000); // Wait 1 second servo.write(90); // Turn SG90 servo back to 90 degrees (center position) delay(1000); }*/