How to make 2D character stop moving in a direction after collision?

I am trying to make an RPG style game (much like Pokemon) for a school competition. I am currently trying to get the movement down to work perfectly but i am facing a problem with box colliders. My character and sprite which i am using to test the box collision will rotate when contact is made. I have tried freezing position both on the x and y and freeze position on z (not that it will do much). I am trying to get the character to stop moving when it collides with a box collider. I do not know how to fix this i have tried several things any help would be great.
Here is the code i am using for my characters movement. It is not my original code.
using UnityEngine;
using System.Collections;

public class PlayerMovement : MonoBehaviour {

	Direction currentDir;
	Vector2 input;
	bool isMoving = false;
	Vector3 startPos;
	Vector3 endPos;
	float t;

	public Sprite northSprite;
	public Sprite eastSprite;
	public Sprite southSprite;
	public Sprite westSprite;

	public float walkSpeed = 3f;

	public bool isAllowedToMove = true;

	void Start()
	{
		isAllowedToMove = true;
	}

	void Update () { 
		if (
		if(!isMoving && isAllowedToMove)
		{
			input = new Vector2(Input.GetAxis("Horizontal"), Input.GetAxis("Vertical"));
			if (Mathf.Abs(input.x) > Mathf.Abs(input.y))
				input.y = 0;
			else
				input.x = 0;

			if(input != Vector2.zero)
			{

				if(input.x < 0)
				{
					currentDir = Direction.West;
				}
				if(input.x > 0)
				{
					currentDir = Direction.East;
				}
				if(input.y < 0)
				{
					currentDir = Direction.South;
				}
				if (input.y > 0)
				{
					currentDir = Direction.North;
				}

				switch(currentDir)
				{
				case Direction.North:
					gameObject.GetComponent<SpriteRenderer>().sprite = northSprite;
					break;
				case Direction.East:
					gameObject.GetComponent<SpriteRenderer>().sprite = eastSprite;
					break;
				case Direction.South:
					gameObject.GetComponent<SpriteRenderer>().sprite = southSprite;
					break;
				case Direction.West:
					gameObject.GetComponent<SpriteRenderer>().sprite = westSprite;
					break;
				}

				StartCoroutine(Move(transform));
			}

		}

	}

	public IEnumerator Move(Transform entity)
	{
		isMoving = true;
		startPos = entity.position;
		t = 0;

		endPos = new Vector3(startPos.x + System.Math.Sign(input.x), startPos.y + System.Math.Sign(input.y), startPos.z);

		while (t < 1f)
		{
			t += Time.deltaTime * walkSpeed;
			entity.position = Vector3.Lerp(startPos, endPos, t);
			yield return null;
		}

		isMoving = false;
		yield return 0;
	}
}

enum Direction
{
	North,
	East,
	South,
	West
}

In order to not have it spin you need to make the boxcollider2d a trigger by checking the isTrigger on the box collider. Then in the script:

void OnTriggerEnter2D(Collider2D hit){
      if(hit.gameObject.tag == " Your hit object tag here "){
           //stop player movement here.
      }
}

Using constraints for rigidbody doesn’t work because you are moving object without physics. If you want to stop it on colllision u can try something like

 void OnCollisionEnter2D(Collision2D hit){
       if(hit.gameObject.tag == " any tag "){
            isMoving = false;
       }
 } 

Or if you want to use physics for moving then use Rigidbody.MovePosition(endPos) and on collision set constraints or set velocity to zero.