Go Down

Topic: Array de sensores CNY70, (Read 2805 times) previous topic - next topic

Fred Gomes

ahh..
eu já percebi o que queres dizer..
era para alterar o meu código e deixar de usar os valores binários não é? , por causaimo código  da minha dúvida anterior..

mas essa questão já está resolvida, vê o último código que eu deixei, eu é-me retornado um valor décimal (valor décima respectivo ao valor em binário que o senval[] contêm (não te esqueças que estou a efectuar uma leitura digital).

e a minha dúvida agora é consoante o valor biinário/decimal que eu obtenho quero obter um erro (podes ver na programação),

e o que eu queria que me ajudasses era a resolver este meu problema, já experimentei colocar um seguimento de IF´s para o valor decimal(respectivo ao codigo em binario que tenho na programação ) , e em função desse valor decimal obter um erro, mas ao fazer o print de error este nunca me varia de 0.0, sabes pq isso aocntece?.. era ai que queria que me ajudasses..

Fred Gomes

quanto a isto:

Code: [Select]
(valorsensor==0b00100) || (valorsensor=0b01110)
eu estava a pensar que o que eu estava a fazer ia fazer: se valor sensor = XXX, OU YYY, ao fazer o OU ele ia substituir o que estava em XXX por YYY e se se verifica-se apenas um destes casos ele efectuava aquela condição..

mas vou expeirmentar como disseste..
ja digo os resultados..

Fred Gomes

Code: [Select]
/* 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 (2, INPUT);    
 pinMode (3, INPUT);    
 pinMode (4, INPUT);    
 pinMode (5, INPUT);
 pinMode (6, INPUT);
 digitalWrite (2, HIGH);
 digitalWrite (3, HIGH);
 digitalWrite (4, HIGH);
 digitalWrite (5, HIGH);
 digitalWrite (6, HIGH);
}
void loop(){
errorval = LineError();



 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(200);
 Serial.println(errorval);

}

// escolher o sensor que esta sobre a linha

double LineError()
{
 double error = 0.0;
 int valorsensor = 0;
 for (int i=0; i < nsensores; i++){
 
   senval[i] = digitalRead (sensor[i]);
 }
 valorsensor = (senval[0]) | (senval[1]<<1) | (senval[2]<<2) | (senval[3]<<3) | (senval[4]<<4);
 Serial.println ("valor do sensor");
 Serial.println(valorsensor);
 delay(500);


 if (valorsensor== 0b10000){
   valorsensor = 16;
   error = -1.0;
 }
 else if (valorsensor == 0b11000){
   valorsensor = 24;
   error = -0.75;
 }
 else if (valorsensor == 0b01000){
   valorsensor = 8;
   error = -0.5;
 }
 else if (valorsensor == 0b01100){
   valorsensor = 12;
   error = -0.25;
 }
 else if((valorsensor==0b00100) || (valorsensor=0b01110)){
   valorsensor = 4 ||14;
   error = 0.0;
 }
 else if (valorsensor == 0b00110){
   valorsensor = 6;
   error = 0.25;
 }
 else if (valorsensor == 0b00010){
   valorsensor = 2;
   error = 0.5;
 }
 else if (valorsensor == 0b00011){
   valorsensor = 3;
   error = 0.75;
 }
 else if (valorsensor == 0b00001){
   valorsensor = 1;
   error = 1.0;
 
 }
 return error;
}


devia funcionar, e o error não me varia de 0.0..

Italo Lima

Problema na mesma linha :)

olha as igualdades. Tem um == e um =.

Fred Gomes

é isso:D
já funciona...

muito obrigado pela ajuda...

olha, se quiseres , tens aqui um forum muito fixe..: lusorobotica.com , de robotica..

podemos encontrar-nos lá;) e ves lá o meu projecto final de curso que ando a construir..

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy