Advertisement
Guest User

Untitled

a guest
Jul 17th, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.31 KB | None | 0 0
  1. #include <NewPing.h>
  2. #include <Servo.h>
  3. int right1 = 2; // in1 of right tire
  4. int rightEN = 3; // enA of right tire
  5. int right2 = 4; // in2 of right tire
  6. int left1 = 5; // in1 of left tire
  7. int leftEN = 6; // enA of left tire
  8. int left2 = 7; // in2 of right tire
  9.  
  10. int rightLED = 8;
  11. int leftLED = 9;
  12.  
  13. int trig = 12;  // trigger PIN
  14. int echo = 11;  // echo PIN
  15. int max_dist = 300; // max distance of ultrasonic
  16. int usReading; // reading of ultrasonic
  17. int usReadingThreshold = 15; // max distance between car and walls
  18. NewPing US (trig,echo,max_dist); // NewPing initialization
  19. Servo servoMotor; // Servo initialization
  20.  
  21. int MAXSPD = 170; // maximum speed of motors
  22. int leftDistance;
  23. int rightDistance;
  24.  
  25.  
  26. void printReading(){
  27.   Serial.print("Distance is currently ");
  28.   Serial.println(usReading);
  29. }
  30.  
  31. void moveRightTire(int pwm){
  32.   digitalWrite(right1, HIGH);
  33.   digitalWrite(right2, LOW);
  34.   analogWrite(rightEN, pwm); // moves the right tire forward at pwm speed
  35. }
  36.  
  37. void reverseRightTire(int pwm){
  38.   digitalWrite(right1, LOW);
  39.   digitalWrite(right2, HIGH);
  40.   analogWrite(rightEN, pwm); // moves the right tire forward at pwm speed in opposite direction
  41. }
  42.  
  43. void moveLeftTire(int pwm){
  44.   digitalWrite(left1, HIGH);
  45.   digitalWrite(left2, LOW);
  46.   analogWrite(leftEN, pwm); // moves the left tire forward at pwm speed
  47. }
  48.  
  49. void reverseLeftTire(int pwm){
  50.   digitalWrite(left1, LOW);
  51.   digitalWrite(left2, HIGH);
  52.   analogWrite(leftEN, pwm); // moves the left tire forward at pwm speed in opposite direction
  53. }
  54.  
  55. void moveForward(){
  56.   moveRightTire(MAXSPD); // moves right tire at max speed
  57.   moveLeftTire(MAXSPD); // moves left tire at max speed
  58. }
  59.  
  60. void moveStop(){
  61.   moveRightTire(0); // stops right tire
  62.   moveLeftTire(0); // stops left tire
  63. }
  64.  
  65. char checkDirections(){
  66.   servoMotor.write(15); //looks left
  67.   delay(150);
  68.   leftDistance = US.ping_cm(); //sets the left distance to the current reading
  69.   servoMotor.write(165); //looks right
  70.   delay(275);
  71.   rightDistance = US.ping_cm(); //sets the right distance to the current reading
  72.   servoMotor.write(90);
  73.   delay(150);
  74.   if(rightDistance>leftDistance){
  75.     return 'R';
  76.   }else{
  77.     return 'L';
  78.   }
  79. }
  80.  
  81. void carTurn(char directn){
  82.   if(directn == 'R'){
  83.     digitalWrite(rightLED,HIGH);
  84.     reverseRightTire(MAXSPD);
  85.     moveLeftTire(MAXSPD);
  86.     delay(500);
  87.     moveForward();
  88.     digitalWrite(rightLED,LOW);
  89.   }else if(directn == 'L'){
  90.     digitalWrite(leftLED,HIGH);
  91.     moveRightTire(MAXSPD);
  92.     reverseLeftTire(MAXSPD);
  93.     delay(500);
  94.     moveForward();
  95.     digitalWrite(leftLED,LOW);
  96.   }
  97. }
  98.  
  99. void setup() {
  100.   pinMode(rightLED,OUTPUT);
  101.   pinMode(leftLED,OUTPUT);
  102.   pinMode(right1,OUTPUT);
  103.   pinMode(right2,OUTPUT);
  104.   pinMode(rightEN,OUTPUT);
  105.   pinMode(left1,OUTPUT);
  106.   pinMode(left2,OUTPUT);
  107.   pinMode(leftEN,OUTPUT);
  108.   Serial.begin(115200);
  109.   servoMotor.attach(10); // Servo PIN
  110.   servoMotor.write(90); // sets initial servo angle
  111.   delay(200);
  112.  
  113.   moveForward(); // moves the car forward
  114. }
  115.  
  116. void loop() {
  117.   delay(50);
  118.   usReading = US.ping_cm();
  119.   printReading();
  120.   if(usReading < usReadingThreshold){ // checks if the reading is below the threshold
  121.     moveStop();
  122.     char vacantDirection = checkDirections(); // checks vacant directions left & right
  123.     carTurn(vacantDirection); // turns the car in the vacant direction
  124.   }
  125. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement