pawlack

RumbaMcRumbaface 3.0

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