Bem, Estou desenvolvendo um robô para uma competição nacional, ele deve seguir uma linha preta no chão, usamos o sensor de refletancia QRE - Analogico.
O problema esta em uma linha da programação na parte do ultrassonico : long microsec = ultrasonic.timing();
//quanto menor o valor, mais luz infravermelha chega ao sensor, portanto está no branco
//quanto maior o valor, menos luz infraverm. chega ao sensor, portanto está no preto
#include <Ultrasonic.h>
#define echoPin 13
#define trigPin 12
Ultrasonic ultrasonic(12, 13);
int sensorLinhaDir = A1;
int sensorLinhaEsq = A2;
int sensorCantoEsq = A0;
int sensorCantoDir = A3;
int S7 = A7;// sensor obstaculo
int valorsensorobs = 0;
int valorcorteobs = 50;
int S13 = 13;
int val = 0;
int distancia = 0;
int disdir= 0;
int disesq = 0;
int ValorCorte = 950;
//Standard PWM DC control
int E1 = 5; //M1 Speed Control
int E2 = 6; //M2 Speed Control
int M1 = 4; //M1 Direction Control //motores da direita
int M2 = 7; //M1 Direction Control //motores da esquerda
const int velocidade = 180;
int valorLinhaEsq, valorLinhaDir, valorCantoEsq, valorCantoDir = 0; // variable to store the value coming from the sensor
void setup() {
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(trigPin, OUTPUT);
}
void loop() {
float cmMsec, inMsec;
long microsec = ultrasonic.timing();
cmMsec = ultrasonic.convert(microsec, Ultrasonic::CM);
Serial.print("MS: ");
Serial.print(microsec);
Serial.print(", CM: ");
Serial.print(cmMsec);
delay(100);
valorLinhaEsq = analogRead(sensorLinhaEsq);
valorLinhaDir = analogRead(sensorLinhaDir);
valorCantoEsq = analogRead(sensorCantoEsq);
valorCantoDir = analogRead(sensorCantoDir);
if ((cmMsec > 20))
{
digitalWrite (dir1,LOW); //VELOCIDADE
digitalWrite (M2,LOW);
analogWrite (E1,velocidade2); //SENTIDO DE ROTAÇÃO
analogWrite (E2,velocidade2);
delay(200);
}
if ((cmMsec <= 20))
//indo para direita
{
digitalWrite (M1,HIGH); //VELOCIDADE
digitalWrite (M2,LOW);
analogWrite (E1,0); //SENTIDO DE ROTAÇÃO
analogWrite (E2,0);
delay(500);
}
else{
if((valorLinhaEsq > ValorCorte)&&(valorLinhaDir > ValorCorte)){
analogWrite (E1,velocidade); //VELOCIDADE
analogWrite (E2,velocidade); //VELOCIDADE
digitalWrite(M1,LOW); //SENTIDO DE ROTACAO
digitalWrite(M2,LOW); //SENTIDO DE ROTACAO
}
if((valorLinhaEsq < ValorCorte)&&(valorLinhaDir > ValorCorte)){
analogWrite (E1,velocidade); //CURVA PARA DIREITA
analogWrite (E2,velocidade);
digitalWrite(M1,HIGH);
digitalWrite(M2,LOW);
}
if((valorLinhaEsq > ValorCorte)&&(valorLinhaDir < ValorCorte)){
analogWrite (E1,velocidade); // CURVA PARA ESQUERDA
analogWrite (E2,velocidade);
digitalWrite(M1,LOW);
digitalWrite(M2,HIGH);
}
}
/* if((valorLinhaEsq > ValorCorte)&&(valorLinhaDir > ValorCorte)
&&(valorCantoEsq > ValorCorte)&&(valorCantoDir > ValorCorte)){
digitalWrite(M1,LOW); //SENTIDO DE ROTACAO
digitalWrite(M2,HIGH); //SENTIDO DE ROTACAO
analogWrite (E1,velocidade); //VELOCIDADE
analogWrite (E2,velocidade); //VELOCIDADE
delay(100);
}*/
}