Advertisement
Guest User

ARDUINO_CARRO

a guest
Apr 16th, 2018
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 7.79 KB | None | 0 0
  1. #include <SoftwareSerial.h> //Inclui biblioteca Serial
  2. //Define nomes para LOW e HIGH
  3. #define LIGA HIGH
  4. #define DESLIGA LOW
  5.  
  6. //Conecta o TX e RX em uma porta virtual UART
  7. SoftwareSerial Controle(11, 12);
  8.  
  9. //Declara os pinos com nomes
  10. //ESQ = ESQUERDA | DIR = DIREITA | RE = RÉ
  11. const int esqFrente = 3;
  12. const int esqRe = 4;
  13. const int dirRe = 0;
  14. const int dirFrente = 2;
  15. const int esqEnable = 9;
  16. const int dirEnable = 6;
  17. const int ledReEsq = 7;
  18. const int ledReDir = 8;
  19. const int buzina = 1;
  20.  
  21. //Define a variável que guardará o comando recebido
  22. char comando;
  23.  
  24. void setup() //Variáveis Globais
  25. {
  26.   //O arduino deverá entender esses pinos digitais apenas como SAÍDA
  27.   pinMode(esqFrente, OUTPUT);
  28.   pinMode(esqRe, OUTPUT);
  29.   pinMode(dirFrente, OUTPUT);
  30.   pinMode(dirRe, OUTPUT);
  31.   pinMode(esqEnable, OUTPUT);
  32.   pinMode(dirEnable, OUTPUT);
  33.   pinMode(ledReEsq, OUTPUT);
  34.   pinMode(ledReDir, OUTPUT);
  35.   pinMode(buzina, OUTPUT);
  36.   //Define a atualização da porta serial
  37.   Controle.begin(9600);
  38. }
  39. void loop() //Começa o LOOP que se repete infinitamente
  40. {
  41.    if (Controle.available()) //Se receber um comando do Controle, executa o comando
  42.   {
  43.     comando=(Controle.read()); //Guarda o comando recebido
  44.     if ( (comando=='q') && (comando==NULL) ) //Se receber o comando "INICIO" apenas freia, o analógico está no meio ou sem posição definida
  45.     { //Desliga todos os motores para frear
  46.       digitalWrite(esqEnable, DESLIGA);
  47.       digitalWrite(dirEnable, DESLIGA);
  48.       digitalWrite(ledReEsq, DESLIGA);
  49.       digitalWrite(ledReDir, DESLIGA);
  50.       digitalWrite(esqFrente, DESLIGA);
  51.       digitalWrite(esqRe, DESLIGA);
  52.       digitalWrite(dirFrente, DESLIGA);
  53.       digitalWrite(dirRe, DESLIGA);
  54.     } //Se não for esse o comando, tenta o próximo
  55.     if (comando=='F') //Se receber o comando "F" vai para FRENTE com ESQ e DIR, o analógico está apontado para frente
  56.     {
  57.       digitalWrite(esqEnable, LIGA); //Habilita o motor ESQ para receber comandos
  58.       digitalWrite(dirEnable, LIGA); //Habilita o motor DIR para receber comandos
  59.       digitalWrite(ledReEsq, DESLIGA); //Desliga o LED ESQ, frente não precisa de sinalização
  60.       digitalWrite(ledReDir, DESLIGA); //Desliga o LED DIR, frente não precisa de sinalização
  61.       digitalWrite(esqFrente, LIGA); //Avisa a Ponte H para ligar o motor ESQ para FRENTE
  62.       digitalWrite(esqRe, DESLIGA); //Fecha o ciclo do motor corretamente
  63.       digitalWrite(dirFrente, LIGA); //Avisa a Ponte H para ligar o motor DIR para FRENTE
  64.       digitalWrite(dirRe, DESLIGA); //Fecha o ciclo do motor corretamente
  65.     } //Se não for esse o comando, tenta o próximo
  66.     if (comando=='B') //Se receber o comando "B" da RÉ com ESQ e DIR, o analógico está apontado para trás
  67.     {
  68.       digitalWrite(esqEnable, LIGA); //Habilita o motor ESQ para receber comandos
  69.       digitalWrite(dirEnable, LIGA); //Habilita o motor DIR para receber comandos
  70.       digitalWrite(ledReEsq, LIGA); //Liga o LED ESQ, sinalizando RÉ
  71.       digitalWrite(ledReDir, LIGA); //Liga o LED DIR, sinalizando RÉ
  72.       digitalWrite(esqFrente, DESLIGA); //Fecha o ciclo do motor corretamente
  73.       digitalWrite(esqRe, LIGA); //Avisa a Ponte H para ligar o motor ESQ em RÉ
  74.       digitalWrite(dirFrente, DESLIGA); //Fecha o ciclo do motor corretamente
  75.       digitalWrite(dirRe, LIGA); //Avisa a Ponte H para ligar o motor DIR em RÉ
  76.     } //Se não for esse o comando, tenta o próximo
  77.     if (comando=='G') //Se receber o comando "G" vira para a ESQ indo para FRENTE, o analógico está apontado para o canto superior ESQ
  78.     {
  79.       digitalWrite(esqEnable, LIGA); //Habilita o motor ESQ para receber comandos
  80.       digitalWrite(dirEnable, DESLIGA); //Desabilita o motor DIR de receber comandos
  81.       digitalWrite(ledReEsq, DESLIGA); //Desliga o LED ESQ, frente não precisa de sinalização
  82.       digitalWrite(ledReDir, DESLIGA); //Desliga o LED DIR, frente não precisa de sinalização
  83.       digitalWrite(esqFrente, LIGA); //Avisa a Ponte H para ligar o motor ESQ para FRENTE
  84.       digitalWrite(esqRe, DESLIGA); //Fecha o ciclo do motor corretamente
  85.       digitalWrite(dirFrente, DESLIGA);  //Motor DIR fica parado, permitindo rotação
  86.       digitalWrite(dirRe, DESLIGA); //Motor DIR fica parado, permitindo rotação
  87.     } //Se não for esse o comando, tenta o próximo
  88.     if (comando=='H') //Se receber o comando "H" vira para a ESQ dando RÉ, o analógico está apontado para o canto inferior ESQ
  89.     {
  90.       digitalWrite(esqEnable, LIGA); //Habilita o motor ESQ para receber comandos
  91.       digitalWrite(dirEnable, DESLIGA); //Desabilita o motor DIR de receber comandos
  92.       digitalWrite(ledReEsq, LIGA); //Liga o LED ESQ, sinalizando RÉ
  93.       digitalWrite(ledReDir, LIGA); //Liga o LED DIR, sinalizando RÉ
  94.       digitalWrite(esqFrente, DESLIGA); //Fecha o ciclo do motor corretamente
  95.       digitalWrite(esqRe, LIGA); //Avisa a Ponte H para ligar o motor ESQ em RÉ
  96.       digitalWrite(dirFrente, DESLIGA); //Motor DIR fica parado, permitindo rotação
  97.       digitalWrite(dirRe, DESLIGA); //Motor DIR fica parado, permitindo rotação
  98.     } //Se não for esse o comando, tenta o próximo
  99.     if (comando=='I') //Se receber o comando "I" vira para a DIR indo para FRENTE, o analógico está apontado para o canto superior DIR
  100.     {
  101.       digitalWrite(esqEnable, DESLIGA); //Desabilita o motor ESQ de receber comandos
  102.       digitalWrite(dirEnable, LIGA); //Habilita o motor DIR para receber comandos
  103.       digitalWrite(ledReEsq, DESLIGA); //Desliga o LED ESQ, frente não precisa de sinalização
  104.       digitalWrite(ledReDir, DESLIGA); //Desliga o LED DIR, frente não precisa de sinalização
  105.       digitalWrite(esqFrente, DESLIGA); //Motor ESQ fica parado, permitindo rotação
  106.       digitalWrite(esqRe, DESLIGA); //Motor ESQ fica parado, permitindo rotação
  107.       digitalWrite(dirFrente, LIGA); //Avisa a Ponte H para ligar o motor DIR para FRENTE
  108.       digitalWrite(dirRe, DESLIGA); //Fecha o ciclo do motor corretamente
  109.     } //Se não for esse o comando, tenta o próximo
  110.     if (comando=='J') //Se receber o comando "J" vira para a DIR dando RÉ, o analógico está apontado para o canto inferior DIR
  111.     {
  112.       digitalWrite(esqEnable, DESLIGA); //Desabilita o motor ESQ de receber comandos
  113.       digitalWrite(dirEnable, LIGA); //Habilita o motor DIR para receber comandos
  114.       digitalWrite(ledReEsq, LIGA); //Liga o LED ESQ, sinalizando RÉ
  115.       digitalWrite(ledReDir, LIGA); //Liga o LED DIR, sinalizando RÉ
  116.       digitalWrite(esqFrente, DESLIGA); //Motor ESQ fica parado, permitindo rotação
  117.       digitalWrite(esqRe, DESLIGA); //Motor ESQ fica parado, permitindo rotação
  118.       digitalWrite(dirFrente, DESLIGA); //Fecha o ciclo do motor corretamente
  119.       digitalWrite(dirRe, LIGA); //Avisa a Ponte H para ligar o motor DIR em RÉ
  120.     }
  121.    if (comando == 'S') //Se receber o comando S o carro para, assim como todos as luzes e sons
  122.    {
  123.       digitalWrite(esqEnable, DESLIGA); //Desabilita o motor ESQ de receber comandos
  124.       digitalWrite(dirEnable, DESLIGA); //Desabilita o motor DIR para receber comandos
  125.       digitalWrite(ledReEsq, DESLIGA); //Desliga o LED ESQ, sinalizando RÉ
  126.       digitalWrite(ledReDir, DESLIGA); //Desliga o LED DIR, sinalizando RÉ
  127.       digitalWrite(esqFrente, DESLIGA); //Motor ESQ fica parado, permitindo rotação
  128.       digitalWrite(esqRe, DESLIGA); //Motor ESQ fica parado, permitindo rotação
  129.       digitalWrite(dirFrente, DESLIGA); //Fecha o ciclo do motor corretamente
  130.       digitalWrite(dirRe, DESLIGA); //Avisa a Ponte H para Desligar o motor DIR em RÉ
  131.    }
  132.    
  133.    if (comando == 'V') //Se receber o comando "V" aciona a buzina
  134.    {
  135.     digitalWrite(buzina, LIGA); //Aciona a buzina
  136.    }
  137.    if (comando == 'v') //Se receber comando "v" desliga a buzina
  138.    {
  139.     digitalWrite(buzina, DESLIGA); //Desliga a buzina
  140.    }
  141.  
  142.   }
  143.  
  144. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement