Pages: [1]   Go Down
Author Topic: Espera activa.  (Read 646 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 3
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Buenas tengo una placa orangutan LV-168 que la programamos con arduino, tenemos que hacer una espera activa, o eso nos han dixo los profesores. EL ROBOT se encuentra dando vueltas, cuando detecte presencia cn GP2d12 tiene que empujar el oponente y si mientras que empuja o da vueltas detecta linea blanca con el sensores de linea tiene q salir de empujar o dar vueltas y modificar la posicion hasta que no detecte linea blanca XX's segundos, y que vuela al bucle otra vez, este es el codigo que tenemos hasta ahora:


void loop()                                     // S'executa permanentment en forma de bucle
{
  gp2d12Adc = analog.readAverage(GP2D12, NUM_MOSTRES_GP2);  // Llegeix el canal 5 del ADC corresponent al sensor GP2D12
                                                            // Retorna un valor entre 0 - 1023 (0V - 5V)
                                                            // Fa 'NUM_MOSTRES_GP2' mostres (en el nostre cas 20) i en fa la mitja
                                                            // Cada mostra tarda aprox. 100us, per tant, una lectura completa en el
                                                            // nostre cas, suposa aprox. 100us x 20 = 2ms
  gp2d12mV = analog.toMillivolts(gp2d12Adc);    // Converteix el valor format 10bits a Milivolts de l'entrada Analògica (0 - 5000mV)
  
  lcd.gotoXY(0,0);                              // Situa cursor a XY=(0,0) -> posició 0, línea 0
  lcd.print("GP2:");                            // Mostra text per LCD (8 caràcters) sobrescriu contingut
  lcd.print(gp2d12Adc);                         // Printa valor format 10bits a continuació de "GP2:"
  lcd.print("    ");                            // Printa 4 espais a continuació per si es passa d'escriure 4 dígits a 3, 2 o 1
  
  lcd.gotoXY(2,1);                              // Situa cursor a XY=(2,1) -> posició 2, línea 1
  lcd.print(gp2d12mV);                          // Printa valor format Milivolts
  lcd.print("mV");                              // Printa "mV" a continuació del valor en milivolts
  lcd.print("    ");                            // Printa 4 espais a continuació per si es passa d'escriure 4 dígits a 3, 2 o 1
  

                          
  qtr.read(sensorsLinea);                         // Llegeix els sensors configurats, escriu lectures a 'sensorsLinea[]'  

  if (sensorsLinea[0] < LLINDAR_LINEA)
     {
          motors.setSpeeds(-motorSpeed, motorSpeed);                             //Quan detecta sensor dret es mou eskerra
          delay(750);
          motors.setSpeeds(motorSpeed, motorSpeed);
          delay(300);
     }
        
  else if (sensorsLinea[5] < LLINDAR_LINEA)                                     //Quan detecta sensor eskerre es mou dreta
     {
          motors.setSpeeds(motorSpeed, -motorSpeed);
          delay(750);
          motors.setSpeeds(motorSpeed, motorSpeed);
          delay(300);
      }
    
  else                                                                           // QUAN ESTEM SOBRE NEGRE
  {
    
    for(int i=0; i<300; i++)
    {
      gp2d12mV = analog.toMillivolts(analog.readAverage(GP2D12, NUM_MOSTRES_GP2));  // Llegeix el canal 5 del ADC corresponent al sensor GP2D12
                                  
    
    if(gp2d12mV > LLINDAR_GP2D12)                 // DETECTEM RIVAL
    {
      leds.red(HIGH);                              // Si detecta, Enciende LED vermell
      motors.setSpeeds(motorSpeed, motorSpeed);
  
      if((sensorsLinea[0] < LLINDAR_LINEA) | (sensorsLinea[5] < LLINDAR_LINEA))      // QUAN DETECTEM LA LÍNEA, TIREM ENRERE DURANT 2SEGONS
        {
          motors.setSpeeds(0,0);
          
          //if (i>10)                                    //evitar rebots
            i=300;                                      //sortida
        }
      
    
    }
    else
    {
       leds.red(LOW);                            // Apaguem LED vermell
      motors.setSpeeds(-motorSpeed, motorSpeed);   // girem
      
      if((sensorsLinea[0] < LLINDAR_LINEA) | (sensorsLinea[5] < LLINDAR_LINEA))      // QUAN DETECTEM LA LÍNEA, TIREM ENRERE DURANT 2SEGONS
        {
          motors.setSpeeds(0,0);
          //if (i>10)                                    
            i=300;                                      
        }
    }
  
          

    delay (10);  


llinadr linea= al valor que nos dice si es blanco o negro


el problema que tenemos es que cuando detecta oponente empuja pero pasa por la linea blanca y no retrocede, nose si es mejor parar los motores un instante y luego retrocenda o no se que podemos hacer..

Gracias
Logged

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

Buenoo!! ya esta solucionado lo solucionamos un rato despues de poner este post, el problema estaba que cuando entrbamos en el FOR no le deciamos que leiera el sensor por eso no salia de la rutina!!

Graicas
Logged

Pages: [1]   Go Up
Jump to: