My trigger is called twice

Hey, I have a problem. In my game you have a player (Character controller with capsule collider) that picks up objects like logs to build stuff in a crafting table. The crafting table has got a trigger and with an onCollisionEnter that detects what kind of object is. Example: if it is a log it will increase the array log index and when the object leaves the trigger area, with an OnCollissionExit it decreases the array index of the log. Then the player interacts with the crafting table and it checks what materials are near the crafting and it crafts what is possible. The problem is that the onTriggerEnter and onTriggerExit behaves strangely, sometimes it launches twice so the counter does not work. I want it to launch only once:

void OnTriggerEnter(Collider other) {
        switch (other.tag)
        {
            case "PickUp":
                object[0]++;
                Debug.Log(object[0]);
                break;
        }
}

void OnTriggerExit(Collider other){
        switch (other.tag) {
    	case "PickUp":
		    object [0]--;
            Debug.Log(object[0]);
            break;
    }
}

A usual approach is to set a boolean value to check whether or not the collider has been activated, and flipping it once it has so it can not activate multiple times. (bool b = true, OnColliderEnter only executes code if b = true, then sets it to false in the code so it cannot run twice, OnColliderExit sets it back to true so the collider can be re-collided with)
For some reason, setting a boolean check for colliders can sometimes cause the boolean value to either flip, or to turn on/off the OnTriggerEnter/OnTriggerExit methods while remaining in the trigger area,
like opening a door and closing it repeatedly while in the trigger area, or flipping the boolean value so it closes when you approach and opens when you walk away.

using a simple variable iterator prevents the actual method from being called repeatedly, guaranteeing only one execution per collision.

//previous code in class
//using a door opening and closing as an example
[SerializeField] private GameObject device;
	private int i = 0;


	void OnTriggerEnter(Collider other){
		DoorScript door = device.GetComponent<DoorScript>();
		if (i == 0) {
			if (door != null) {
				door.Operate ();
				i++;
			}
		}

	}
	void OnTriggerExit(Collider other){
		DoorScript door = device.GetComponent<DoorScript>();
		if (i == 1) {
			if (door != null) {
				door.Operate ();
				i = 0;
			}
		}

	}
/* All DoorScript contains is a function Operate() and a boolean for if the door is open, and an if/else statement in Operate() for moving door to open if bool is false (set to closed) and moving door to closed if bool is true (set to open)

Use a Boolean variable to make a sure the function is called only once.
bool enter=false;
void OnTriggerEnter(Collider other)

   {
      if(!enter)
      {
       enter=true;

         switch (other.tag){
              case "PickUp":
                 object[0]++;
                 Debug.Log(object[0]);
                  break;
              }
        }
 }

void OnTriggerExit(Collider other)

    {
      if(enter)
      {
       enter=false;
     switch (other.tag) {
     case "PickUp":
         object [0]--;
         Debug.Log(object[0]);
         break;
      }
   }
  }