Adding coroutine to raycast

Hi,

I’m trying to add this coroutine to the below raycast script in an attempt to initiate a delay
after the raycast contacts a collider. How would I implement this?
Thanks in advance.

StartCoroutine(WaitAndAnimate(5.0f));

 IEnumerator WaitAndAnimate(float waitTime) {
       yield return new WaitForSeconds(waitTime);
  }
using UnityEngine;
using System.Collections;
public class TapToMove : MonoBehaviour {
//flag to check if the user has tapped / clicked.
//Set to true on click. Reset to false on reaching destination
private bool flag = false;
//destination point
private Vector3 endPoint;
//alter this to change the speed of the movement of player / gameobject
public float duration = 50.0f;
//vertical position of the gameobject
private float yAxis;
void Start(){
  //save the y axis value of gameobject
  yAxis = gameObject.transform.position.y;
}

// Update is called once per frame
void Update () {

  //check if the screen is touched / clicked
  if((Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Began) || (Input.GetMouseButtonDown(0)))
  {
   //declare a variable of RaycastHit struct
   RaycastHit hit;
   //Create a Ray on the tapped / clicked position
   Ray ray;
   //for unity editor
   #if UNITY_EDITOR
   ray = Camera.main.ScreenPointToRay(Input.mousePosition);
   //for touch device
   #elif (UNITY_ANDROID || UNITY_IPHONE || UNITY_WP8)
   ray = Camera.main.ScreenPointToRay(Input.GetTouch(0).position);
   #endif
   //Check if the ray hits any collider
   if(Physics.Raycast(ray,out hit))
   {
    //set a flag to indicate to move the gameobject
    flag = true;
    //save the click / tap position
    endPoint = hit.point;
    //as we do not want to change the y axis value based on touch position, reset it to original y axis value
   // endPoint.y = yAxis;




    Debug.Log(endPoint);
   }

  }


  //check if the flag for movement is true and the current gameobject position is not same as the clicked / tapped position
  if(flag && !Mathf.Approximately(gameObject.transform.position.magnitude, endPoint.magnitude)){ //&& !(V3Equal(transform.position, endPoint))){
   //move the gameobject to the desired position
   gameObject.transform.position = Vector3.Lerp(gameObject.transform.position, endPoint, 1/(duration*(Vector3.Distance(gameObject.transform.position, endPoint))));
  }
  //set the movement indicator flag to false if the endPoint and current gameobject position are equal
  else if(flag && Mathf.Approximately(gameObject.transform.position.magnitude, endPoint.magnitude)) {
   flag = false;
   Debug.Log("I am here");
  }

}
}//}
IEnumerator CoroutineSample(float waitTIme)
{
    DoWhatever_BeforeWait();
    yield return new WaitForSeconds(waitTime);
    DoWhatever_AfterWait();
}

Also I recommend to think about something like Invoke(…) if you only need to run it once without method parameters.