pinball flipper bug

hey. i want to create a simple pinball flipper arm which rotates 45° forward when i hold down space and snaps back zu 0° when i release space. i thought it would work like that:

using UnityEngine;
using System.Collections;

public class RotateDegrees : MonoBehaviour {
	[SerializeField] protected Vector3 m_from = new Vector3(0.0F, 45.0F, 0.0F);
	[SerializeField] protected Vector3 m_to = new Vector3(0.0F, -45.0F, 0.0F);
	[SerializeField] protected Vector3 m_neutral = new Vector3(0.0F, 0.0F, 0.0F);
	[SerializeField] protected float m_frequency = 5.0F;

	void Update() {
		if (Input.GetKeyDown("space")){
			Quaternion from = Quaternion.Euler(this.m_neutral);
			Quaternion to = Quaternion.Euler(this.m_to);

			float lerp = 0.5F * (1.0F + Mathf.Sin(Mathf.PI * Time.realtimeSinceStartup * this.m_frequency));
			this.transform.localRotation = Quaternion.Lerp(from, to, lerp);
		}
		else if (Input.GetKeyUp("space")){
			Quaternion fromsn = Quaternion.Euler(this.m_to);
			Quaternion tosn = Quaternion.Euler(this.m_neutral);

			float lerp = 0.5F * (1.0F + Mathf.Sin(Mathf.PI * Time.realtimeSinceStartup * this.m_frequency));
			this.transform.localRotation = Quaternion.Lerp(fromsn, tosn, lerp);
			//Quaternion from = Quaternion.Euler(this.transform.rotation.eulerAngles);
		}

		}

}

but that turns out to look like this:
https://gfycat.com/ExcellentSourGiraffe

the gif got capured with 30FPS. but its so not working

You’re calculating your lerp value incorrectly. Lerp should be between 0 and 1, where 0 will set the local rotation to the “from” value and 1 will set it to the “to” value.

Try saving the time at which the space key has held down, and work out the lerp value using that (and the length of time you want your anim to take).