Há uns dois dias estou travado, tentando fazer o robô conseguir fazer a curva. Ele segue a linha direito, mas quando chega numa curva fechada ele praticamente a ignora e segue reto. A menos que seja colocado perto da mesma, porque nesse caso ele consegue fazer a curva. (Colocarei vídeos abaixo demonstrando melhor). Gostaria que alguém pudesse me ajudar ou dar qualquer dica, pois já tentei de tudo, variando velocidade e até a posição dos sensores. O código estará também abaixo:
#define DirEsq 7
#define DirDir 4
#define VelEsq 6
#define VelDir 5
#define s1 10
#define s2 11
#define s3 12
#define s4 13
char Cor1,Cor2,Cor3,Cor4;
void Parar(){
analogWrite(VelEsq,0);
analogWrite(VelDir,0);
}
void Frente(int Velocidade1,int Velocidade2){
digitalWrite(DirEsq,HIGH);
digitalWrite(DirDir,HIGH);
analogWrite(VelEsq,Velocidade1);
analogWrite(VelDir,Velocidade2);
}
void Tras(int Velocidade1,int Velocidade2){
digitalWrite(DirEsq,LOW);
digitalWrite(DirDir,LOW);
analogWrite(VelEsq,Velocidade1);
analogWrite(VelDir,Velocidade2);
}
void Esquerda(int Velocidade1,int Velocidade2){
Tras(255,255);
digitalWrite(DirEsq,LOW);
digitalWrite(DirDir,HIGH);
analogWrite(VelEsq,Velocidade1);
analogWrite(VelDir,Velocidade2);
}
void Direita(int Velocidade1,int Velocidade2){
digitalWrite(DirEsq,HIGH);
digitalWrite(DirDir,LOW);
analogWrite(VelEsq,Velocidade1);
analogWrite(VelDir,Velocidade2);
}
void Ler(){
if(digitalRead(s1) == 1)
Cor1 = ‘P’;
if(digitalRead(s1) == 0)
Cor1 = ‘B’;
if(digitalRead(s2) == 1)
Cor2 = ‘P’;
if(digitalRead(s2) == 0)
Cor2 = ‘B’;
if(digitalRead(s3) == 1)
Cor3 = ‘P’;
if(digitalRead(s3) == 0)
Cor3 = ‘B’;
if(digitalRead(s4) == 1)
Cor4 = ‘P’;
if(digitalRead(s4) == 0)
Cor4 = ‘B’;
}
void setup() {
pinMode(DirEsq,OUTPUT);
pinMode(DirDir,OUTPUT);
pinMode(VelEsq,OUTPUT);
pinMode(VelDir,OUTPUT);
pinMode(s1,INPUT);
pinMode(s2,INPUT);
pinMode(s3,INPUT);
pinMode(s4,INPUT);
digitalWrite(DirEsq,HIGH);
digitalWrite(DirDir,HIGH);
delay(1000);
}
void loop() {
Ler();//ver o estado de cada sensor
Serial.print(Cor1);
Serial.print(" ");
Serial.print(Cor2);
Serial.print(" ");
Serial.print(Cor3);
Serial.print(" ");
Serial.println(Cor4);
if(digitalRead(s2) == 0 and digitalRead(s3) == 0){ //B B
if(digitalRead(s1) == 1 and digitalRead(s4) == 0){
Esquerda(255,255);
}
if(digitalRead(s1) == 0 and digitalRead(s4) == 1){
Direita(255,255);
}
if(digitalRead(s1) == 0 and digitalRead(s4) == 0){
Frente(70,70);
}
if(digitalRead(s1) == 1 and digitalRead(s4) == 1){
Parar();
}
}
if(digitalRead(s2) == 1 and digitalRead(s3) == 0){ //P B
if(digitalRead(s1) == 1){
Esquerda(255,255);
}
else{
Frente(70,255);
}
}
if(digitalRead(s2) == 0 and digitalRead(s3) == 1){ //B P
if(digitalRead(s4) == 1){
Direita(255,255);
}
else{
Frente(255,70);
}
}
if(digitalRead(s2) == 1 and digitalRead(s3) == 1){ //P P
if(digitalRead(s1) == 1 and digitalRead(s4) == 0){
Esquerda(255,255);
}
if(digitalRead(s1) == 0 and digitalRead(s4) == 1){
Direita(255,255);
}
if(digitalRead(s1) == 0 and digitalRead(s4) == 0){
Frente(70,70);
}
if(digitalRead(s1) == 1 and digitalRead(s4) == 1){
Parar();
}
}
}