How to make object instantiate once but still call next function.

hi all,
I am having a mind melter trying to set up a early crafting mechanism, I want to press a button and have an object appear for the player to use a raycast to to place on the ground. this is all fine and works and when the player clicks the mouse it places a new object on the ground, however when i turn on the crafting system with (c key for now) the template object spawns over and over.

Code
public bool craftingOn = false;
public Transform spawner;
public Transform myObjects;
public Transform myRealObjects;
public float rayDistance = 100f;

public string tagCheck = "Ground";
public bool checkAllTags = false;

//need to link this to inventory so that items only go into arrays that are in the inventory.
void Update () 
{
		craftOnOff(myObjects[0],myRealObjects[0]);
}

void CraftItem(Transform unCrafted, Transform crafted)// this works pefect just need to adapt items that put into function
{
	bool foundHit = false;
	RaycastHit hit = new RaycastHit();

	foundHit = Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition),out hit,rayDistance);

	if(foundHit && !checkAllTags && hit.transform.tag != tagCheck)
		foundHit = false;
	if(foundHit)
	{
		unCrafted.position = hit.point;//use a loop here just test
		if(Input.GetButtonDown("Fire1"))
		{
			Transform clone;
			clone = Instantiate(crafted,hit.point,Quaternion.identity)as Transform;
		}
	}
}

void craftOnOff(Transform item, Transform realItem)//for now c turns on off crafting  ray for player.
{
	if(Input.GetKeyDown(KeyCode.C))//need set this to turn on from a UI Button not key
	{
		craftingOn = !craftingOn;// turning on and off the crafting needs to be set up in controls properly
	}
	if(craftingOn)
	{	
		Transform cloneItem;
		cloneItem = Instantiate(item,spawner.transform.position,spawner.transform.rotation)as Transform;
		CraftItem(cloneItem,realItem);
	}
	if(!craftingOn)
	{
		//get rid of object if one is instantiated and player changes mind.
		// and add resources back to inventory
	}

}

After turning on the craftingOn = true with the GetKeyDown (KeyCode.C) , you haven’t turn it off with the GetKeyUp(KeyCode.C), so it’s on forever, and the function got called every Update() (like 60 times per second).
That’s why.

A better way to organize this code is to to put the Input.GetKeyDown check into the Update() function
Like this:

 void Update () 
 {
     if(Input.GetKeyDown(KeyCode.C)) {
         CraftMyStuff(something1,something2);
     }

 }