 }
 
 
+// Métodos da funcionalidade 02
+
+void setup_garagem() {
+  pinMode(PINO_LED_OCUPACAO, OUTPUT);
+}
+
+float medir_distancia() {
+  long tempo = ultrasonic.timing();
+  int distancia = ultrasonic.convert(tempo, Ultrasonic::CM);
+
+  if (distancia <= DISTANCIA_OCUPADA) {
+    informar_ocupacao(HIGH);
+  } else {
+    informar_ocupacao(LOW);
+  }
+}
+
+void informar_ocupacao(int status) {
+  if (status_garagem != status) {
+    digitalWrite(PINO_LED_OCUPACAO, status);
+    status_garagem = status;
+    Serial.println("mudei um status");
+    client.publish(TP_GARAGEM_STATUS, status == 0 ? "0" : "1");
+  }
+}
+
+
+// Métodos da funcionalidade 03
+
+
+void setup_alarme() {
+  pinMode(PINO_SENSOR_MOV, INPUT);
+  pinMode(PINO_LED_ALARME, OUTPUT);
+  pinMode(PINO_BUZZER, OUTPUT);
+}
+
+void acionar_alarme() {
+  if (!alarme_disparado) {
+    client.publish(TP_ALARME_STATUS, "1");
+    alarme_disparado = true;
+    digitalWrite(PINO_LED_ALARME, HIGH);
+  } else {
+    digitalWrite(PINO_LED_ALARME, LOW);
+  }
+}
+
+void verificar_movimento() {  
+  Serial.println(digitalRead(PINO_SENSOR_MOV));
+  if (digitalRead(PINO_SENSOR_MOV) == HIGH) {
+    acionar_alarme();
+  }
+}
+
+
 // Métodos auxiliares
  
 void conectar_mosquitto() {


// Configurações da funcionalidade 02 - Acionamento automático das luzes da garagem



// Configurações da funcionalidade 03 - Alarme com utilização de sensor de movimento


void setup() {

    conectar_mosquitto();
  }
  client.loop();

  ler_temperatura();

  medir_distancia();

  verificar_movimento();

  if (alarme_disparado) {
    //Ligando o buzzer com uma frequencia de 1500 hz.
    tone(PINO_BUZZER, FREQ_BUZZER);   
    delay(DELAY_SONORO);
    
    //Desligando o buzzer.
    noTone(PINO_BUZZER);
    delay(DELAY_SONORO);
  } 

  delay(500);
}

// Metodo para manipular mensagens recebidas do broker
