Robot seguidor de línea usando el control PID

0

Estoy usando Arduino UNO para un robot seguidor de línea pid. El robot funciona muy bien, pero cuando detecta una línea T, se desvía de la línea. Así que trato de establecer la condición si todos los sensores ven negro y luego ven blanco, desviarse hacia la izquierda, esa es mi intención. Pero el problema es que la condición if nunca se ejecuta, nunca se ve que todos los sensores son todos negros y luego blancos. aquí está mi código

void loop()
{
// convert analog signals into digital ones

    for (int i = 0 ; i < 5; i++)
      {

        if (sensors[i] > 900)
        {
          sensor[i] = 1;

        }
        else
        {
          sensor[i] = 0;
        }
      }

      for (int i = 0 ; i < 5; i++)
      {
        Serial.print(sensor[i]);
        Serial.print("\t");
      }
      Serial.println();


      if ((sensor[0] == 0) && (sensor[2] == 0) && (sensor[3] == 0) && (sensor[4] == 0))
      {
         if ((sensor[0] == 1)  && (sensor[2] == 1) && (sensor[3] == 1) && (sensor[4] == 1))
        {
          set_motors(0, 255);
          bLine = true;
          Serial.print("black");
        }
   }
    
pregunta Ahmed Saleh

1 respuesta

0

Dentro de su bucle principal, asigne valores a la matriz sensor[] aquí:

if (sensors[i] > 900)
{
  sensor[i] = 1;
}
else
{
  sensor[i] = 0;
}

y luego verifique los valores aquí:

if ((sensor[0] == 0) && (sensor[2] == 0) && (sensor[3] == 0) && (sensor[4] == 0))
{
    if ((sensor[0] == 1)  && (sensor[2] == 1) && (sensor[3] == 1) && (sensor[4] == 1))
    {
      set_motors(0, 255);
      bLine = true;
      Serial.print("black");
    }
}

Si ingresa la primera instrucción if (es decir, si todos los elementos sensor[] son 0 ), ¿cómo ingresaría la segunda instrucción if? Necesita alguna forma de actualizar los valores del sensor entre los dos. Por ejemplo:

if ((sensor[0] == 0) && (sensor[2] == 0) && (sensor[3] == 0) && (sensor[4] == 0))
{
    delay(50); // adjust delay depending on robot speed

    // check all of the sensors again
    for (int i = 0 ; i < 5; i++)
    {
        if (sensors[i] > 900)
        {
            sensor[i] = 1;
        }
        else
        {
            sensor[i] = 0;
        }
    }

    if ((sensor[0] == 1)  && (sensor[2] == 1) && (sensor[3] == 1) && (sensor[4] == 1))
    {
        set_motors(0, 255);
        bLine = true;
        Serial.print("black");
    }
}
    
respondido por el Cheibriados

Lea otras preguntas en las etiquetas