Boas novamente pessoal, Estou com um problema acho que pode ser relativamente a pista ou aos sensores. Relembro que os sensores são digitais, peço desculpa se perceberam o contrário
O robô já detecta a linha branca mas não a consegue seguir. Ele fica quase parado, as vezes dá os avanços pequenos mas nada de especial.
Os motores estão a funcionar, a bateria esta carregada, ele já andou em cima da pista sem seguir a linha.
A linha branca é uma fita espelhada branca sobre um fundo preto.
Apliquei o que tá neste site também, desde já obrigado deu muito jeito
http://bildr.org/2011/06/qre1113-arduino/O código é este, o robô tem o objectivo de seguir a linha:
#include <L293D.h>
L293D motores(11,9,8,10,7,6);
int pinSensorMeio = 3;
int pinSensorDireita = 2;
int pinSensorEsquerda = 4;
int valueSM, valueSD, valueSE, state;
void setup(){
Serial.begin(9600);
}
void loop(){
state = estadoBarra();
switch(state){
case 1:
Serial.println("1");
motores.frente(255,255);
break;
case 2:
Serial.println("2");
motores.frente(255,128);
break;
case 3:
Serial.println("3");
motores.frente(255,128);
break;
case 4:
Serial.println("4");
motores.frente(128,255);
break;
case 5:
Serial.println("5");
motores.frente(128,255);
break;
case 6:
Serial.println("6");
motores.stop();
break;
case 7:
Serial.println("7");
motores.stop();
break;
case 8:
Serial.println("8");
motores.tras(255,255);
break;
}
delay(250);
}
int readSensorDigital(int pinNumber){
pinMode(pinNumber, OUTPUT );
digitalWrite(pinNumber, HIGH );
delayMicroseconds(10);
pinMode(pinNumber, INPUT );
long time = micros();
while (digitalRead(pinNumber) == HIGH && micros() - time < 3000);
int diff = micros() - time;
return diff;
}
int estadoBarra(){
int estado;
valueSM = readSensorDigital(pinSensorMeio);
valueSD = readSensorDigital(pinSensorDireita);
valueSE = readSensorDigital(pinSensorEsquerda);
if(valueSE > 2000 && valueSM < 800 && valueSD > 2000){
estado = 1;
}
else if(valueSE > 2000 && valueSM < 800 && valueSD < 800){
estado = 2;
}
else if(valueSE > 2000 && valueSM > 2000 && valueSD < 800){
estado = 3;
}
else if(valueSE < 800 && valueSM < 800 && valueSD > 2000){
estado = 4;
}
else if(valueSE < 800 && valueSM > 2000 && valueSD > 2000){
estado = 5;
}
else if(valueSE < 800 && valueSM < 800 && valueSD < 800){
estado = 6;
}
else if(valueSE > 2000 && valueSM > 2000 && valueSD > 2000){
estado = 7;
}
else{
estado = 8;
}
return estado;
}