Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "Ultrasonic.h"
- #define echoPin 10 //Pino 10 recebe o pulso do echo
- #define trigPin 9 //Pino 9 envia o pulso para gerar o echo
- #define ESQUERDO 0
- #define DIREITO 1
- int inPin = 2; //pino de entrada no sensor
- int valor = 0; //Inteiro que armazena o valor lido
- int ultValor;
- int Motor_D1 = 8;
- int Motor_D2 = 7;
- int Motor_DV = 6;
- int Motor_EV = 5;
- int Motor_E2 = 4;
- int Motor_E1 = 3;
- int ultimoMotorLigado = DIREITO;
- void alternaMotores();
- void stop();
- //iniciando a função e passando os pinos
- Ultrasonic ultrasonic(9,10);
- int parou = 0;
- void setup() {
- Serial.begin(9600); //inicializando a porta serial
- pinMode(inPin, INPUT); //colocando a porta 2 como entrada
- pinMode(echoPin, INPUT); // define o pino 10 como entrada (recebe)
- pinMode(trigPin, OUTPUT); // define o pino 9 como saida (envia)
- pinMode(Motor_E1, OUTPUT);
- pinMode(Motor_E2, OUTPUT);
- pinMode(Motor_EV, OUTPUT);
- pinMode(Motor_DV, OUTPUT);
- pinMode(Motor_D2, OUTPUT);
- pinMode(Motor_D1, OUTPUT);
- }
- void loop() {
- //seta o pino 9 com um pulso baixo "LOW" ou desligado ou ainda 0
- digitalWrite(trigPin, LOW);
- // delay de 2 microssegundos
- delayMicroseconds(2);
- //seta o pino 9 com pulso alto "HIGH" ou ligado ou ainda 1
- digitalWrite(trigPin, HIGH);
- //delay de 10 microssegundos
- delayMicroseconds(10);
- //seta o pino 9 com pulso baixo novamente
- digitalWrite(trigPin, LOW);
- // função Ranging, faz a conversão do tempo de
- //resposta do echo em centimetros, e armazena
- //na variavel distancia
- int distancia = (ultrasonic.Ranging(CM));
- Serial.print("Distancia em CM: ");
- Serial.println(distancia);
- delay(30); //espera 1 segundo para fazer a leitura
- ultValor = valor;
- valor = digitalRead(inPin);//realizando a leitura no sensor optico
- if(valor > 50 && ultValor <10) valor = 1;
- if (valor == HIGH)
- {
- Serial.println("Branco"); //caso o valor seja alto - cor branca
- }
- else
- {
- Serial.println("Preto"); //caso o valor lido seja baixo - cor preta
- }
- if (valor==HIGH && distancia > 30)
- {
- ///////////////////////////////////////////////////////////////////// E2 e D2 para frente
- Serial.println("FOLLOW THE LINE");
- alternaMotores();
- }
- else if (valor==LOW && ultimoMotorLigado == ESQUERDO && distancia > 30){
- analogWrite(Motor_EV, 70);
- analogWrite(Motor_DV, 118);
- digitalWrite(Motor_E2, HIGH);
- digitalWrite(Motor_E1, LOW);
- digitalWrite(Motor_D2, LOW);
- digitalWrite(Motor_D1, LOW);
- delay(100);
- stop();
- }
- else if (valor==LOW && ultimoMotorLigado == DIREITO && distancia > 30){
- analogWrite(Motor_EV, 70);
- analogWrite(Motor_DV, 118);
- digitalWrite(Motor_E2, LOW);
- digitalWrite(Motor_E1, LOW);
- digitalWrite(Motor_D2, HIGH);
- digitalWrite(Motor_D1, LOW);
- delay(100);
- stop();
- }
- else if (distancia<=30){
- stop();
- }
- }
- void alternaMotores(){
- analogWrite(Motor_EV, 80);
- analogWrite(Motor_DV, 135);
- if(ultimoMotorLigado == ESQUERDO){
- digitalWrite(Motor_E2, LOW);
- digitalWrite(Motor_E1, LOW);
- digitalWrite(Motor_D2, HIGH);
- digitalWrite(Motor_D1, LOW);
- delay(50);
- ultimoMotorLigado = DIREITO;
- }
- else if(ultimoMotorLigado == DIREITO){
- digitalWrite(Motor_E2, HIGH);
- digitalWrite(Motor_E1, LOW);
- digitalWrite(Motor_D2, LOW);
- digitalWrite(Motor_D1, LOW);
- delay(50);
- ultimoMotorLigado = ESQUERDO;
- }
- }
- void stop(){
- digitalWrite(Motor_E2, LOW);
- digitalWrite(Motor_E1, LOW);
- digitalWrite(Motor_D2, LOW);
- digitalWrite(Motor_D1, LOW);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement