pawlack

Rumba McRumbaface v2

Oct 30th, 2019
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.91 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 = 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, 10000);
  91.  
  92.   cm = (duration/2) / 29.1;     // Divide by 29.1 or multiply by 0.0343
  93.  
  94.   if (cm == 0)
  95.     {
  96.       return 666;
  97.     }
  98.   else
  99.     {
  100.       return cm;
  101.     }
  102. }
  103.  
  104. float getDistance2() //left ultraconic distance sensor
  105. {
  106.   digitalWrite(trigPin2, LOW);
  107.   delayMicroseconds(5);
  108.   digitalWrite(trigPin2, HIGH);
  109.   delayMicroseconds(10);
  110.   digitalWrite(trigPin2, LOW);
  111.  
  112.   pinMode(echoPin2, INPUT);
  113.   duration = pulseIn(echoPin2, HIGH, 10000);
  114.  
  115.   cm = (duration/2) / 29.1;     // Divide by 29.1 or multiply by 0.0343
  116.  
  117.  
  118.   if (cm == 0)
  119.     {
  120.       return 666;
  121.     }
  122.   else
  123.     {
  124.       return cm;
  125.     }
  126.  
  127. }
  128.  
  129. float getDistance() // take the lowest mesured distance and run with it
  130. {
  131.   float Distance1;
  132.   float Distance2;
  133.   float Distance3;
  134.   float Distance4;
  135.   float firstWinner;
  136.   float secondWinner;
  137.   float finalWinner;
  138.   float AllMeasurments[] = {Distance1, Distance2, Distance3, Distance4};
  139.  
  140.   Distance1 = getDistance1();
  141.   Distance2 = getDistance2();
  142.   Distance3 = getDistance1();
  143.   Distance4 = getDistance2();
  144.  
  145.   AllMeasurments[0] = Distance1;
  146.   AllMeasurments[1] = Distance2;
  147.   AllMeasurments[2] = Distance3;
  148.   AllMeasurments[3] = Distance4;
  149.  
  150.   firstWinner = min(Distance1, Distance2);
  151.   secondWinner = min(Distance3, Distance4);
  152.   finalWinner = min(firstWinner, secondWinner);
  153.  
  154.  
  155.   Serial.println(finalWinner);
  156.   beepPause = map(finalWinner, 30, 300, 1, 2000); //the closer to obstacle the faster it beeps
  157.   return finalWinner; //temp
  158.  
  159.  
  160. }
  161.  
  162.  
  163. void leftWhellBack()
  164. {
  165.   digitalWrite(4, HIGH);
  166.   digitalWrite(5, LOW);
  167. }
  168.  
  169. void leftWhellFrw()
  170. {
  171.   digitalWrite(4, LOW);
  172.   digitalWrite(5, HIGH);
  173. }
  174.  
  175. void rightWhellFrw()
  176. {
  177.   digitalWrite(6, HIGH);
  178.   digitalWrite(7, LOW);
  179. }
  180.  
  181. void rightWhellBack()
  182. {
  183.   digitalWrite(6, LOW);
  184.   digitalWrite(7, HIGH);
  185. }
  186.  
  187. void SoftStart(int desiredSpeed)
  188. {
  189.   analogWrite(9, CurrentSpeed-2);
  190.   analogWrite(10, CurrentSpeed);
  191.  
  192.   if (CurrentSpeed == 255)
  193.     {
  194.       CurrentSpeed = 70;
  195.     }
  196.   if (CurrentSpeed < desiredSpeed)
  197.     {
  198.       ++CurrentSpeed;
  199.     }
  200.   else if (CurrentSpeed > desiredSpeed)
  201.     {
  202.       --CurrentSpeed;
  203.     }
  204.  
  205.  
  206. }
  207.  
  208. void DriveForward()
  209. {
  210.   int forwardSpeed;
  211.  
  212.   forwardSpeed = map(theDistance, 30, 120, 120, 254); //the closer to obstacle the slower it goes
  213.   SoftStart(forwardSpeed);
  214.   rightWhellFrw();
  215.   leftWhellFrw();
  216. }
  217.  
  218. void DriveBack()
  219. {
  220.   SoftStart(150);
  221.   rightWhellBack();
  222.   leftWhellBack();
  223. }
  224.  
  225. void TurnLeft()
  226. {
  227.   SoftStart(125);
  228.   rightWhellFrw();
  229.   leftWhellBack();
  230. }
  231.  
  232. void TurnRight()
  233. {
  234.   SoftStart(125);
  235.   rightWhellBack();
  236.   leftWhellFrw();
  237. }
  238.  
  239. void FirtBoot()
  240. {
  241.   if (firstBoot == true)
  242.     {
  243.       firstBoot = false;
  244.       delay(50);
  245.       digitalWrite(2, HIGH);
  246.       delay(200);
  247.       digitalWrite(2, LOW);
  248.       delay(2000);
  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(50);
  257.       digitalWrite(2, HIGH);
  258.       delay(50);
  259.       digitalWrite(2, LOW);
  260.       delay(50);
  261.       digitalWrite(2, HIGH);
  262.       delay(50);
  263.       digitalWrite(2, LOW);
  264.       delay(50);
  265.       digitalWrite(2, HIGH);
  266.       delay(50);
  267.       digitalWrite(2, LOW);
  268.       delay(50);
  269.       digitalWrite(2, HIGH);
  270.       delay(50);
  271.       digitalWrite(2, LOW);
  272.       delay(2000);
  273.       setAllToLOW();
  274.     }
  275.  
  276. }
  277.  
  278.  
  279. //Main_logic
  280.  
  281. void loop()
  282. {
  283.  
  284.   FirtBoot();
  285.   theDistance = getDistance();
  286.   shortBeep();
  287.   if ((theDistance <= changeDirectionDistance) && (isTurning == false))
  288.     {
  289.       setAllToLOW();
  290.       LeftRight = random(1, 3);
  291.       turningTimer = millis();
  292.       isTurning = true;
  293.     }
  294.  
  295.   if (isTurning == false)
  296.     {
  297.       DriveForward();
  298.     }
  299.   if (isTurning == true)
  300.     {
  301.       if (LeftRight == 1)
  302.         {
  303.           TurnLeft();
  304.         }
  305.        else
  306.         {
  307.           TurnRight();
  308.         }
  309.       if (millis() >= turningTimer + turningTime)
  310.         {
  311.           setAllToLOW();
  312.           isTurning = false;
  313.         }
  314.     }
  315.  
  316.  
  317.  
  318. }
Advertisement
Add Comment
Please, Sign In to add comment