 }
 
 void acionaDatador(){
-  btUmClique(bt_datador, &estbt_datador, &estbta_datador, &atr_datador, &datador_ligado);
+  if (maquina_ligada){
+    btUmClique(bt_datador, &estbt_datador, &estbta_datador, &atr_datador, &datador_ligado);
+  }
 }
 
 void standBy(){
   if (stand_by){
-    acionaGeral();
-    acionaDosador();
-    acionaDatador();
+    acionaGeral(); // Checa botão Geral
+    acionaDosador(); // Checa botão Dosador
+    acionaDatador(); // Checa botão Datador
     if (maquina_ligada){
       iniciaTrabalho();
+    } else {
+      reiniciaSaidas();
     }
   } else {
-    delay(3000);
-    stand_by = VERDADEIRO;
+    delay(3000); // Espera 3 segundos após energização
+    stand_by = VERDADEIRO; // Libera funcionamento
   }
 }
 
 void iniciaTrabalho(){
 
+}
+
+void modoAlarme(){
+  if (!alarme_ativo){
+    if (ativo(sensor_porta)){
+      bloqueioPorAlarme("Sensor da Porta");
+    } else if (ativo(sensor_painel)){
+      bloqueioPorAlarme("Sensor do Painel");
+    } else if (ativo(sensor_maquina)){
+      bloqueioPorAlarme("Sensor da Máquina");
+    }
+  }
+}
+
+void bloqueioPorAlarme(String texto){
+  alarme_ativo = VERDADEIRO;
+  escreveSerial("\n<< Alarme! >>\n");
+  reiniciaSaidas();
+  escreveSerial(texto + " detectou uma falha de segurança.");
 }
 
 void btUmClique(byte botao, int *estado, int *est_ant, unsigned long *atr_ant, boolean *funcao){

    boolean maquina_ligada = FALSO;
    boolean dosador_ligado = FALSO;
    boolean datador_ligado = FALSO;


void setup() {
  Serial.begin(9600);
  pinMode(bt_geral, ModoBotoes);
  pinMode(bt_dosador, ModoBotoes);
  pinMode(bt_datador, ModoBotoes);

  pinMode(led_geral, ModoLeds);
  pinMode(led_dosador, ModoLeds);



void loop() {
  modoAlarme();
  if (!alarme_ativo){
    standBy();
    modoTeste();
  }
}

void acionaGeral(){
