Make block raise and lower based on timer

I’m trying to make a block that crashes down based on a timer, then raises back up once it’s hit the ground, kinda like a Whomp from Super Mario. My death collision is working fine, but my block’s movement not so much…

public class crusher : MonoBehaviour {
	//public GameObject destroyer;
	public float gravity = 100F;
	public float count = 2F;
	public float down;
	
	// Use this for initialization
	void Start () {
		//startpos = destroyer.localposition;
	}

	void Crush () {
		transform.Translate (Vector3.down * gravity * Time.deltaTime);
		down = 1;
	}
	
	void Raise () {
		transform.Translate (-Vector3.down *gravity * Time.deltaTime);
		down = 0;
	}
	
	// Update is called once per frame
	void Update () {
		Debug.Log (count);
		count -= Time.deltaTime;
		if (count <= 0) {
			if (down == 0) {
				Crush ();
			}
			else {
				Raise ();
				count = 2F;
			}
		}
	}
}

My block hangs in the air while the timer runs, but doesn’t drop when the timer reaches 0. My timer immediately starts back 2 and keeps counting down. What I would like it to do is hang in the air for the two seconds, drop and then raise back up again and then start the timer again. Is there an integral step that I’m missing?

void Crush ()
{
transform.Translate (Vector3.down * gravity * Time.deltaTime);
down = 1;
}

You perform your movement inside a non-update function. The contents are repeated every call but not every frame.

Your Translate is a function of Time.deltaTime which is very small, so makes your movement very small too.

Perform your movement in Update, perhaps using

if(crush == true)
Translate

but you definitely need to re-structure parts of your script. You will find the same for raise().