WaitForSeconds, only pausing once

I have a WaitForSeconds (which I use to rotate something for a fix amount of time, then reverse the rotation) but it happens once, then it keeps calling rotateSpeed *= -1; and skips the yield return new WaitForSeconds(waitFor);

void Update()
{
    RotateCamera();
}

private void RotateCamera()
{
    transform.Rotate(Vector3.forward * Time.deltaTime * rotateSpeed);
    StartCoroutine(Timer());
}

private IEnumerator Timer()
{
    yield return new WaitForSeconds(waitFor);
    rotateSpeed *= -1;
}

As written you start a new coroutine every frame, leading to rotateSpeed *= -1; being executed roughly every frame after waitFor has passed.

If you want the coroutine to run only once, set a flag to remember that it is already running.