Advertisement
Why7090

Untitled

Feb 20th, 2016
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.65 KB | None | 0 0
  1. #include <Servo.h>
  2. #include <IRremote.h>
  3.  
  4. const short rg = 5;
  5. const short rb = 3;
  6. const short lg = 6;
  7. const short lb = 11;
  8. const short TrigPin = 8;
  9. const short EchoPin = 7;
  10. const short ServoPin = 9;
  11. const short LeasR = A2;
  12. const short LeasL = A3;
  13. const short RecvPin = A0;
  14.  
  15. bool fwd = false;
  16. bool disableLeas = false;
  17. bool leas[2];
  18. bool remote = false;
  19. int msg;
  20. unsigned int distance[5];
  21.  
  22. Servo myservo;
  23. IRrecv irrecv(RecvPin);
  24. decode_results results;
  25.  
  26.  
  27. float getDistance() {
  28.   digitalWrite(TrigPin, LOW);
  29.   delayMicroseconds(2);
  30.   digitalWrite(TrigPin, HIGH);
  31.   delayMicroseconds(10);
  32.   digitalWrite(TrigPin, LOW);
  33.   return 0.017 * pulseIn(EchoPin, HIGH);
  34. }
  35.  
  36. int getMessage() {
  37.   if (irrecv.decode(&results)) {
  38.     int value = results.value;
  39.     irrecv.resume();
  40.     return value;
  41.   }
  42.   return 0;
  43. }
  44.  
  45. void r(int left, int right, float duration = 10) {
  46.   if (right > 0) {
  47.     analogWrite(rg, abs(right));
  48.   }
  49.   else if (right < 0) {
  50.     analogWrite(rb, abs(right));
  51.   }
  52.   if (left > 0) {
  53.     analogWrite(lg, abs(left));
  54.   }
  55.   else if (left < 0) {
  56.     analogWrite(lb, abs(left));
  57.   }
  58.   if (duration > 0) {
  59.     delay(duration * 100);
  60.     s();
  61.   }
  62. }
  63.  
  64. void s() {
  65.   analogWrite(rg, 0);
  66.   analogWrite(rb, 0);
  67.   analogWrite(lg, 0);
  68.   analogWrite(lb, 0);
  69. }
  70.  
  71. void setup() {
  72.   Serial.begin(9600);
  73.   pinMode(TrigPin, OUTPUT);
  74.   pinMode(EchoPin, INPUT);
  75.   pinMode(LeasR, INPUT);
  76.   pinMode(LeasL, INPUT);
  77.   pinMode(LED_BUILTIN, OUTPUT);
  78.   myservo.attach(ServoPin);
  79.   myservo.write(90);
  80.   delay(1000);
  81. }
  82.  
  83.  
  84. void loop() {
  85.  
  86.   if (!remote) {
  87.     leas[0] = !digitalRead(LeasL);
  88.     leas[1] = !digitalRead(LeasR);
  89.     distance[3] = getDistance();
  90.     delay(20);
  91.     distance[4] = getDistance();
  92.     if (distance[3] > distance[4]) {
  93.       distance[0] = distance[3];
  94.     } else {
  95.       distance[0] = distance[4];
  96.     }
  97.  
  98.     if (distance[0] > 50 || disableLeas && !leas[0] && !leas[1]) {
  99.       if (!fwd) {
  100.         r(250, 250, 0);
  101.         fwd = true;
  102.         delay(100);
  103.       }
  104.     }
  105.  
  106.     else {
  107.       fwd = false;
  108.       s();
  109.       if (distance[0] < 20 ) {
  110.         r(-120, -120, 5);
  111.         delay(200);
  112.       }
  113.       myservo.write(10);
  114.       delay(350);
  115.       distance[1] = getDistance();
  116.       myservo.write(170);
  117.       delay(650);
  118.       distance[2] = getDistance();
  119.       myservo.write(90);
  120.       delay(400);
  121.       if (leas[0] < leas[1] || distance[1] < distance[2]) {
  122.         r(0, 120, 5);
  123.       }
  124.       else if (leas[0] > leas[1] || distance[1] > distance[2]) {
  125.         r(120, 0, 5);
  126.       }
  127.       delay(200);
  128.     }
  129.   }
  130.  
  131.   else {
  132.     msg = getMessage();
  133.     msg != 0 && Serial.println(msg);
  134.   }
  135. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement