Pages: 1 [2]   Go Down
Author Topic: Array de sensores CNY70,  (Read 2217 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 26
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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..
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 26
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

quanto a isto:

Code:
(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..
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 26
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
/* 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..
Logged

Rio de janeiro
Offline Offline
Full Member
***
Karma: 0
Posts: 104
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Problema na mesma linha smiley

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

0
Offline Offline
Newbie
*
Karma: 0
Posts: 26
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

é 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..
Logged

Pages: 1 [2]   Go Up
Jump to: