ayuda temporizador ssd1306

Hola, e echo un temporizador para un reactivador de cola, el original se rompio, su funcion era si alguno de los 2 finales de carrera estan cerrados activa la lampara durante los segundos programados el modelo es glr2u

Lo e vaciado y e metido dentro un arduino nano con una pbc de un cargador de tfl movil y el oled

el codigo que echo funciona pero como no se programar seguro que e cometido errores y esta poco depurado

codigo:

//programa temporizador reactivador

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define OLED_MOSI  9
#define OLED_CLK   10
#define OLED_DC    11
#define OLED_CS    12
#define OLED_RESET 13
bool estado=false;
int value;
int pot;
int boton;
int xs=120;
int xc=32;
int de;
int se;

//Logo palmera
const unsigned char PROGMEM logo [] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFE,
0x00, 0x00, 0x00, 0x00, 0xE0, 0x01, 0xC0, 0x00, 0x00, 0x03, 0x00, 0x00, 0x30, 0x00, 0x00, 0x0C,
0x00, 0x00, 0x0C, 0x00, 0x00, 0x10, 0x00, 0x00, 0x02, 0x00, 0x00, 0x20, 0x00, 0x00, 0x01, 0x00,
0x00, 0x40, 0x00, 0x0E, 0x00, 0x80, 0x00, 0x80, 0x00, 0x38, 0x00, 0x40, 0x01, 0x00, 0x00, 0x70,
0x00, 0x20, 0x02, 0x00, 0x00, 0xE0, 0x00, 0x10, 0x04, 0x00, 0x00, 0xC0, 0xF8, 0x08, 0x04, 0x0F,
0xE1, 0xC7, 0xF0, 0x08, 0x08, 0x00, 0xF1, 0x8F, 0x00, 0x04, 0x08, 0x00, 0x38, 0x9C, 0x00, 0x04,
0x10, 0x00, 0x0C, 0x30, 0x00, 0x02, 0x10, 0x00, 0x07, 0x01, 0x80, 0x02, 0x10, 0x0F, 0xE3, 0xCF,
0xF0, 0x02, 0x20, 0x3F, 0xFB, 0xF0, 0x78, 0x01, 0x20, 0x70, 0x06, 0x70, 0x0C, 0x01, 0x20, 0x80,
0x0C, 0x0C, 0x02, 0x01, 0x20, 0x00, 0x70, 0x82, 0x00, 0x01, 0x20, 0x00, 0xC0, 0xC1, 0x00, 0x01,
0x20, 0x01, 0x80, 0xC0, 0x80, 0x01, 0x20, 0x03, 0x00, 0xC0, 0x00, 0x01, 0x20, 0x02, 0x00, 0xC0,
0x00, 0x01, 0x20, 0x02, 0x00, 0x00, 0x00, 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x00,
0x00, 0x60, 0x00, 0x01, 0x20, 0x00, 0x00, 0x60, 0x00, 0x01, 0x10, 0x00, 0x00, 0x60, 0x00, 0x02,
0x10, 0x00, 0x00, 0x60, 0x00, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x00,
0x00, 0x04, 0x08, 0x00, 0x00, 0x30, 0x00, 0x04, 0x04, 0x00, 0x00, 0x70, 0x00, 0x08, 0x04, 0x00,
0x00, 0x70, 0x00, 0x08, 0x02, 0x00, 0x00, 0x70, 0x00, 0x10, 0x01, 0x00, 0x00, 0x70, 0x00, 0x20,
0x00, 0x80, 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x80, 0x00, 0x20, 0x00, 0x70,
0x01, 0x00, 0x00, 0x10, 0x00, 0x70, 0x06, 0x00, 0x00, 0x0C, 0x00, 0xF0, 0x0C, 0x00, 0x00, 0x03,
0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0xE0, 0x01, 0xC0, 0x00, 0x00, 0x00, 0x1F, 0xFE, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0x00, 0x03,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 
};

Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);

void setup()   
{              
 display.begin(SSD1306_SWITCHCAPVCC);
 display.clearDisplay();
 creditos();
 pinMode(7, INPUT);
 pinMode(8, OUTPUT);
}

void loop()
{
  boton= digitalRead(7);
  value = analogRead(A0);
  pot = map(value, 0, 1024, 0, 31);
   
   if(boton==LOW){
    digitalWrite(8,LOW);
    inicio();
    se = 0;
    de = 0;
    estado = true;
   }
   
   if(pot<se){ 
     inicio();
     se = 0;
     de = 0;
     estado = false;
   }
  if ((boton==HIGH)&(estado==false)){
    digitalWrite(8,LOW);
    inicio();
    
  }
   if ((boton==HIGH)&(estado==true)){
    digitalWrite(8,HIGH);
    cuenta();
  }

  
}
//crea una ventana para los segundos programados
void cuenta(){
  
  //delay(70);
  de++;
  display.clearDisplay();
  display.setTextColor(BLACK, WHITE); 
  display.setTextSize(1);
  display.setCursor(0,0);
  display.println("*********************");
  display.setCursor(0,8);
  display.println("*                   *");
  display.setCursor(0,16);
  display.println("*                   *");
  display.setCursor(0,24);
  display.println("*                   *");
  display.setCursor(0,32);
  display.println("*                   *");
  display.setCursor(0,40);
  display.println("*                   *");
  display.setCursor(0,48);
  display.println("*                   *");
  display.setCursor(0,56);
  display.println("*********************");
  display.setTextSize(5);
  display.setCursor(xc,15);
  display.println(se);
  display.setTextSize(3);
  display.setCursor(90,28);
  display.println("S");
  display.display();

  if(de == 10){ 
     de = 0;
     se++;
  }
  if(se<10){ 
     xc = 55;
  }
  if(se>9){ 
     xc = 32;   
}
}
void inicio(){
  
 //estructura principal 
  display.clearDisplay();
  display.drawBitmap(38, 0,  logo, 48, 48, 1);
  display.setCursor(0,25);
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.println("Tiempo");
  display.setCursor(xs,25);
  display.println("S");
  display.setCursor(0,30);
  display.setTextSize(1);
  display.println("_______");
  display.setCursor(86,30);
  display.println("_______");
  display.setCursor(12,55);
  display.println("Jennifer Pallares");
  display.setCursor(95,18);
  display.setTextSize(2);
  display.println(pot);
  display.display();
  
  if (pot<10){
    xs=110;  
  }
  if (pot>10){
    xs=120;  
  }
}
//ventana con nombre
void creditos() {
  
  display.clearDisplay();
  display.setTextColor(BLACK, WHITE); 
  display.setTextSize(1);
  display.setCursor(0,0);
  display.println("*********************");
  display.setCursor(0,8);
  display.println("*                   *");
  display.setCursor(0,16);
  display.println("*                   *");
  display.setCursor(0,24);
  display.println("* Jennifer Pallares *");
  display.setCursor(0,32);
  display.println("*                   *");
  display.setCursor(0,40);
  display.println("*                   *");
  display.setCursor(0,48);
  display.println("*               v1.0*");
  display.setCursor(0,56);
  display.println("*********************");
  display.display();
  delay(2000);
}

otra cosa como podria hacer para que salga esta funcion cuando esta inactivo x segundos, y como salir de ella

void testdrawbitmap(const uint8_t *bitmap, uint8_t w, uint8_t h) {
  uint8_t icons[NUMFLAKES][3];
 
  // initialize
  for (uint8_t f=0; f< NUMFLAKES; f++) {
    icons[f][XPOS] = random(display.width());
    icons[f][YPOS] = 0;
    icons[f][DELTAY] = random(5) + 1;
    
    Serial.print("x: ");
    Serial.print(icons[f][XPOS], DEC);
    Serial.print(" y: ");
    Serial.print(icons[f][YPOS], DEC);
    Serial.print(" dy: ");
    Serial.println(icons[f][DELTAY], DEC);
  }

  while (1) {
    // draw each icon
    for (uint8_t f=0; f< NUMFLAKES; f++) {
      display.drawBitmap(icons[f][XPOS], icons[f][YPOS], logo16_glcd_bmp, w, h, WHITE);
    }
    display.display();
    delay(200);
    
    // then erase it + move it
    for (uint8_t f=0; f< NUMFLAKES; f++) {
      display.drawBitmap(icons[f][XPOS], icons[f][YPOS],  logo16_glcd_bmp, w, h, BLACK);
      // move it
      icons[f][YPOS] += icons[f][DELTAY];
      // if its gone, reinit
      if (icons[f][YPOS] > display.height()) {
 icons[f][XPOS] = random(display.width());
 icons[f][YPOS] = 0;
 icons[f][DELTAY] = random(5) + 1;
      }
    }
   }
}

gracias de ante mano y disculpar si no me explicado bien