How Do I Lerp Quaternions

I’m attempting to use Quaternion.Lerp to rotate a reset button smoothly when pressed. I have produced code that successfully rotates the object the first time I interact with it, but after that the object seems to randomly rotate backwards, and sometimes not rotate at all. How can I improve my code so that it consistently always rotates in the proper direction? Here is what I have right now.
using UnityEngine;
using System.Collections;

public class TestRotate : MonoBehaviour {

	float smooth = 10.0f;
	public Quaternion newRotation;
	public Quaternion oldRotation;
	public Vector3 newRotationAngles;
	public GameObject resetButton;

	// Use this for initialization
	void Start ()
	{
		oldRotation = resetButton.transform.rotation;
		newRotationAngles = oldRotation.eulerAngles;
		newRotation = Quaternion.Euler (newRotationAngles);
	}
	
	// Update is called once per frame
	void Update ()
	{
		if(Input.GetMouseButtonDown (0))
		{
			Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
			RaycastHit hit;
			if(Physics.Raycast (ray, out hit))
			{
				if(hit.transform.name == "Restart Button")
				{
					oldRotation = resetButton.transform.rotation;
					newRotationAngles = oldRotation.eulerAngles;
					newRotationAngles =  new Vector3(0, 0, newRotationAngles.z + 180);
					newRotation = Quaternion.Euler (newRotationAngles);
				}
			}
		}
		resetButton.transform.rotation = Quaternion.Lerp (resetButton.transform.rotation, newRotation, Time.deltaTime * smooth);
	}
}

If you’re only rotating about one axis, there’s no need to use quaternions. Quaternions are useful when you want to use 3d rotations about multiple axes since they avoid gimbal lock and interpolate nicely, but if you’re only rotating about one axis, using Euler angles is much simpler.

Instead, you can do something like this

// Inside Update()
float rotation = (Time.time * rotationSpeed) % 360;
resetButton.transform.EulerAngles = new Vector3(0, 0, rotation);

Related to your question, Lerp(a,b,t) is a shorthand for writing (1-t)*a + t*b for most things (floats, colors, vectors, etc.). With quaternions, it’s a bit more complicated; see the Wikipedia page for more details. (It’s still just a math formula though.)

With this in mind, if you’re using Lerp for animations, you should keep a counter somewhere, and use that counter for t. It doesn’t really make sense to use Time.deltaTime for t. (I remember the Unity documentation had examples using Time.deltaTime with Lerp a few months ago, but I think those examples have been removed now.)