Smooth reset rotation problem

Hi, I want make a very very simple smooth reset rotation function. To test it I just make a simple Cube and then attach this script to it. I also make a simple Empty game object with zero rotation as the target rotation.

What I expect is if after I rotate the Cube by moving the mouse while pressing the right button, then I press the “r” key on keyboard, the cube rotate back smoothly to it’s original rotation.

But what I get is I must press the “r” key repeatedly 'till the Cube reach zero rotation.

Someone could help me to fix this script pleasse?

using UnityEngine;
using System.Collections;

public class cameraRotation : MonoBehaviour {

	public float 	turnSpeed 	= 300f;
	public float 	smooth 		= 100f;
	public Transform 	target;

	private Transform 	myTransform;

	void Awake()
	{
		myTransform = transform;
	}

	void Update()
	{
		if(Input.GetMouseButton(1))
		{
			myTransform.Rotate(new Vector3(0, Input.GetAxis("Mouse X") * turnSpeed * Time.deltaTime, 0));
		}
		
		if(Input.GetKeyDown("r"))
		{
			float step = smooth * Time.deltaTime;
			transform.rotation = Quaternion.RotateTowards(transform.rotation, target.rotation, step);
		}
	}
}

Add this function to the coroutine:

using UnityEngine;
using System.Collections;
	
public class cameraRotation : MonoBehaviour {
	public float turnSpeed = 300f;
	public float smooth = 100f;
	public Transform target;
	private Transform myTransform;
	private bool isReset;
	
	void Awake() {
		myTransform = transform;
	}
	
	void Update() {
		if (Input.GetMouseButton(1) && !isReset) {
			myTransform.Rotate(new Vector3(0, Input.GetAxis("Mouse X") * turnSpeed * Time.deltaTime, 0));
		}
		if (Input.GetKeyDown("r")) {	
			StartCoroutine(Reset());
		}
	}
	
	IEnumerator Reset() {
		if (isReset) yield break;
		isReset = true;
		float timer = 0f;
		Quaternion startRot = transform.rotation;
		while (timer <= 1f) {
			timer += Time.deltaTime * smooth/100f;
			transform.rotation = Quaternion.Lerp(startRot, target.rotation, timer);
			yield return new WaitForEndOfFrame();
		}
		Debug.Log(timer);
		transform.rotation = target.rotation;
		isReset = false;
		yield break;
	}
}