Boas.
estou a efectuar um código para um seguidor de linhas, para isso tenho 5 sensores cny70 (não são cny70 mas são muito semelhantes e funcionam da mesma forma), e estou procurando obter um erro, e consoante esse erro o robot irá diminuir mais/menos a velocidade de um dos motores.
o que me acontece é que ao imprimir o valor do errorval este nunca me varia de 0.0, alguem em consegue ajudar e ver o que tenho de errado no código?
/* variaveis de utilizadas*/
const int nsensores = 5;
const int sensor[] = {2,3,4,5,6};
const int motor_right = 10;
const int motor_left = 11;
/* variaveis auxiliares*/
int senval[] = {0,0,0,0,0};
int vel_right = 0;
int vel_left = 0;
int maxvel = 200;
double errorval = 0.0;
boolean stop = false;
void setup(){
Serial.begin(9600);
pinMode (motor_right, OUTPUT);
pinMode (motor_left, OUTPUT);
pinMode (0, INPUT);
pinMode (1, INPUT);
pinMode (2, INPUT);
pinMode (3, INPUT);
pinMode (4, INPUT);
digitalWrite (0, HIGH);
digitalWrite (1, HIGH);
digitalWrite (2, HIGH);
digitalWrite (3, HIGH);
digitalWrite (4, HIGH);
}
void loop(){
//1º lemos o valor dos sensores
readALLsensores();
if(errorval < 0.0){
vel_left = (int)(maxvel*(1-fabs(errorval)));
vel_right = (int)(maxvel);
}
else if(errorval > 0.0){
vel_left = (int)(maxvel);
vel_right = (int)(maxvel*(1-errorval));
}
else{
vel_left = (int)(maxvel);
vel_right = (int)(maxvel);
}
//Fazer actuar os motores:
analogWrite(motor_right,vel_right);
analogWrite(motor_left, vel_left);
delay(10);
Serial.println(errorval);
delay(500);
}
//FUNÇOES:
void readALLsensores(){
for (int i=0; i < nsensores; i++)
{
senval[i] = digitalRead (sensor[i]);
}
}
// escolher o sensor que esta sobre a linha
int bestsensor(int senval[])
{
int best = 0;
for (int i=0; i < nsensores; i++)
{
if(senval[i] == 1){
best = i;
}
}
return best;
}
double error(int senval[])
{
int best = bestsensor (senval);
double lineError(int senVal[]);
double error = 0.0;
errorval = error;
if (best== 0){
error = -1.0;
}
else if(best== 1){
error = -0.5;
}
else if( best == 2){
error = 0.0;
}
else if(best == 3){
error = 0.5;
}
else if(best == 4){
error = 1.0;
}
return error;
}
experimentei também este código simples, e o errorval nunca m varia de 1.0, são coisas que eu não consigo perceber e perciso de ajuda, :
int sensor1 = 2;
int sensor2 = 3;
int sensor3 = 4;
int sensor4 = 5;
int sensor5 = 6;
double errorval = 0.0;
void setup(){
Serial.begin(9600);
digitalWrite(sensor1, HIGH);
digitalWrite(sensor2,HIGH);
digitalWrite(sensor3,HIGH);
digitalWrite(sensor4,HIGH);
digitalWrite(sensor5,HIGH);
}
void loop(){
if(digitalRead(sensor1 == 1)){
errorval = 1.0;
}
else if (digitalRead(sensor2 == 1)){
errorval = 0.5;
}
else if (digitalRead(sensor3 == 1)){
errorval = 0.0;
}
else if (digitalRead(sensor4 == 1)){
errorval = -0.5;
}
else if(digitalRead (sensor5 == 1)){
errorval = -1.0;
}
Serial.println(errorval);
delay(500);
}