Advertisement
Guest User

Untitled

a guest
Oct 15th, 2019
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2. #include <Ultrasonic.h>
  3.  
  4. //Definicoes pinos Arduino ligados a entrada da Ponte H
  5. int IN1 = 13;
  6. int IN2 = 12;
  7. int IN3 = 7;
  8. int IN4 = 8;
  9.  
  10. //Define os pinos para o trigger e echo
  11. #define pino_trigger 4
  12. #define pino_echo 5
  13.  
  14. //Inicializa o sensor nos pinos definidos acima
  15. Ultrasonic ultrasonic(pino_trigger, pino_echo);
  16.  
  17. int count = 0, aux;
  18. bool pausado = 0;
  19. float a[10];
  20. float cmMsec;
  21.    
  22. void setup()
  23. {
  24.   //Define os pinos como saida
  25.   pinMode(IN1, OUTPUT);
  26.   pinMode(IN2, OUTPUT);
  27.   pinMode(IN3, OUTPUT);
  28.   pinMode(IN4, OUTPUT);
  29.  
  30.   //Para o motor A
  31.   digitalWrite(IN1, LOW);
  32.   digitalWrite(IN2, LOW);
  33.  
  34.   //Para o motor B
  35.   digitalWrite(IN3, LOW);
  36.   digitalWrite(IN4, LOW);
  37.  
  38.   Serial.begin(9600);
  39.   Serial.println("Lendo dados do sensor...");
  40. }
  41.  
  42. void andaPraFrente()
  43. {
  44.   digitalWrite(IN1, LOW);
  45.   digitalWrite(IN2, HIGH);
  46.  
  47.   digitalWrite(IN3, LOW);
  48.   digitalWrite(IN4, HIGH);
  49. }
  50.  
  51.  
  52. void andaPraTras()
  53. {
  54.   digitalWrite(IN1, HIGH);
  55.   digitalWrite(IN2, LOW);
  56.  
  57.   digitalWrite(IN3, HIGH);
  58.   digitalWrite(IN4, LOW);
  59. }
  60.  
  61. void paraAsRodas ()
  62. {
  63.  //Para o motor A
  64.  digitalWrite(IN1, HIGH);
  65.  digitalWrite(IN2, HIGH);
  66.  
  67.  //Para o motor B
  68.  digitalWrite(IN3, HIGH);
  69.  digitalWrite(IN4, HIGH);
  70. }
  71.  
  72.  
  73. void giraCarroHorario()
  74. {
  75.  
  76.   digitalWrite(IN1, LOW);
  77.   digitalWrite(IN2, LOW);
  78.  
  79.   digitalWrite(IN3, LOW);
  80.   digitalWrite(IN4, HIGH);
  81. }
  82.  
  83. void selection_sort (float vetor[]) {
  84.   int i, j, minimo, aux;
  85.  
  86.   for (i = 0; i < (10 - 1); i++) {
  87.     /* O minimoimo é o primeiro número não ordenado ainda */
  88.     minimo = i;
  89.     for (j = i+1; j < 10; j++) {
  90.       /* Caso tenha algum numero menor ele faz a troca do minimoimo*/
  91.       if (vetor[j] < vetor[minimo]) {
  92.         minimo = j;
  93.       }
  94.     }
  95.     /* Se o minimoimo for diferente do primeiro numero não ordenado ele faz a troca para ordena-los*/
  96.     if (i != minimo) {
  97.       aux = vetor[i];
  98.       vetor[i] = vetor[minimo];
  99.       vetor[minimo] = aux;
  100.     }
  101.   }
  102.   /* Imprime o vetor ordenado */
  103.   for (i = 0; i < 10; i++) {
  104.     Serial.println (vetor[i]);
  105.   }
  106.   Serial.println ("-----------------------------------------");
  107. }
  108.  
  109. float findMin (float vetor[])
  110. {
  111.   int i;
  112.   float minimum = vetor[0];
  113.   for(i = 1; i < 10; i++)
  114.   {
  115.     if( minimum > vetor[i])
  116.       minimum = vetor[i];
  117.   }
  118.   return minimum;
  119. }
  120.  
  121.  
  122.  
  123. void loop()
  124. {
  125.   delay(50);
  126.   if (count < 10)
  127.   {
  128.     //Le as informacoes do sensor em cm
  129.     long microsec = ultrasonic.timing();
  130.     cmMsec = ultrasonic.convert(microsec, Ultrasonic::CM);
  131.  
  132.     //Serial.print("Distancia em cm: ");
  133.     //Serial.println(cmMsec);
  134.  
  135.     a[count] = cmMsec;
  136.     count++;
  137.   }
  138.   else if(count == 10){
  139.     count = 0;
  140.     float distMin = findMin(a);
  141.     Serial.println ("distancia lida:");
  142.     Serial.println (distMin);
  143.     Serial.println ("pausado: ");
  144.     Serial.println (pausado);
  145.    
  146.     if(Serial.available() )
  147.     {
  148.       aux = Serial.read();
  149.       if (aux == '0')
  150.       {
  151.         pausado = true;
  152.       }
  153.       else if(aux == '1')
  154.       {
  155.         pausado = false;
  156.       }
  157.     }
  158.     if(pausado == true)
  159.     {
  160.       paraAsRodas();
  161.     }
  162.     else if( distMin > 20)
  163.     {
  164.       andaPraFrente();
  165.     }
  166.     else if (distMin <= 20)
  167.     {
  168.       paraAsRodas();
  169.       delay(200);  // espere 1 segundo
  170.       andaPraTras();
  171.       delay(1000);
  172.       giraCarroHorario ();  // gire por 0.5seg
  173.       delay(500);  // espere 1/2 segundo
  174.       paraAsRodas();
  175.     }
  176.   }
  177. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement