SENSOR ULTRASONICO CON PULSADORES y lcd

Hola, quisiera saber si podrian ayudarme a resulver un problema con el codigo que estoy haciendo para un sensor ultrasonico.
Lo esencial que debe realizar es que al presionar el pulsador 1 o sea =(p1) entre en un modo de configuracion donde se establece una distancia minima con (p2) se incrementa esa variable y con (p3) se decrementa. lo he trabajado con una variable bandera que me permite establecer eso para que luego ese bloque de codigo quede inactivo, pero no logro hacer que (p2)(p3) hagan su funcion correctamente. Ya luego que se establece la distancia minima. se lee el sensor para ver si la distancia actual es menor que la minima establecida para dar algun tipo de alerta, aqui les dejo el codigo y la funcion que realiza el trabajo de p2 y p3 debe ir en la funcion que esta vacia y se llama "medicion_distancia"
.

#include <LiquidCrystal.h> // incluimos la libreria
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
#define p1 8
#define p2 9
#define p3 10
int TRIG = 11;
int ECO = 12;
int LED = 13;
int DISTANCIA;
int DISTANCIA2;
int DURACION;
boolean bandera = false;

void setup() {
  pinMode(ECO, INPUT);
  pinMode(TRIG, OUTPUT);
  pinMode(LED, OUTPUT);
  pinMode(p1, INPUT);
  pinMode(p2, INPUT);
  pinMode(p3, INPUT);
  Serial.begin(9600);
  /*configuracion de las
    dimenciones de LCD*/
  lcd.begin(16, 2);
  delay(2000);
  lcd.cursor();
  /*pocicisobanos el cursor
    en la primera fila y la
    primera columna*/
  lcd.home();
  Serial.begin(9600);
}


int Medicion_distancia() {

}


int Medicion_distancia2() {
  digitalWrite(TRIG, HIGH);
  delay(1);
  digitalWrite(TRIG, LOW);
  DURACION = pulseIn(ECO, HIGH);
  DISTANCIA2 = DURACION / 58.2;
  return DISTANCIA2;
}


void loop() {
  if (digitalRead(p1) == HIGH) {
    if (digitalRead(p2) == LOW) {
      if (digitalRead(p3) == LOW) {
        if (bandera == false) {
          lcd.setCursor(0, 0);
          lcd.print("M.configuracion");
          delay(2000);
          Medicion_distancia();
          Serial.println("YA");

          lcd.setCursor(0, 0);
          lcd.print(DISTANCIA);
          bandera = true;
        }
      }
    }
  }
  DISTANCIA2 = Medicion_distancia2();
  if (DISTANCIA < DISTANCIA2) {
    digitalWrite(13, HIGH);

  } else {
    digitalWrite(13, LOW);
  }
}

Acá tienes una versión algo modificada.
Lo que hice son agregarte variables que te permiten ver los flancos y solo actuan una vez cuando presionas el botón. Asi que NO vuelvas a usar if(estado == ALGO) porque eso se vive repitiendo, en cambio si miras el flanco no pasa mas que una vez.

#include <LiquidCrystal.h> // incluimos la libreria
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);

#define CONFIG_PIN 8
#define SUBIR_PIN 9
#define BAJAR_PIN 10
#define MAXIMO   200 // solo permite 200 ctms.
int TRIG    = 11;
int ECO     = 12;
int LED     = 13;


int distancia;
int distancia2;
int duracion;
boolean configurar, configurarAnt = false;
boolean subir, subirAnt;
boolean bajar, bajarAnt;
boolean fconfig = false;

void setup() {
  pinMode(ECO, INPUT);
  pinMode(TRIG, OUTPUT);
  pinMode(LED, OUTPUT);
  pinMode(CONFIG_PIN, INPUT);
  pinMode(SUBIR_PIN, INPUT);
  pinMode(BAJAR_PIN, INPUT);
  Serial.begin(9600);
  /*configuracion de las
    dimenciones de LCD*/
  lcd.begin(16, 2);
  delay(2000);
  lcd.cursor();
  /*pocicisobanos el cursor
    en la primera fila y la
    primera columna*/
  lcd.home();
  Serial.begin(9600);
}

int Medicion_distancia2() {
  digitalWrite(TRIG, HIGH);
  delay(1);
  digitalWrite(TRIG, LOW);
  duracion = pulseIn(ECO, HIGH);
  distancia2 = duracion / 58.2;
  return distancia2;
}

void loop() {
  configurar = digitalRead(CONFIG_PIN);
  subir = digitalRead(SUBIR_PIN);
  bajar = digitalRead(BAJAR_PIN);
  
  if (configurar && !configurarAnt {
      fconfig = !fconfig;
  }
  configurarAnt = configurar;
  if (subir && !subirAnt) {
      if (fconfig) 
          if (distancia++ >= MAXIMO) distancia = MAXIMO;
  }
  subirAnt = subir;
  if (bajar && !bajarAnt) {
      if (fconfig) {
          if (distancia-- <= 0) distancia = 0;
          
      }
  }
  bajarAnt = bajar;
      
  distancia2 = Medicion_distancia2();
  if (distancia < distancia2) {
      digitalWrite(13, HIGH);
  } else {
      digitalWrite(13, LOW);
  }
}

Debería aproximarte a lo que estas buscando.