Can't set timer

I built a code watching Burgzerger Arcade but the problem is I just can’t set the spawn time in 2 seconds. Can you check the code please.

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class MobGenerator : MonoBehaviour 
{
    public enum State
    {
        Idle,
        Initialize,
        Setup,
        SpawnMob
    }

    public GameObject[] mobPrefabs;
    public GameObject[] spawnPoints;

    public State state;

    private bool check = true;

    void Awake()
    {
        state = MobGenerator.State.Initialize;
    }

	IEnumerator Start () 
    {
        while (true)
        {
            switch(state)
            {
                case State.Initialize:
                    Initialize();
                    break;
                case State.Setup:
                    Setup();
                    break;
                case State.SpawnMob:
                    SpawnMob();
                    break;
                case State.Idle:
                    Idle();
                    break;
            }

            yield return 0;
        }
	}

    private void Initialize()
    {
        if (!CheckMobPrefabs())
            return;

        if (!CheckSpawnPoints())
            return;

        state = MobGenerator.State.Setup;
    }

    private void Setup()
    {
        state = MobGenerator.State.SpawnMob;
    }

    private void SpawnMob()
    {
        GameObject[] gos = AvailableSpawnPoints();

        for (int cnt = 0; cnt < gos.Length; cnt++)
        {
            GameObject go = Instantiate(mobPrefabs[Random.Range(0, mobPrefabs.Length)],
                                        gos[cnt].transform.position,
                                        Quaternion.identity
                                        ) as GameObject;

            go.transform.parent = gos[cnt].transform;
        }
        state = MobGenerator.State.Idle;
    }

    private void Idle()
    {
        Debug.Log("hi" + Time.time);
        if(check)
            StartCoroutine("Wait");
        Debug.Log("what" + Time.time);
    }

    private bool CheckMobPrefabs()
    {
        if (mobPrefabs.Length > 0)
            return true;
        else
            return false;
    }

    private bool CheckSpawnPoints()
    {
        if (spawnPoints.Length > 0)
            return true;
        else
            return false;
    }

    private GameObject[] AvailableSpawnPoints()
    { 
        List<GameObject> gos = new List<GameObject>();

        for (int cnt = 0; cnt < spawnPoints.Length; cnt++)
        {
            if (spawnPoints[cnt].transform.childCount == 0)
            {
                Debug.Log("*** Spawn Points Available ***");
                gos.Add(spawnPoints[cnt]);
            }
        }
        return gos.ToArray();
    }

    IEnumerator Wait()
    {
        Debug.Log("hop");
        check = false;
        yield return new WaitForSeconds(2);
        check = true;
        state = MobGenerator.State.SpawnMob;        
        Debug.Log("ono");
    }

}

I’m not sure if that’s what you’re looking for, but let’s try this:

IEnumerator Wait()
{
    Debug.Log("hop");
    check = false;
    yield return new WaitForSeconds(spawnDelay); //Using "spawnDelay" instead of "2"
    check = true;
    state = MobGenerator.State.SpawnMob;        
    Debug.Log("ono");
}

And then modify the top of your file:

public GameObject[] mobPrefabs;
public GameObject[] spawnPoints;

public State state;
public float spawnDelay = 2f; //Add this line