Codigo de controle

Pessoal boa noite, sou novo aqui e preciso de uma ajuda:

Preciso montar um pequeno sistema de controle de um unico LED com 3 botões:

BOTAO 01 - A qualquer tempo, quando pressionado, reseta tudo e inicia um looping da seguinte sequencia no LED: "2 pulsos x 3 a cada duas horas"
repete 3X (acende por 5s, apaga por 2s, acende por 5s, apaga por 4s)
aguarda 2 horas e repete isso...

BOTAO 02 - A qualquer tempo, quando pressionado, reseta tudo e inicia um looping da seguinte sequencia no LED:
repete 3X (acende por 5s, apaga por 2s, acende por 5s, apaga por 2s, acende por 5s e apaga por 4s)
aguarda 2 horas e repete isso...

BOTAO 03 - A qualquer tempo, quando pressionado, reseta tudo, acende o LED por 20s e para.

já tentei escrever o script inúmeras vezes e não estou conseguindo.

Faça assim.
Mostre seu melhor esforço e nós tentaremos ajuda-lo,
Publique seu codigo, mesmo que não funcione e veremos o que podemos fazer.
Mas não esqueça de usar as tags ao publicar seu codigo.

Claro, toda e qualquer ajuda é muito bem vinda!!!

const int button1Pin = 2; // Pino do Botão 1
const int button2Pin = 3; // Pino do Botão 2
const int button3Pin = 4; // Pino do Botão 3
const int ledPin = 13; // Pino do LED

bool isButton1Pressed = false;
bool isButton2Pressed = false;
bool isButton3Pressed = false;

void setup() {
pinMode(button1Pin, INPUT_PULLUP); // Configura o botão como entrada com pull-up
pinMode(button2Pin, INPUT_PULLUP);
pinMode(button3Pin, INPUT_PULLUP);
pinMode(ledPin, OUTPUT); // Configura o LED como saída
}

void loop() {
if (digitalRead(button1Pin) == LOW) {
isButton1Pressed = true;
delay(200); // Debounce
}

if (digitalRead(button2Pin) == LOW) {
    isButton2Pressed = true;
    delay(200); // Debounce
}

if (digitalRead(button3Pin) == LOW) {
    isButton3Pressed = true;
    delay(200); // Debounce
}

if (isButton1Pressed) {
    sequence1();
    isButton1Pressed = false; // Reseta o estado do botão
}

if (isButton2Pressed) {
    sequence2();
    isButton2Pressed = false; // Reseta o estado do botão
}

if (isButton3Pressed) {
    digitalWrite(ledPin, HIGH);
    delay(20000); // Liga o LED por 20 segundos
    digitalWrite(ledPin, LOW);
    isButton3Pressed = false; // Reseta o estado do botão
}

}

void sequence1() {
for (int i = 0; i < 3; i++) {
digitalWrite(ledPin, HIGH);
delay(5000); // Liga o LED por 5 segundos
digitalWrite(ledPin, LOW);
delay(2000); // Pausa por 2 segundos

    digitalWrite(ledPin, HIGH);
    delay(5000); // Liga o LED novamente por 5 segundos
    digitalWrite(ledPin, LOW);
    
    if (i < 2) {
        delay(4000); // Pausa por 4 segundos entre as repetições (não após a última)
    }
}

}

void sequence2() {
for (int i = 0; i < 3; i++) {
digitalWrite(ledPin, HIGH);
delay(5000); // Liga o LED por 5 segundos
digitalWrite(ledPin, LOW);
delay(2000); // Pausa por 2 segundos

    digitalWrite(ledPin, HIGH);
    delay(5000); // Liga o LED novamente por 5 segundos
    digitalWrite(ledPin, LOW);
    
    if (i < 2) {
        delay(2000); // Pausa por 2 segundos antes da última repetição
        digitalWrite(ledPin, HIGH);
        delay(5000); // Liga mais uma vez por 5 segundos antes da pausa final
        digitalWrite(ledPin, LOW);
        delay(4000); // Pausa final de 4 segundos entre as repetições (não após a última)
    }
}

}

Após enviar pra UNO, o led já acende…

Era pra acender somente após pulsar algum dos 3 botões…

O problema do seu codigo é o uso de delays.
Delays travam o processamento do arduino.

Enquanto estiver no delay, não adianta apertar nenhum botão que não haverá nenhum efeito pois o processamento está travado.

A solução seria usar millis(), mas seu codigo vai ficar bem mais complicado.

Amanhã vou " tentar " melhorar seu codigo.

Obs. Por favor refaça seu topico colocando o codigo entre as devidas tags.
Se não souber como fazer, leia o topico recomendado quando voce se inscrveu no forum.

Olá! Bem vindo ao Forum.

Vamos aguardar uma possível versão aprimorada do seu código vinda do @ruilviana porque realmente enquanto os delays estiverem em ação, o programa não lerá nenhum outro botão. Mas, eu carreguei seu código no Wokwi e ele funcionou corretamente.

Então, eu estou desconfiado que um ou mais dos seus botões está montado errado, mandando o sinal LOW o tempo inteiro. Você está usando os pinos das diagonais para conectar os botões?

Humm

ótima dica!!

Testei aqui (alterei o +B pelo -B nos botões) e já rodou...

Já está QUASE...só tenho 2 problemas a ressolver ainda:

1º - os 3 botões ainda precisam que as sequencias finalizem para que possam funcionar e isso é um problema...eles têm que funcionar "A QUALQUER TEMPO"

2º - As sequencias não estão em looping de 2 horas (7200000ms). Ao que percebí, qualquer botão está funcionando após acabar a sequencia de 3X, entao nesse momento, não está contando mais o tempo de looping...

Para resolver o problema (1) você realmente vai ter que trocar toda a lógica do seu programa que usa delay() por millis(), como sugerido no post#4.

O problema (2) não está tratado no seu código e não ficou muito claro para mim. Os padrões de pisca do LED devem ser repetir sozinhos a cada 2 horas? Se sim, o que acontece quando um botão é apertado? Começa a contar as 2 horas de novo?

eu não sei usar o millis() vou estudar a respeito...estou pensando em agregar um botão de reset (parar qualquer programa que estiver rodando)

Sobre o problema 2, é isso...

essas sequencias precisam entrar sozinhos a cada duas horas...

tipo, se escolher apertar o botao 01, tem que ligar o led 2 vezes em uma sequencia de 3 x a cada duas horas...até que outro botão seja acionado...

botao 01 (pulsado On)
repete 3X isso:
Led On 5s
led Off 2s
led On 5s
led Off 4S

Aguarda duas horas (7200000ms) e repete 3x essa sequencia...Looping infinito, até que algum outro botão seja pulsado (pelo menos é issa solução que eu preciso entregar)

Este projeto é um trabalho de escola?

Certo. Então além do millis(), uma outra coisa que você vai precisar estudar são state machines com blocos case/switch.

Cada botão que você aperta coloca a sua "máquina" em um "estado". Esse estado será repetido indefinidamente pelo loop a cada 2h até que outro botão seja apertado.

Sim, do curso de eng eletrica UNISUL SC,

const int button1Pin = 7; // Pino do Botão 1
const int button2Pin = 3; // Pino do Botão 2
const int button3Pin = 4; // Pino do Botão 3
const int ledPin = 10;    // Pino do LED

bool ledState = LOW;
unsigned long previousMillis = 0;
unsigned long interval = 0;

enum State { IDLE, SEQUENCE1, SEQUENCE2, SEQUENCE3 };
State currentState = IDLE;

void setup() {
    pinMode(button1Pin, INPUT_PULLUP);
    pinMode(button2Pin, INPUT_PULLUP);
    pinMode(button3Pin, INPUT_PULLUP);
    pinMode(ledPin, OUTPUT);
}

void loop() {
    unsigned long currentMillis = millis();

    // Verifica se o botão 1 foi pressionado
    if (digitalRead(button1Pin) == LOW && currentState == IDLE) {
        currentState = SEQUENCE1;
        interval = 7200000; // 2 horas em milissegundos
        previousMillis = currentMillis;
    }

    // Verifica se o botão 2 foi pressionado
    if (digitalRead(button2Pin) == LOW && currentState == IDLE) {
        currentState = SEQUENCE2;
        interval = 7200000; // 2 horas em milissegundos
        previousMillis = currentMillis;
    }

    // Verifica se o botão 3 foi pressionado
    if (digitalRead(button3Pin) == LOW && currentState == IDLE) {
        ledState = HIGH;
        digitalWrite(ledPin, ledState);
        delay(20000); // Liga o LED por 20 segundos
        digitalWrite(ledPin, LOW);
        return; // Retorna para evitar mudar de estado
    }

    // Executa a sequência do Botão 1
    if (currentState == SEQUENCE1) {
        if (currentMillis - previousMillis >= interval) {
            previousMillis += interval;

            for (int i = 0; i < 3; i++) {
                digitalWrite(ledPin, HIGH);
                delay(5000); // Liga por 5 segundos
                digitalWrite(ledPin, LOW);
                delay(2000); // Pausa por 2 segundos

                digitalWrite(ledPin, HIGH);
                delay(5000); // Liga por mais 5 segundos
                digitalWrite(ledPin, LOW);
                delay(4000); // Pausa por 4 segundos
            }
            currentState = IDLE; // Retorna ao estado inicial após a sequência
        }
    }

    // Executa a sequência do Botão 2
    if (currentState == SEQUENCE2) {
        if (currentMillis - previousMillis >= interval) {
            previousMillis += interval;

            for (int i = 0; i < 3; i++) {
                digitalWrite(ledPin, HIGH);
                delay(5000); // Liga por 5 segundos
                digitalWrite(ledPin, LOW);
                delay(2000); // Pausa por 2 segundos

                digitalWrite(ledPin, HIGH);
                delay(5000); // Liga por mais 5 segundos
                digitalWrite(ledPin, LOW);
                delay(2000); // Pausa por mais 2 segundos

                digitalWrite(ledPin, HIGH);
                delay(5000); // Liga pela última vez por 5 segundos
                digitalWrite(ledPin, LOW);
                delay(4000); // Pausa por 4 segundos
            }
            currentState = IDLE; // Retorna ao estado inicial após a sequência
        }
    }
}

Escrevemos esse outro script aqui com millis(), onde só funcionou o botão 03...

Qual a diferença da regra para o botão 01 e do botão 02?

A diferença é que no botão 01 - o led acende duas vezes a cada sequência…

No botão 02 - o led acende 3 vezes a cada sequência.

Apesar de voce não ter atendido meu pedido para colocar seu codigo entre tags, vou postar o codigo que escrevi baseado na sua regra.

E se seu professor der nota 10 espero que voce me envie um bombom de chocolate.

Este codigo pode ser simplificado fazendo função das rotina de tempo e colocando parametros na chamada da função.

Este codigo está simulado em :
"3Botoes - Wokwi ESP32, STM32, Arduino Simulator

/*
  BOTAO 01 - A qualquer tempo, quando pressionado, reseta tudo
  e inicia um looping da seguinte sequencia no LED:
  "2 pulsos x 3 a cada duas horas"
  repete 3X (acende por 5s, apaga por 2s, acende por 5s, apaga por 4s)
  aguarda 2 horas e repete isso...

  BOTAO 02 - A qualquer tempo, quando pressionado, reseta
  tudo e inicia um looping da seguinte sequencia no LED:
  repete 3X (acende por 5s, apaga por 2s, acende por 5s,
  apaga por 2s, acende por 5s e apaga por 4s)
  aguarda 2 horas e repete isso...

  BOTAO 03 - A qualquer tempo, quando pressionado,
  reseta tudo, acende o LED por 20s e para.
*/
/*
  Ao apertar o botao 01, tem que ligar o led 2 vezes em
  uma sequencia de 3 x a cada duas horas...
  até que outro botão seja acionado...

  botao 01 (pulsado On)
  repete 3X isso:
  Led On 5s
  led Off 2s
  led On 5s
  led Off 4S

  Aguarda duas horas (7200000ms) e repete 3x essa sequencia...Looping infinito, até que algum outro botão seja pulsado (pelo menos é issa solução que eu preciso entregar)
*/
const int button1Pin = 2; // Pino do Botão 1
const int button2Pin = 3; // Pino do Botão 2
const int button3Pin = 4; // Pino do Botão 3
const int ledPin = 13; // Pino do LED

bool isButton1Pressed = false;
bool isButton2Pressed = false;
bool isButton3Pressed = false;

unsigned long contaTempo = 0;
unsigned long doisS = 2000U;
unsigned long quatroS = 4000U;
unsigned long cincoS = 5000U;
unsigned long trintaS = 30000U;
unsigned long duasH = 72000U;

byte flag1 = 0;
byte flag2 = 0;

int count1  = 0;
int count2  = 0;
//------------------------------------------------------------
void setup() {
  Serial.begin(115200);
  pinMode(button1Pin, INPUT_PULLUP); // Configura o botão como entrada com pull-up
  pinMode(button2Pin, INPUT_PULLUP);
  pinMode(button3Pin, INPUT_PULLUP);
  pinMode(ledPin, OUTPUT); // Configura o LED como saída
}
//------------------------------------------------------------
void loop() {
  if (digitalRead(button1Pin) == LOW) {
    delay(50);                                // Debounce
    if (digitalRead(button1Pin) == LOW) {
      contaTempo = millis();
      digitalWrite(ledPin, HIGH);
      flag1 = 1;
      flag2 = 0;
      count2 = 0;
      Serial.println("Entrando bot1");
    }
  }
  if (count1 >= 2)  {
    digitalWrite(ledPin, LOW);
    flag1 = 5;
    if (millis() - contaTempo > duasH) {  // reinicia depois de 2horas
      contaTempo = millis();
      digitalWrite(ledPin, HIGH);
      count1 = 0;
      flag1 = 1;
    }
  }

  if (flag1 == 1) {
    if (millis() - contaTempo > cincoS) {  // Fica acesso 5s e apaga
      contaTempo = millis();
      digitalWrite(ledPin, LOW);
      flag1 = 2;
    }
  }
  if (flag1 == 2) {
    if (millis() - contaTempo > doisS) {  // Fica apagado 2s e acende
      digitalWrite(ledPin, HIGH);
      contaTempo = millis();
      flag1 = 3;
    }
  }
  if (flag1 == 3) {
    if (millis() - contaTempo > cincoS) {  // Fica acesso 5s e apaga
      digitalWrite(ledPin, LOW);
      contaTempo = millis();
      flag1 = 4;
    }
  }
  if (flag1 == 4) {
    if (millis() - contaTempo > quatroS) { // Fica apagado 4s e acende e retorna 2x
      contaTempo = millis();
      digitalWrite(ledPin, HIGH);
      flag1 = 1;
      Serial.print("count1  "); Serial.println(count1);
      count1++;
    }
  }



  if (digitalRead(button2Pin) == LOW) {
    delay(50);                                // Debounce
    if (digitalRead(button2Pin) == LOW) {
      Serial.println("Entrando bot2");
      contaTempo = millis();
      digitalWrite(ledPin, HIGH);
      flag2 = 1;
      flag1 = 0;
      count1 = 0;
    }
  }
  if (count2 >= 3)  {
    digitalWrite(ledPin, LOW);
    flag2 = 5;
    if (millis() - contaTempo > duasH) {  // reinicia depois de 2horas
      contaTempo = millis();
      digitalWrite(ledPin, HIGH);
      count2 = 0;
      flag2 = 1;
    }
  }
  if (flag2 == 1) {
    if (millis() - contaTempo > cincoS) {  // Fica acesso 5s e apaga
      contaTempo = millis();
      digitalWrite(ledPin, LOW);
      flag2 = 2;
    }
  }
  if (flag2 == 2) {
    if (millis() - contaTempo > doisS) {  // Fica apagado 2s e acende
      digitalWrite(ledPin, HIGH);
      contaTempo = millis();
      flag2 = 3;
    }
  }
  if (flag2 == 3) {
    if (millis() - contaTempo > cincoS) {  // Fica acesso 5s e apaga
      digitalWrite(ledPin, LOW);
      contaTempo = millis();
      flag2 = 4;
    }
  } if (flag2 == 4) {
    if (millis() - contaTempo > quatroS) { // Fica apagado 4s e acende e retorna 2x
      contaTempo = millis();
      digitalWrite(ledPin, HIGH);
      flag2 = 1;
      Serial.print("count2  "); Serial.println(count2);
      count2++;
    }
  }

  if (digitalRead(button3Pin) == LOW) {
    delay(30);                                // Debounce
    if (digitalRead(button3Pin) == LOW) {
      Serial.println("Entrando bot3");
      digitalWrite(ledPin, HIGH);
      flag1 = 0;
      flag2 = 0;
      count1 = 0;
      count2 = 0;
      Serial.println("trintaS");
      delay(trintaS);
      digitalWrite(ledPin, LOW);
    }
  }
}

Opa

Ninguém do meu grupo soube explicar o que vc quis dizer quando mencionou TAGS…

Te peço encarecidas desculpas!!

sobre o funcionar, vou testar hoje no laboratório…

Serás citado…

Qual teu WhatsApp irmão??

O meu é 48 99940 7340

Muito obrigado por enquanto!

Tags são recursos de "encapsulamento "de texto.
Elas "abrem" automaticamente ao clicar aqui:
image

então voce insere seu codigo entre elas. (Tags).

Ao se registrar no forum foi recomendado que voce lesse o tópico:

nele contem um paragrafo que diz assim:
" Use a formatação de código

O código deve ser postado usando a formatação de código. Ela tem esse símbolo <CODE/> na barra de ferramentas que fica acima do campo onde você edita seu post................
Voce leu este tópico?

Este codigo usa uma função para os tempos, com parametros na chamada e retorno de função, assim simplificando o programa.

/*
  BOTAO 01 - A qualquer tempo, quando pressionado, reseta tudo
  e inicia um looping da seguinte sequencia no LED:
  "2 pulsos x 3 a cada duas horas"
  repete 3X (acende por 5s, apaga por 2s, acende por 5s, apaga por 4s)
  aguarda 2 horas e repete isso...

  BOTAO 02 - A qualquer tempo, quando pressionado, reseta
  tudo e inicia um looping da seguinte sequencia no LED:
  repete 3X (acende por 5s, apaga por 2s, acende por 5s,
  apaga por 2s, acende por 5s e apaga por 4s)
  aguarda 2 horas e repete isso...

  BOTAO 03 - A qualquer tempo, quando pressionado,
  reseta tudo, acende o LED por 20s e para.
*/
/*
  Ao apertar o botao 01, tem que ligar o led 2 vezes em
  uma sequencia de 3 x a cada duas horas...
  até que outro botão seja acionado...

  botao 01 (pulsado On)
  repete 3X isso:
  Led On 5s
  led Off 2s
  led On 5s
  led Off 4S

  Aguarda duas horas (7200000ms) e repete 3x essa sequencia...Looping infinito, até que algum outro botão seja pulsado (pelo menos é issa solução que eu preciso entregar)
*/
const int button1Pin = 2; // Pino do Botão 1
const int button2Pin = 3; // Pino do Botão 2
const int button3Pin = 4; // Pino do Botão 3
const int ledPin = 13; // Pino do LED

bool isButton1Pressed = false;
bool isButton2Pressed = false;
bool isButton3Pressed = false;

unsigned long contaTempo = 0;
unsigned long doisS = 600U;
unsigned long quatroS = 800U;
unsigned long cincoS = 1000U;
unsigned long trintaS = 3000U;
unsigned long duasH = 2000U;

byte flag1 = 0;
byte flag2 = 0;

int count1  = 0;
int count2  = 0;
//------------------------------------------------------------
void setup() {
  Serial.begin(115200);
  pinMode(button1Pin, INPUT_PULLUP); // Configura o botão como entrada com pull-up
  pinMode(button2Pin, INPUT_PULLUP);
  pinMode(button3Pin, INPUT_PULLUP);
  pinMode(ledPin, OUTPUT); // Configura o LED como saída
}
//-----------------------------------------------------------
byte funcTime(byte flag, unsigned long waytTime, bool LED) {
  if (millis() - contaTempo > waytTime) {
    contaTempo = millis();
    digitalWrite(ledPin, LED);
    flag++;
    //Serial.println(waytTime);
  }
  return flag;
}
//------------------------------------------------------------
void loop() {
  if (digitalRead(button1Pin) == LOW) {
    delay(50);                                // Debounce
    if (digitalRead(button1Pin) == LOW) {
      contaTempo = millis();
      digitalWrite(ledPin, HIGH);
      flag1 = 1;
      flag2 = 0;
      count2 = 0;
      Serial.println("Entrando bot1");
    }
  }
  if (count1 >= 2)  {
    digitalWrite(ledPin, LOW);
    flag1 = 6;
    if (millis() - contaTempo > duasH) {  // reinicia depois de 2horas
      contaTempo = millis();
      digitalWrite(ledPin, HIGH);
      count1 = 0;
      flag1 = 1;
    }
  }

  if (flag1 == 1) {
    flag1 = funcTime(flag1, cincoS, LOW);  // Apaga apos 5s
  }
  if (flag1 == 2) {
    flag1 = funcTime(flag1, doisS, HIGH);  // Acende apos 2s
  }
  if (flag1 == 3) {
    flag1 = funcTime(flag1, cincoS, LOW);   // apaga apos 5s
  }
  if (flag1 == 4) {
    flag1 = funcTime(flag1, quatroS, HIGH); // Acende apos 4s
  }

  if (flag1 == 5) {
    count1++;
    flag1  = 1;
  }

  if (digitalRead(button2Pin) == LOW) {
    delay(50);                                // Debounce
    if (digitalRead(button2Pin) == LOW) {
      Serial.println("Entrando bot2");
      contaTempo = millis();
      digitalWrite(ledPin, HIGH);
      flag2 = 1;
      flag1 = 0;
      count1 = 0;
    }
  }
  if (count2 >= 3)  {
    digitalWrite(ledPin, LOW);
    flag2 = 6;
    if (millis() - contaTempo > duasH) {  // reinicia depois de 2horas
      contaTempo = millis();
      digitalWrite(ledPin, HIGH);
      count2 = 0;
      flag2 = 1;
    }
  }
  if (flag2 == 1) {
    Serial.println(flag2);
    flag2 = funcTime(flag2, cincoS, LOW);
  }
  if (flag2 == 2) {
    flag2 = funcTime(flag2, doisS, HIGH);
  }
  if (flag2 == 3) {
    flag2 = funcTime(flag2, cincoS, LOW);
  }
  if (flag2 == 4) {
    flag2 = funcTime(flag2, quatroS, HIGH);
  }
  if (flag2 == 5) {
   //flag2  = 1;
    count2++;
  }

  if (digitalRead(button3Pin) == LOW) {
    delay(30);                                // Debounce
    if (digitalRead(button3Pin) == LOW) {
      Serial.println("Entrando bot3");
      digitalWrite(ledPin, HIGH);
      flag1 = 0;
      flag2 = 0;
      count1 = 0;
      count2 = 0;
      delay(trintaS);
      Serial.println("Termina 30S");
      digitalWrite(ledPin, LOW);
    }
  }
}

Amigos boa tarde...

Este ultimo código não rodou bem...

Fizemos o seguinte:

Atribuímos cada botão (função) a uma placa de arduino diferente, assim, ao invez de um só arduino desempenhar as 3 funções, cada um dos 3 faz a sua e facilita o codigo...

Só estou com um problema:

Preciso criar um botão para parar a programação que esteja rodando em algum dos 3 arduinos...coloquei um botão fisico jogando pra (HIGH) o pino reset do arduino (neste caso, nem precisa de escrever código pra isso. Ocorre que quando se clica nesse botão (espelho do reset da placa, o programa nao para imediatamente...inclusive se o programa estiver no seu periodo de pausa (aquelas 2 horas), ao clicar nesse RESET, ele ascende o LED por 2 segundos e só ai para o programa...

estou tentando com AttachInterrupt( ), mas não estamos conseguindo...

Segue o código que esta funcionando pro "BOTão2"

const int LEDsaida = 10;
const int LED1 = 9;
const int botao1 = 7;
const int botao2 = 4;

void setup() {
  pinMode(LEDsaida, OUTPUT);
  pinMode(LED1, OUTPUT);
  pinMode(botao1, INPUT_PULLUP);
  pinMode(botao2, INPUT_PULLUP);
}

void loop() {
  if (digitalRead(botao1) == HIGH) {
    digitalWrite(LED1, HIGH); {
      // Sequência de piscadas do LEDsaida
      digitalWrite(LEDsaida, HIGH);
      delay(5000);
      digitalWrite(LEDsaida, LOW);
      delay(2000);
      digitalWrite(LEDsaida, HIGH);
      delay(5000);
      digitalWrite(LEDsaida, LOW);
      delay(4000);
      digitalWrite(LEDsaida, HIGH);
      delay(5000);
      digitalWrite(LEDsaida, LOW);
      delay(2000);
      digitalWrite(LEDsaida, HIGH);
      delay(5000);
      digitalWrite(LEDsaida, LOW);
      delay(4000);
      digitalWrite(LEDsaida, HIGH);
      delay(5000);
      digitalWrite(LEDsaida, LOW);
      delay(2000);
      digitalWrite(LEDsaida, HIGH);
      delay(5000);
      digitalWrite(LEDsaida, LOW);
      delay(7200000); // 7200 segundos = 2 horas
    }
     if (digitalRead(botao2) == HIGH) {
       digitalWrite(LED1, LOW);}
  }
}

Se puderem me ajudar, agradecemos imensamente...