Move player left or right after x seconds

Hi, I’m struggling on some simple code and I’m not sure why it isn’t working as expected.
I’ve got a player character that moves forward at a constant rate, but after so many seconds (currently set at 2), I want the player to move to the left Lane (if they are in the right) and into the right lane (if they are in the left). The end aim is for this movement to repeat but with a random time (timer=Random.Range(2,6):wink:
I believe the issue with the player moving incorrectly (They currently move right after the first seconds despite being in the right lane (laneNum=1 means right Lane) and then not moving L/R again) is down to the RandomMove() Coroutine but I’m unsure what sepcifically I’m doing wrong.
Any help is appreciated!
Here is the code:

           private bool goLeft;
private bool goRight;

public int laneNum = 1;

public float speed;
private float horizVel;
private float timer;

// Use this for initialization
void Start () {

    goLeft = false;
    goRight = false;

    timer = 2;
    	
}

// Update is called once per frame
void Update()
{
 
    transform.position = transform.position + new Vector3(horizVel, 0, 1) * speed * Time.deltaTime;
    StartCoroutine(MoveRandom(timer));

    if (goLeft)
    {
        
        horizVel = -1;
        StartCoroutine(StopSlide());
        goLeft = false;
        laneNum -= 1;

    }

    if (goRight)
    {
        
        horizVel = 1;
        StartCoroutine(StopSlide());
        goRight = false;
        laneNum += 1;

    }

}


IEnumerator MoveRandom(float timer)
{
    yield return new WaitForSeconds(timer);
    if (laneNum == 0)
    {
        goRight = true;
    }
    if (laneNum == 1)
    {
        goLeft = true;
    }

}

IEnumerator StopSlide()
{
    yield return new WaitForSeconds(0.5f);
    horizVel = 0;
}

}

I would use Invoke rather than a coroutine. Invoke(“MoveRandom”, seconds);