Simulating a robot' s movement on a 2d array

Hi,

I am trying to simulate my robot' s movement on a 7x7 array, all elements are 1 except robot' s starting point which is 0. When my robot moves, elements that are passed by robot will be 0.

I could move forward perfectly, but i want to turn left if the distance less than 10 cm -i used ultrasonic range sensor for this- .

My sketch is like this:

#include <Servo.h>
#define x 7
#define y 7
#include <NewPing.h>

#define TRIGGER_PIN  12  // Arduino pin tied to trigger pin on the ultrasonic sensor.
#define ECHO_PIN     11  // Arduino pin tied to echo pin on the ultrasonic sensor.
#define MAX_DISTANCE 200 // Maximum distance we want to ping for (in centimeters). Maximum sensor distance is rated at 400-500cm.
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance.

Servo myServo;
Servo myServo2;

int pos = 0;
int pos2;

int counter;
int counter1 = 0;
int counter2;
int integer;
int integer2;
int integer3;
int counter4;

void setup() {
  Serial.begin(9600);
  myServo.attach(9);
  myServo2.attach(10);

}

void loop() {


  int my2dArray[x][y] = {
    {2, 2, 2, 2, 2, 2, 2},
    {2, 1, 1, 1, 1, 1, 2},
    {2, 1, 1, 1, 1, 1, 2},
    {2, 1, 1, 0, 1, 1, 2},
    {2, 1, 1, 1, 1, 1, 2},
    {2, 1, 1, 1, 1, 1, 2},
    {2, 2, 2, 2, 2, 2, 2},
  };

  long distance = sonar.ping_cm();
  int robot = my2dArray[3][3];

  if (counter1 > 0 && distance > 10) {
    for (integer = 0;  integer < counter1; integer += 1) {  
      counter4 = counter4 + 1;
               my2dArray[3 + integer][3] = robot * my2dArray[3 + integer][3];

    }

  }
  else if (distance = 10) {
    for (pos = 0; pos <= 180  ; pos += 1) {
      myServo.write(pos);
    }
    }
 else if (distance > 10) {
      for (pos = 0; pos <= 360  ; pos += 1) {
        myServo.write(pos);
        myServo2.write(pos);
        if (pos == 180) {
          counter2 +=  1;
        }
        for (integer3 = 0;  integer3 < counter2; integer3 += 1) { 

          my2dArray[3 + counter4][3 + integer3] = robot * my2dArray[3 + counter4][3 + integer3];

        }

      }
    }
  

  for (integer2 = 0; integer2 < 7; integer2++) {
    Serial.print(my2dArray[integer2][0]); Serial.print("|");
    Serial.print(my2dArray[integer2][1]); Serial.print("|");
    Serial.print(my2dArray[integer2][2]); Serial.print("|");
    Serial.print(my2dArray[integer2][3]); Serial.print("|");
    Serial.print(my2dArray[integer2][4]); Serial.print("|");
    Serial.print(my2dArray[integer2][5]); Serial.print("|");
    Serial.println(my2dArray[integer2][6]);
  }


  Serial.println();

  for (pos = 0; pos <= 180  ; pos += 1) {
    myServo.write(pos);
    myServo2.write(pos);
    if (pos == 180) {
      counter1 +=  1;
    }

  }

  delay(1000);
}

When distance is less then 10 cm it gives output as just this:

2|2|2|2|2|2|2
2|1|1|1|1|1|2
2|1|1|1|1|1|2
2|1|1|0|1|1|2
2|1|1|1|1|1|2
2|1|1|1|1|1|2
2|2|2|2|2|2|2

Same as my declaration. Can' t process through the last else-if statement. Can you help me?
Thanks.

else if (distance = 10)

^^ This should be == instead of =

Now it is an assignment: distance becomes 10 and the condition is true. You want to do a comparison. The operator for that is ==

Same as my declaration. Can' t process through the last else-if statement. Can you help me?

if (counter1 > 0 && distance > 10)
{
}
else if (distance = 10)
{ // you always go here. distance becomes 10
}
else if (distance > 10) // should that be < 10 or is it for when counter 1 <= 0 ?
{
}

You don't do anything for distance less than 10.

Chnaged the if/else part :

if (counter1 > 0 && distance > 10) {
    for (integer = 0;  integer < counter1; integer += 1) { 
      counter4 = counter4 + 1;
               my2dArray[3 + integer][3] = robot * my2dArray[3 + integer][3];

    }

  }
  else if (distance <= 10) {
    for (pos = 0; pos <= 180  ; pos += 1) {
      myServo.write(pos);
    }
    for (pos = 0; pos <= 360  ; pos += 1) {
        myServo.write(pos);
        myServo2.write(pos);
        if (pos == 180) {
          counter2 +=  1;
        }
        for (integer3 = 0;  integer3 < counter2; integer3 += 1) {  
          my2dArray[3 + counter4][3 + integer3] = robot * my2dArray[3 + counter4][3 + integer3];

        }

      }
    
    
    }

But still getting same result. You' re right but i still can' t understand why i get same result.

With your change, it now outputs this if distance < 10:

2|2|2|2|2|2|2
2|1|1|1|1|1|2
2|1|1|1|1|1|2
2|1|1|0|1|1|2
2|1|1|1|1|1|2
2|1|1|1|1|1|2
2|2|2|2|2|2|2

2|2|2|2|2|2|2
2|1|1|1|1|1|2
2|1|1|1|1|1|2
2|1|1|0|0|1|2
2|1|1|1|1|1|2
2|1|1|1|1|1|2
2|2|2|2|2|2|2

2|2|2|2|2|2|2
2|1|1|1|1|1|2
2|1|1|1|1|1|2
2|1|1|0|0|0|2
2|1|1|1|1|1|2
2|1|1|1|1|1|2
2|2|2|2|2|2|2

2|2|2|2|2|2|2
2|1|1|1|1|1|2
2|1|1|1|1|1|2
2|1|1|0|0|0|0
2|1|1|1|1|1|2
2|1|1|1|1|1|2
2|2|2|2|2|2|2

2|2|2|2|2|2|2
2|1|1|1|1|1|2
2|1|1|1|1|1|2
2|1|1|0|0|0|0
0|1|1|1|1|1|2
2|1|1|1|1|1|2
2|2|2|2|2|2|2

2|2|2|2|2|2|2
2|1|1|1|1|1|2
2|1|1|1|1|1|2
2|1|1|0|0|0|0
0|0|1|1|1|1|2
2|1|1|1|1|1|2
2|2|2|2|2|2|2

etc..