High impedance output pin

I have built a system based on a Mega2560 that uses external boards on to store and receive data. The software sets the boards address and a bit (I refer to as the ‘strobe’) is set to enable the transfer of data. This was working well until just recently. With all the external boards removed from the bus, if the output data cable was plugged in, the strobe line (pin 14) ceased to function. My logic probe showed it not high or low, but at high impedance. I’m looking for a small leakage current that might trigger this behavior, but so far have not found any.

I could move the address and strobe outputs to other unused pins (2 - 13) But I’d like to understand what’s going on here. Does anyone have an explanation for why a pin would go to a high impedance setting?

Here’s the significant code.

Significant definitions

unsigned int strobe = 14;  //address pin for strobe signal
void setup() 
{	Serial.begin (9600);                //open com to computer
	int i;

	pass_1 = 0;
	pass_2 = 0;

//Set up pins of output or input
	for (i = 14; i < 22; i++)			//address pins 15 - 12, strobe pin 14	
	{	pinMode (i, OUTPUT);            //pins open LOW
		digitalWrite (i, HIGH);         //set pins HIGH
	for (i = 22; i < 38; i++)
	{	pinMode (i, INPUT_PULLUP);
	for (i = 38; i < 54; i++)			//Outputs defined and set HIGH
	{	pinMode (i, OUTPUT);
		digitalWrite(i, HIGH);
//set all board outputs HIGH - output pins were set HIGH above  
	for (i = 1; i < 5; i++)
	{	outputBoard[i] = 65535;
		loadBoard(i, outputBoard[i]);


Significant subroutines

unsigned int readBoard(unsigned int board)
{	int boardBit;
	unsigned int boardData;
	setAddress(board);		                                //setLock an address for the input board
	digitalWrite (strobe, HIGH);	 //strobe on - opens all I/O lines and puts input data on the bus
	for (boardBit = 0; boardBit <16; boardBit++)	//for each data bit on the board
	{	if  (digitalRead(boardBit + 22) == HIGH)
		{bitWrite (boardData, boardBit, 1);
		{bitWrite (boardData, boardBit, 0);
	digitalWrite(strobe, LOW);
	return boardData;
void loadBoard (unsigned int board, unsigned int data)
//outputBoard[0] is NOT used so software indexes match physical board addresses
// board is the physical address for the board on the bus
// data is a 16 bit data set
{	int i;
	for (i = 0; i < 16; i++)
		if(bitRead(data, i))
		{	digitalWrite(53-i, HIGH);
		{	digitalWrite(53-i, LOW);
	setAddress (board);
	digitalWrite (strobe, HIGH);
	delay (1);
	digitalWrite (strobe, LOW);	
void setAddress (unsigned int address)
//Loads board address onto the address bus
{	unsigned int addressBit;
	for (addressBit = 0; addressBit < 7; addressBit++) //address has 7 bits
	{                                                  //bits are loaded on pins 15 - 21
		if (bitRead (address, addressBit))
		{	digitalWrite (addressBit + 15, LOW);
		{	digitalWrite (addressBit + 15, HIGH);