Botones se accionan solos

Que tal gente, hace no mucho hice con ayuda de la comunidad un llamador que se acciona con botones, el problema es que al conectarlo para su uso, los botones se accionan solos, para mi los problemas pueden ser dos.
La distancia entre el aparato y el botón, al trabajar con poca corriente arduino lo identifica como tierra o que el problema sea que estoy utilizando cable de red utp que es sabido que es sensible a las interferencias magnéticas.
¿a alguien le sucedió o tiene idea como solucionarlo?, pensé en que en ve de que la señal del timbre sea enviada por un contacto entre el cable del pin y la tierra, se mantengan todo el tiempo en contacto y la señal sea enviada cuando dejan de hacer contacto, pero si el problema llegara a ser el cable no serviría de nada y aparte los botones de timbre no utilizan esa configuración y tendría que hacerle algún arreglo al que esta colocado.
desde ya muchas gracias, dejo el código abajo

/*

*/
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,16,2);
const int boton1 = 22;
const int boton2 = 23;
const int boton3 = 24;
const int boton4 = 25;
const int boton5 = 26;
const int boton6 = 27;
const int boton7 = 33;
const int zumbador = 32;
int hab[6]; // creo un array para las posiciones del lcd
int puntero=0; // apunta a la posición en el lcd
int i=0;
const int led[]={42,43,44,45,46,47};
int estado[6]={0,0,0,0,0,0};


void setup() {
    Serial.begin(9600);
  pinMode(boton1, INPUT_PULLUP);
  pinMode(boton2, INPUT_PULLUP);
  pinMode(boton3, INPUT_PULLUP);
  pinMode(boton4, INPUT_PULLUP);
  pinMode(boton5, INPUT_PULLUP);
  pinMode(boton6, INPUT_PULLUP);
  pinMode(boton7, INPUT_PULLUP);
  pinMode(42, OUTPUT);
  pinMode(43, OUTPUT);
  pinMode(44, OUTPUT);
  pinMode(45, OUTPUT);
  pinMode(46, OUTPUT);
  pinMode(47, OUTPUT);
  pinMode(32,OUTPUT);
  lcd.init();
  lcd.backlight();
  lcd.begin(16,2);
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Numero de Box");
}

void loop() {
     if ( digitalRead ( boton1)==0 && estado[0]==0)
{   
    digitalWrite( 42,HIGH); // enciendo led correpondiente
    btnBounce(boton1);
    estado[0]=1;
    tone(zumbador, 261, 100);
    delay(150);
    tone(zumbador, 293, 100);
    delay(150);
    lcd.setCursor(puntero*3+0,1);// el primer dato en posición 2, segundo en 7, 3º en 12 y 4º en 17,  cambialo a tu gusto
    lcd.print("1"); // entiéndase x al numero de habitación en cada if
    hab[puntero]=1;// cargo en numero de habitación en la posición del lcd
    puntero++; // salto a la próxima posicion del display
}
    if ( digitalRead ( boton2)==0 && estado[1]==0)
{
    digitalWrite( 43,HIGH);
    btnBounce(boton2);
    estado[1]=1;
    tone(zumbador, 261, 100);
    delay(150);
    tone(zumbador, 293, 100);
    delay(150);
    lcd.setCursor((puntero*3+0),1);
    lcd.print("2");
    hab[puntero]=2;
    puntero++;
}
    if ( digitalRead ( boton3)==0 && estado[2]==0)
{
    digitalWrite(44,HIGH);
    btnBounce(boton3);
    estado[2]=1;
    tone(zumbador, 261, 100);
    delay(150);
    tone(zumbador, 293, 100);
    delay(150);
    lcd.setCursor((puntero*3+0),1);
    lcd.print("3");
    hab[puntero]=3;
    puntero++;
}
    if ( digitalRead ( boton4)==0 && estado[3]==0)
{
    digitalWrite( 45,HIGH);
    btnBounce(boton4);
    estado[3]=1;
    tone(zumbador, 261, 100);
    delay(150);
    tone(zumbador, 293, 100);
    delay(150);
    lcd.setCursor((puntero*3+0),1);
    lcd.print("4");
    hab[puntero]=4;
    puntero++;
}
   if ( digitalRead ( boton5)==0 && estado[4]==0)
{
    digitalWrite( 46,HIGH);
    btnBounce(boton5);
    estado[4]=1;
    tone(zumbador, 261, 100);
    delay(150);
    tone(zumbador, 293, 100);
    delay(150);
    lcd.setCursor((puntero*3+0),1);
    lcd.print("5");
    hab[puntero]=5;
    puntero++;
}
   if ( digitalRead ( boton6)==0 && estado[5]==0)
{
    digitalWrite( 47,HIGH);
    btnBounce(boton6);
    estado[5]=1;
    tone(zumbador, 261, 100);
    delay(150);
    tone(zumbador, 293, 100);
    delay(150);
    lcd.setCursor((puntero*3+0),1);
    lcd.print("6");
    hab[puntero]=6;
    puntero++;
}
if( digitalRead (boton7)==0)// cuando apretas el boton de clear
{
    digitalWrite(led[hab[0]-1],LOW);// apago led posición 1
    btnBounce(boton7);
    estado[hab[0]-1]=0;
  for (i=0; i<puntero ; i++)
  { 
  hab[i]= hab[i+1]; // desplazo las habitaciones a la posición anterior en el display
  }
    lcd.setCursor(0,2);
    lcd.print("                                             ");
  for( i=0 ; i<puntero-1 ; i++)
  {
  lcd.setCursor((i*3+0),1);// imprime en el lcd los valores actualizados
  lcd.print(hab[i]);
  }
    puntero--;
  if(puntero<0)
  {
  puntero=0;
  estado[0]=0;
  }
}

}
void btnBounce(int btnPin)
{//espera hasta que no haya rebotes

  while (digitalRead(btnPin) == LOW);
  delay(250);
 
}

[code]