Advertisement
pawlack

Untitled

Oct 30th, 2019
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.77 KB | None | 0 0
  1.  
  2. int trigPin1 = 11;    // Trigger
  3. int echoPin1 = 12;    // Echo
  4. int trigPin2 = 3;    // Trigger
  5. int echoPin2 = 8;    // Echo
  6. long duration, cm;
  7. long beepTimer;
  8. int shortBeepTime = 30;
  9. int beepPause = 120;
  10. bool beeperIsBeepin;
  11. bool ArduinoInStandBy;
  12. bool firstBoot = true;
  13. int CurrentSpeed = 255;
  14. int LeftRight;
  15. int theDistance;
  16. float changeDirectionDistance = 40;
  17. bool isTurning = false;
  18. float turningTime = 230;
  19. long turningTimer;
  20. float pauseBeforeStateChange = 100;
  21.  
  22.  
  23.  
  24. void setup() {
  25.   //Serial Port begin
  26.   Serial.begin (9600);
  27.   //Inputs and outputs for Distance Meter
  28.   pinMode(trigPin1, OUTPUT);
  29.   pinMode(echoPin1, INPUT);
  30.   pinMode(trigPin2, OUTPUT);
  31.   pinMode(echoPin2, INPUT);
  32.  
  33.   //Motor Pins
  34.   pinMode(13, OUTPUT);
  35.   pinMode(4, OUTPUT);
  36.   pinMode(5, OUTPUT);
  37.   pinMode(6, OUTPUT);
  38.   pinMode(7, OUTPUT);
  39.  
  40.   //PWM
  41.   //LEFT WHEEL
  42.   pinMode(9, OUTPUT);
  43.   //RIGHT WHEEL
  44.   pinMode(10, OUTPUT);
  45.  
  46.   //beeper Pin
  47.   pinMode(2, OUTPUT);
  48.  
  49. }
  50.  
  51. void setAllToLOW()  //Set all motor pins to LOW just in case
  52. {
  53.   digitalWrite(4, LOW);
  54.   digitalWrite(5, LOW);
  55.   digitalWrite(6, LOW);
  56.   digitalWrite(7, LOW);
  57.   digitalWrite(13, LOW);
  58.   CurrentSpeed = 255;
  59. }
  60.  
  61. void shortBeep()
  62. {
  63.   if (beeperIsBeepin == false)
  64.     {
  65.       beeperIsBeepin = true;
  66.       beepTimer = millis();
  67.       digitalWrite(2, HIGH);
  68.     }
  69.  
  70.   if ((millis() >= beepTimer + shortBeepTime) && (beeperIsBeepin = true) )
  71.     {
  72.       digitalWrite(2, LOW);
  73.     }
  74.   if ((millis() >= beepTimer + shortBeepTime + beepPause) && (beeperIsBeepin = true))
  75.     {
  76.           beeperIsBeepin = false;
  77.     }
  78.      
  79. }
  80.  
  81. float getDistance1() //right ultraconic distance sensor
  82. {
  83.   digitalWrite(trigPin1, LOW);
  84.   delayMicroseconds(5);
  85.   digitalWrite(trigPin1, HIGH);
  86.   delayMicroseconds(10);
  87.   digitalWrite(trigPin1, LOW);
  88.  
  89.   pinMode(echoPin1, INPUT);
  90.   duration = pulseIn(echoPin1, HIGH);
  91.  
  92.   cm = (duration/2) / 29.1;     // Divide by 29.1 or multiply by 0.0343
  93.   delay(5);
  94.   return cm;
  95. }
  96.  
  97. float getDistance2() //left ultraconic distance sensor
  98. {
  99.   digitalWrite(trigPin2, LOW);
  100.   delayMicroseconds(5);
  101.   digitalWrite(trigPin2, HIGH);
  102.   delayMicroseconds(10);
  103.   digitalWrite(trigPin2, LOW);
  104.  
  105.   pinMode(echoPin2, INPUT);
  106.   duration = pulseIn(echoPin2, HIGH);
  107.  
  108.   cm = (duration/2) / 29.1;     // Divide by 29.1 or multiply by 0.0343
  109.   delay(5);
  110.   return cm;
  111. }
  112.  
  113. float getDistance() // take the lowest mesured distance and run with it
  114. {
  115.   float Distance1;
  116.   float Distance2;
  117.   float Distance3;
  118.   float Distance4;
  119.   float firstWinner;
  120.   float secondWinner;
  121.   float finalWinner;
  122.   float AllMeasurments[] = {Distance1, Distance2, Distance3, Distance4};
  123.  
  124.   Distance1 = getDistance1();
  125.   Distance2 = getDistance2();
  126.   Distance3 = getDistance1();
  127.   Distance4 = getDistance2();
  128.  
  129.   AllMeasurments[0] = Distance1;
  130.   AllMeasurments[1] = Distance2;
  131.   AllMeasurments[2] = Distance3;
  132.   AllMeasurments[3] = Distance4;
  133.  
  134.   firstWinner = min(Distance1, Distance2);
  135.   secondWinner = min(Distance3, Distance4);
  136.   finalWinner = min(firstWinner, secondWinner);
  137.  
  138.  
  139.   Serial.println(finalWinner);
  140.   beepPause = map(finalWinner, 30, 300, 1, 2000); //the closer to obstacle the faster it beeps
  141.   return finalWinner; //temp
  142.  
  143.  
  144. }
  145.  
  146.  
  147. void leftWhellBack()
  148. {
  149.   digitalWrite(4, HIGH);
  150.   digitalWrite(5, LOW);
  151. }
  152.  
  153. void leftWhellFrw()
  154. {
  155.   digitalWrite(4, LOW);
  156.   digitalWrite(5, HIGH);
  157. }
  158.  
  159. void rightWhellFrw()
  160. {
  161.   digitalWrite(6, HIGH);
  162.   digitalWrite(7, LOW);
  163. }
  164.  
  165. void rightWhellBack()
  166. {
  167.   digitalWrite(6, LOW);
  168.   digitalWrite(7, HIGH);
  169. }
  170.  
  171. void SoftStart(int desiredSpeed)
  172. {
  173.   analogWrite(9, CurrentSpeed-2);
  174.   analogWrite(10, CurrentSpeed);
  175.  
  176.   if (CurrentSpeed == 255)
  177.     {
  178.       CurrentSpeed = 70;
  179.     }
  180.   if (CurrentSpeed < desiredSpeed)
  181.     {
  182.       ++CurrentSpeed;
  183.     }
  184.   else if (CurrentSpeed > desiredSpeed)
  185.     {
  186.       --CurrentSpeed;
  187.     }
  188.  
  189.  
  190. }
  191.  
  192. void DriveForward()
  193. {
  194.   int forwardSpeed;
  195.  
  196.   forwardSpeed = map(theDistance, 30, 120, 120, 255); //the closer to obstacle the slower it goes
  197.   SoftStart(forwardSpeed);
  198.   rightWhellFrw();
  199.   leftWhellFrw();
  200. }
  201.  
  202. void DriveBack()
  203. {
  204.   SoftStart(150);
  205.   rightWhellBack();
  206.   leftWhellBack();
  207. }
  208.  
  209. void TurnLeft()
  210. {
  211.   SoftStart(125);
  212.   rightWhellFrw();
  213.   leftWhellBack();
  214. }
  215.  
  216. void TurnRight()
  217. {
  218.   SoftStart(125);
  219.   rightWhellBack();
  220.   leftWhellFrw();
  221. }
  222.  
  223. void FirtBoot()
  224. {
  225.   if (firstBoot == true)
  226.     {
  227.       firstBoot = false;
  228.       delay(50);
  229.       digitalWrite(2, HIGH);
  230.       delay(200);
  231.       digitalWrite(2, LOW);
  232.       delay(2000);
  233.       digitalWrite(2, HIGH);
  234.       delay(50);
  235.       digitalWrite(2, LOW);
  236.       delay(50);
  237.       digitalWrite(2, HIGH);
  238.       delay(50);
  239.       digitalWrite(2, LOW);
  240.       delay(50);
  241.       digitalWrite(2, HIGH);
  242.       delay(50);
  243.       digitalWrite(2, LOW);
  244.       delay(50);
  245.       digitalWrite(2, HIGH);
  246.       delay(50);
  247.       digitalWrite(2, LOW);
  248.       delay(50);
  249.       digitalWrite(2, HIGH);
  250.       delay(50);
  251.       digitalWrite(2, LOW);
  252.       delay(50);
  253.       digitalWrite(2, HIGH);
  254.       delay(50);
  255.       digitalWrite(2, LOW);
  256.       delay(2000);
  257.       setAllToLOW();
  258.     }
  259.  
  260. }
  261.  
  262.  
  263. //Main_logic
  264.  
  265. void loop()
  266. {
  267.  
  268.   FirtBoot();
  269.   theDistance = getDistance();
  270.   shortBeep();
  271.   if ((theDistance <= changeDirectionDistance) && (isTurning == false))
  272.     {
  273.       setAllToLOW();
  274.       LeftRight = random(1, 3);
  275.       turningTimer = millis();
  276.       isTurning = true;
  277.     }
  278.  
  279.   if (isTurning == false)
  280.     {
  281.       DriveForward();
  282.     }
  283.   if (isTurning == true)
  284.     {
  285.       if (LeftRight == 1)
  286.         {
  287.           TurnLeft();
  288.         }
  289.        else
  290.         {
  291.           TurnRight();
  292.         }
  293.       if (millis() >= turningTimer + turningTime)
  294.         {
  295.           setAllToLOW();
  296.           isTurning = false;
  297.         }
  298.     }
  299.  
  300.  
  301.  
  302. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement