Advertisement
SageScroll18144

SSLOBR

Jul 13th, 2019
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //MOTORES
  2. int dir[] = {51,53,45,43,41,39,47,49};//pinos de direção dos motores
  3.  
  4. //ULTRASSONICO
  5. int trig = 5;
  6. int echo = 6;
  7. int ultPin[] = {5,0,6,0};//trig;trig;echo;echo
  8.  
  9. //RGB
  10. //s0; s1; s2; s3; out -> Pino digital || gnd -> gnd || vcc -> 5v
  11. const int rgbs[] = {0,0,0,0,0,8,9,12,11,10}; //s0 s1 s2 s3 out
  12.  
  13. int red = 0;
  14. int green = 0;
  15. int blue = 0;
  16.  
  17. int red1 = 0;
  18. int green1 = 0;
  19. int blue1 = 0;
  20. /*
  21.  M0  ####  M3
  22.     ######       -> chassi do robô
  23.     ######       -> M(motor)[número do motor]
  24.  M1  ####  M2
  25. */
  26. //CONSTANTES
  27. #define RB 600 // Valor lido pelo sensor analógico
  28. void setup(){
  29.     for(int i = 0; i < sizeof(dir)/sizeof(int); i++){
  30.         pinMode(dir[i], OUTPUT);
  31.     }
  32.     Serial.begin(9600);
  33.     pinMode(trig,OUTPUT);
  34.     pinMode(echo, INPUT);
  35. }
  36. void loop(){
  37.     /*if (Serial.available() > 0) {
  38.         motors(Serial.read(),'F');
  39.     }*/
  40.     //forward();
  41.    /* Serial.print(readAnLeft());
  42.     Serial.print("\t");
  43.     Serial.println(readAnRight());*/
  44.     Serial.println(ultrassonicRead(0));
  45. }
  46.  
  47. //======================FUNÇÕES DO MOVIMENTO DO ROBO==========================
  48.  
  49. //metodo de giro dos motores
  50. void motors(int motor, char sen){//1o -> motor 0; 2o -> motor1; 3o -> motor 2; 4o -> motor 3
  51.     if(sen == 'F'){
  52.         digitalWrite(dir[motor*2], HIGH);
  53.         digitalWrite(dir[(motor*2)+1], LOW);  
  54.     }
  55.     else if(sen == 'B'){
  56.         digitalWrite(dir[motor*2], LOW);
  57.         digitalWrite(dir[(motor*2)+1], HIGH);
  58.     }
  59. }
  60. //para os motores
  61. void stopRobot(int motor){
  62.     digitalWrite(dir[motor*2], LOW);
  63.     digitalWrite(dir[(motor*2)+1], LOW);  
  64. }
  65. //faz o robo seguir em frente
  66. void forward(){
  67.     for(int i = 0; i < 4; i++){
  68.         motors(i, 'F');
  69.     }
  70. }
  71. //faz o robo seguir na diagonal informada
  72. void diagonal(char sen){
  73.     int estado;
  74.     (sen == 'R') ? estado = 0 : estado = 1;
  75.     for(int i = 0; i < 4; i++)
  76.     {
  77.         digitalWrite(dir[i*2], estado);
  78.         digitalWrite(dir[(i*2)+1], LOW);  
  79.     }
  80.     estado = !estado;
  81. }
  82. //faz o robo gira para a esquerda ou para a direita
  83. void spinRobot(char sen){
  84.     if(sen == 'L'){
  85.         for(int i = 0; i < 2; i++){
  86.             motors(i, 'B');
  87.         }
  88.         for(int i = 2; i < 4; i++){
  89.             motors(i, 'F');
  90.         }
  91.     }
  92.     else if (sen == 'R')
  93.     {
  94.         for(int i = 0; i < 2; i++){
  95.             motors(i, 'F');
  96.         }
  97.         for(int i = 2; i < 4; i++){
  98.             motors(i, 'B');
  99.         }
  100.     }
  101.        
  102. }
  103. //======================FUNÇÕES DOS SENSORES ANALOG==========================
  104. int readAnLeft(){
  105.   return analogRead(A1);
  106. }                           // ACIMA DE 600 É PRETO(const RB)
  107. int readAnRight(){
  108.   return analogRead(A15);
  109. }
  110. int readCornerLeft(){
  111.   return analogRead(A2);//MODIFICAR
  112. }
  113. int readCornerRight(){
  114.   return analogRead(A3);//MODIFICAR
  115. }
  116. //=======================FUNÇÃO DO ULTRASSONICO===============================
  117. int ultrassonicRead(int sensor){//Retorna um valor inteiro com o valor da distância lida pelo ultrassônico
  118.   long duracao;
  119.   long distancia;
  120.   digitalWrite(ultPin[0+sensor], LOW);
  121.   delayMicroseconds(2);
  122.   digitalWrite(ultPin[0+sensor], HIGH);
  123.   delayMicroseconds(10);
  124.   digitalWrite(ultPin[0+sensor], LOW);
  125.   duracao = pulseIn(ultPin[2+sensor], HIGH);
  126.   distancia = duracao/58;
  127.   delay(500);
  128.   return distancia;
  129. }
  130.  
  131. //===========================FUNÇÕES DOs RGBs=================================
  132. void colorLeft()
  133. {
  134.   //Rotina que le o valor das cores
  135.   digitalWrite(rgbs[2], LOW);
  136.   digitalWrite(rgbs[3], LOW);
  137.   //count OUT, pRed, RED
  138.   red = pulseIn(rgbs[4], digitalRead(rgbs[4]) == HIGH ? LOW : HIGH);
  139.   digitalWrite(rgbs[3], HIGH);
  140.   //count OUT, pBLUE, BLUE
  141.   blue = pulseIn(rgbs[4], digitalRead(rgbs[4]) == HIGH ? LOW : HIGH);
  142.   digitalWrite(rgbs[2], HIGH);
  143.   //count OUT, pGreen, GREEN
  144.   green = pulseIn(rgbs[4], digitalRead(rgbs[4]) == HIGH ? LOW : HIGH);
  145. }
  146. String readRGBLeft(){
  147.   colorLeft();
  148.   if(green > 20 && red > 20 && blue > 20){//Verifica se a cor preta foi detectada
  149.     return "Preto";
  150.   }
  151.   else if (green >= red && green >= blue)//Verifica se a cor branca foi detectada
  152.   {
  153.     return "Branco";
  154.   }
  155.   else if (green < red && green < blue)//Verifica se a cor verde foi detectada
  156.   {
  157.     return "Verde";
  158.   }
  159. }
  160.  
  161. void colorRight()
  162. {
  163.   //Rotina que le o valor das cores
  164.   digitalWrite(rgbs[7], LOW);
  165.   digitalWrite(rgbs[8], LOW);
  166.   //count OUT, pRed, RED
  167.   red1 = pulseIn(rgbs[9], digitalRead(rgbs[9]) == HIGH ? LOW : HIGH);
  168.   digitalWrite(rgbs[8], HIGH);
  169.   //count OUT, pBLUE, BLUE
  170.   blue1 = pulseIn(rgbs[9], digitalRead(rgbs[9]) == HIGH ? LOW : HIGH);
  171.   digitalWrite(rgbs[7], HIGH);
  172.   //count OUT, pGreen, GREEN
  173.   green1 = pulseIn(rgbs[9], digitalRead(rgbs[9]) == HIGH ? LOW : HIGH);
  174. }
  175. int readRGBRight(){
  176.   colorRight();
  177.   if(green1 > 20 && red1 > 20 && blue1 > 20){//Verifica se a cor preta foi detectada
  178.     return 0;//PRETO
  179.   }
  180.   else if (green1 >= red1 && green1 >= blue1)//Verifica se a cor branca foi detectada
  181.   {
  182.     return 1;//BRANCO
  183.   }
  184.   else if (green1 < red1 && green1 < blue1)//Verifica se a cor verde foi detectada
  185.   {
  186.     return 2;//VERDE
  187.   }
  188. }
  189. // =======================================================================================
  190. //situações
  191. void line(){
  192.   if(readRGBLeft() == 2 && readRGBRight() == 2 && readAnLeft() <= RB && readAnRight() <= RB){
  193.     // gira 180º
  194.   }
  195.   else if(readRGBRight() == 2 && readAnRight() <= RB){
  196.     //gira para a direita de maneira um pouco mais brusca
  197.   }
  198.   else if(readRGBLeft() == 2 && readAnLeft() <= RB){
  199.     //gira para a esquerda de maneira um pouco mais brusca
  200.   }
  201.   else if(((readRGBRight() == 0 && readRGBLeft() == 1) || (readAnRight() >= RB && readAnLeft() <= RB)) && readCornerRight() <= 600){//caso for testar sem os sensores do canto, tirar a última condição
  202.     // gira para a direita de maneira mais leve
  203.   }
  204.   else if(((readRGBLeft() == 0 && readRGBRight() == 1) || (readAnLeft() >= RB && readAnRight() <= RB)) && readCornerLeft() <= 600){//caso for testar sem os sensores do canto, tirar a última condição
  205.     // gira para a esquerda de maneira mais leve
  206.   }
  207.   else{
  208.     forward();//anda para frente
  209.   }
  210. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement