Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <SoftwareSerial.h> //Inclui biblioteca Serial
- //Define nomes para LOW e HIGH
- #define LIGA HIGH
- #define DESLIGA LOW
- //Conecta o TX e RX em uma porta virtual UART
- SoftwareSerial Controle(11, 12);
- //Declara os pinos com nomes
- //ESQ = ESQUERDA | DIR = DIREITA | RE = RÉ
- const int esqFrente = 3;
- const int esqRe = 4;
- const int dirRe = 0;
- const int dirFrente = 2;
- const int esqEnable = 9;
- const int dirEnable = 6;
- const int ledReEsq = 7;
- const int ledReDir = 8;
- const int buzina = 1;
- //Define a variável que guardará o comando recebido
- char comando;
- void setup() //Variáveis Globais
- {
- //O arduino deverá entender esses pinos digitais apenas como SAÍDA
- pinMode(esqFrente, OUTPUT);
- pinMode(esqRe, OUTPUT);
- pinMode(dirFrente, OUTPUT);
- pinMode(dirRe, OUTPUT);
- pinMode(esqEnable, OUTPUT);
- pinMode(dirEnable, OUTPUT);
- pinMode(ledReEsq, OUTPUT);
- pinMode(ledReDir, OUTPUT);
- pinMode(buzina, OUTPUT);
- //Define a atualização da porta serial
- Controle.begin(9600);
- }
- void loop() //Começa o LOOP que se repete infinitamente
- {
- if (Controle.available()) //Se receber um comando do Controle, executa o comando
- {
- comando=(Controle.read()); //Guarda o comando recebido
- if ( (comando=='q') && (comando==NULL) ) //Se receber o comando "INICIO" apenas freia, o analógico está no meio ou sem posição definida
- { //Desliga todos os motores para frear
- digitalWrite(esqEnable, DESLIGA);
- digitalWrite(dirEnable, DESLIGA);
- digitalWrite(ledReEsq, DESLIGA);
- digitalWrite(ledReDir, DESLIGA);
- digitalWrite(esqFrente, DESLIGA);
- digitalWrite(esqRe, DESLIGA);
- digitalWrite(dirFrente, DESLIGA);
- digitalWrite(dirRe, DESLIGA);
- } //Se não for esse o comando, tenta o próximo
- if (comando=='F') //Se receber o comando "F" vai para FRENTE com ESQ e DIR, o analógico está apontado para frente
- {
- digitalWrite(esqEnable, LIGA); //Habilita o motor ESQ para receber comandos
- digitalWrite(dirEnable, LIGA); //Habilita o motor DIR para receber comandos
- digitalWrite(ledReEsq, DESLIGA); //Desliga o LED ESQ, frente não precisa de sinalização
- digitalWrite(ledReDir, DESLIGA); //Desliga o LED DIR, frente não precisa de sinalização
- digitalWrite(esqFrente, LIGA); //Avisa a Ponte H para ligar o motor ESQ para FRENTE
- digitalWrite(esqRe, DESLIGA); //Fecha o ciclo do motor corretamente
- digitalWrite(dirFrente, LIGA); //Avisa a Ponte H para ligar o motor DIR para FRENTE
- digitalWrite(dirRe, DESLIGA); //Fecha o ciclo do motor corretamente
- } //Se não for esse o comando, tenta o próximo
- if (comando=='B') //Se receber o comando "B" da RÉ com ESQ e DIR, o analógico está apontado para trás
- {
- digitalWrite(esqEnable, LIGA); //Habilita o motor ESQ para receber comandos
- digitalWrite(dirEnable, LIGA); //Habilita o motor DIR para receber comandos
- digitalWrite(ledReEsq, LIGA); //Liga o LED ESQ, sinalizando RÉ
- digitalWrite(ledReDir, LIGA); //Liga o LED DIR, sinalizando RÉ
- digitalWrite(esqFrente, DESLIGA); //Fecha o ciclo do motor corretamente
- digitalWrite(esqRe, LIGA); //Avisa a Ponte H para ligar o motor ESQ em RÉ
- digitalWrite(dirFrente, DESLIGA); //Fecha o ciclo do motor corretamente
- digitalWrite(dirRe, LIGA); //Avisa a Ponte H para ligar o motor DIR em RÉ
- } //Se não for esse o comando, tenta o próximo
- 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
- {
- digitalWrite(esqEnable, LIGA); //Habilita o motor ESQ para receber comandos
- digitalWrite(dirEnable, DESLIGA); //Desabilita o motor DIR de receber comandos
- digitalWrite(ledReEsq, DESLIGA); //Desliga o LED ESQ, frente não precisa de sinalização
- digitalWrite(ledReDir, DESLIGA); //Desliga o LED DIR, frente não precisa de sinalização
- digitalWrite(esqFrente, LIGA); //Avisa a Ponte H para ligar o motor ESQ para FRENTE
- digitalWrite(esqRe, DESLIGA); //Fecha o ciclo do motor corretamente
- digitalWrite(dirFrente, DESLIGA); //Motor DIR fica parado, permitindo rotação
- digitalWrite(dirRe, DESLIGA); //Motor DIR fica parado, permitindo rotação
- } //Se não for esse o comando, tenta o próximo
- if (comando=='H') //Se receber o comando "H" vira para a ESQ dando RÉ, o analógico está apontado para o canto inferior ESQ
- {
- digitalWrite(esqEnable, LIGA); //Habilita o motor ESQ para receber comandos
- digitalWrite(dirEnable, DESLIGA); //Desabilita o motor DIR de receber comandos
- digitalWrite(ledReEsq, LIGA); //Liga o LED ESQ, sinalizando RÉ
- digitalWrite(ledReDir, LIGA); //Liga o LED DIR, sinalizando RÉ
- digitalWrite(esqFrente, DESLIGA); //Fecha o ciclo do motor corretamente
- digitalWrite(esqRe, LIGA); //Avisa a Ponte H para ligar o motor ESQ em RÉ
- digitalWrite(dirFrente, DESLIGA); //Motor DIR fica parado, permitindo rotação
- digitalWrite(dirRe, DESLIGA); //Motor DIR fica parado, permitindo rotação
- } //Se não for esse o comando, tenta o próximo
- 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
- {
- digitalWrite(esqEnable, DESLIGA); //Desabilita o motor ESQ de receber comandos
- digitalWrite(dirEnable, LIGA); //Habilita o motor DIR para receber comandos
- digitalWrite(ledReEsq, DESLIGA); //Desliga o LED ESQ, frente não precisa de sinalização
- digitalWrite(ledReDir, DESLIGA); //Desliga o LED DIR, frente não precisa de sinalização
- digitalWrite(esqFrente, DESLIGA); //Motor ESQ fica parado, permitindo rotação
- digitalWrite(esqRe, DESLIGA); //Motor ESQ fica parado, permitindo rotação
- digitalWrite(dirFrente, LIGA); //Avisa a Ponte H para ligar o motor DIR para FRENTE
- digitalWrite(dirRe, DESLIGA); //Fecha o ciclo do motor corretamente
- } //Se não for esse o comando, tenta o próximo
- if (comando=='J') //Se receber o comando "J" vira para a DIR dando RÉ, o analógico está apontado para o canto inferior DIR
- {
- digitalWrite(esqEnable, DESLIGA); //Desabilita o motor ESQ de receber comandos
- digitalWrite(dirEnable, LIGA); //Habilita o motor DIR para receber comandos
- digitalWrite(ledReEsq, LIGA); //Liga o LED ESQ, sinalizando RÉ
- digitalWrite(ledReDir, LIGA); //Liga o LED DIR, sinalizando RÉ
- digitalWrite(esqFrente, DESLIGA); //Motor ESQ fica parado, permitindo rotação
- digitalWrite(esqRe, DESLIGA); //Motor ESQ fica parado, permitindo rotação
- digitalWrite(dirFrente, DESLIGA); //Fecha o ciclo do motor corretamente
- digitalWrite(dirRe, LIGA); //Avisa a Ponte H para ligar o motor DIR em RÉ
- }
- if (comando == 'S') //Se receber o comando S o carro para, assim como todos as luzes e sons
- {
- digitalWrite(esqEnable, DESLIGA); //Desabilita o motor ESQ de receber comandos
- digitalWrite(dirEnable, DESLIGA); //Desabilita o motor DIR para receber comandos
- digitalWrite(ledReEsq, DESLIGA); //Desliga o LED ESQ, sinalizando RÉ
- digitalWrite(ledReDir, DESLIGA); //Desliga o LED DIR, sinalizando RÉ
- digitalWrite(esqFrente, DESLIGA); //Motor ESQ fica parado, permitindo rotação
- digitalWrite(esqRe, DESLIGA); //Motor ESQ fica parado, permitindo rotação
- digitalWrite(dirFrente, DESLIGA); //Fecha o ciclo do motor corretamente
- digitalWrite(dirRe, DESLIGA); //Avisa a Ponte H para Desligar o motor DIR em RÉ
- }
- if (comando == 'V') //Se receber o comando "V" aciona a buzina
- {
- digitalWrite(buzina, LIGA); //Aciona a buzina
- }
- if (comando == 'v') //Se receber comando "v" desliga a buzina
- {
- digitalWrite(buzina, DESLIGA); //Desliga a buzina
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement