Repositório para o código final de Microcontroladores.

Dependencies:   BME280 MFRC522 mbed

Revision:
2:3dd81ff9eb1f
Parent:
1:9c4b2fdf3b67
Child:
3:3fe778bdb20a
--- a/main.cpp	Sat Jun 23 20:42:10 2018 +0000
+++ b/main.cpp	Sun Jun 24 22:08:50 2018 +0000
@@ -21,12 +21,64 @@
 // Declaração para utilização do RFID
 MFRC522 RFID(p11, p12, p13, p14, p8);
 
+// Declaração para status de conexão do bluetooth + controle de login
+DigitalIn statusBluetooth(p19);
+int controleReconexao = 0;
+
 // Variável de verificação de autenticação
 int autenticado = 0;
 
 // Variável de entrada bluetooth
 char input;
 
+// Controle manual da bomba
+int controleManual = 0;
+
+
+// Definição dos protótipos
+void controleAutomatico();
+void exibirMenu();
+void exibirInfo();
+void flushSerialBuffer();
+void conexaoBluetooth();
+
+// Exibição padrão do menu de controle
+void exibirMenu()
+{
+    bluetooth.printf("\nSelecione a operacao desejada:\n");
+    bluetooth.printf("(I)nformacoes de Pressao, Temperatura e Umidade\n");
+    bluetooth.printf("(L)igar a Bomba\n");
+    bluetooth.printf("(D)esligar a Bomba\n");
+    bluetooth.printf("(S)air\n");
+    controleAutomatico();
+    conexaoBluetooth();
+}
+
+void conexaoBluetooth()
+{
+    if (!statusBluetooth) {
+        autenticado = 0;
+        controleManual = 0;
+        controleAutomatico();
+        controleReconexao = 1;
+    } 
+    else {
+        if (controleReconexao){
+            wait(2.0f);
+            bluetooth.printf("\n\nBem vindo ao sistema de controle da estufa.\nPara acessar as configuracoes, identifique-se.\n\n");
+            controleReconexao = 0;
+        }
+    }
+}
+
+// Função para zerar a entrada depois da autenticação
+void flushSerialBuffer()
+{
+    char char1 = 0;
+    while (bluetooth.readable()) {
+        char1 = bluetooth.getc();
+    }
+}
 
 
 // Função de exibição dos sensores
@@ -34,57 +86,95 @@
 {
     int aux = 1;
     char sair;
-    bluetooth.printf("Exibindo informacoes. 'S' para sair.");
-    while (aux) {
-        bluetooth.readable();
-        sair = bluetooth.getc();
-        bluetooth.printf("%2.2f C, %04.2f hPa\nUmidade: %3.3f%%", sensor_t_p.getTemperature(), sensor_t_p.getPressure(), (1-sensor_u.read()) * 100.0f);
+    bluetooth.printf("Exibindo informacoes. 'S' para sair.\n");
+    while (aux && autenticado) {
+        bluetooth.printf("%2.2f C, %04.2f hPa, Umidade: %3.3f%%\n\n", sensor_t_p.getTemperature(), sensor_t_p.getPressure(), ((1-sensor_u.read()) * 100.0f)/0.6);
+        controleAutomatico();
+        conexaoBluetooth();
+
+        if (bluetooth.readable()) {
+            sair = bluetooth.getc();
+            if (sair == 'S' || sair == 's') {
+                bluetooth.printf("Rotina cancelada.\n");
+                aux = 0;
+                exibirMenu();
+                continue;
+            }
+        }
+        wait(5.0f);
     }
 }
 
+// Função do monitoramento da umidade da terra, para acionar/desativar a bomba
+void controleAutomatico()
+{
+    if (!controleManual) {
+        if (((1-sensor_u.read()) * 100.0f)/0.6 < 20.0) {
+            bomba.write(0.2f);
+        }
 
+        if (((1-sensor_u.read()) * 100.0f)/0.6 > 40.0) {
+            bomba.write(0.0f);
+        }
+    }
+}
 
+// Programa principal
 int main()
 {
     bomba.period_ms(10);
     bluetooth.baud(9600);
     RFID.PCD_Init();
 
-    bluetooth.printf("Bem vindo ao sistema de controle da estufa.\nPara acessar as configuracoes, identifique-se pelo cracha RFID.\n\n");
 
+    bluetooth.printf("\n\nBem vindo ao sistema de controle da estufa.\nPara acessar as configuracoes, identifique-se.\n\n");
 
     while(1) {
+        controleAutomatico();
+        conexaoBluetooth();
 
         // Programa a ser executado caso esteja autenticado
         if (autenticado) {
-            bluetooth.printf("\n\n\nSelecione a operacao desejada:\n");
-            bluetooth.printf("\t(I)nformacoes de Pressao, Temperatura e Umidade\n");
-            bluetooth.printf("\t(L)igar a Bomba\n");
-            bluetooth.printf("\t(D)esligar a Bomba\n");
-            bluetooth.printf("\t(S)air\n");
+            exibirMenu();
 
-            if (bluetooth.readable()) {
-//NAO TA ENTRANDO
-                while (autenticado) {
-                    bluetooth.printf("ENTREI\n\n");
+            while (autenticado) {
+                controleAutomatico();
+                conexaoBluetooth();
+                if (bluetooth.readable()) {
+
                     input = bluetooth.getc();
 
                     switch (input) {
                         case 'I':
+                        case 'i':
                             exibirInfo();
                             break;
 
                         case 'L':
-                            bomba.write(0.5f);
+                        case 'l':
+                            bomba.write(0.2f);
+                            bluetooth.printf("Bomba acionada.\n");
+                            controleManual = 1;
+                            wait(1.0f);
+                            exibirMenu();
                             break;
 
-
                         case 'D':
+                        case 'd':
                             bomba.write(0.0f);
+                            bluetooth.printf("Bomba desativada.\n");
+                            controleManual = 0;
+                            wait(1.0f);
+                            exibirMenu();
                             break;
 
                         case 'S':
+                        case 's':
                             autenticado = 0;
+                            controleManual = 0;
+                            controleAutomatico();
+                            conexaoBluetooth();
+                            bluetooth.printf("Desconectado com sucesso.\nPara logar novamente, aproxime o cracha RFID.\n\n");
                             break;
                     }
                 }
@@ -104,14 +194,21 @@
         }
 
         autenticado = 1;
+        
+        flushSerialBuffer();
 
         bluetooth.printf("Card reconhecido, acesso concedido.\n\n");
 
+        wait(1.0f);
+
         // Imprime Card UID
         bluetooth.printf("Card UID: ");
         for (uint8_t i = 0; i < RFID.uid.size; i++) {
             bluetooth.printf(" %X02", RFID.uid.uidByte[i]);
         }
-        bluetooth.printf("\n\n---------------------------------------------------------------------------");
+        bluetooth.printf("\n\n---------------------------------------------------------------------------\n");
+        controleAutomatico();
+        conexaoBluetooth();
+        wait(1.0f);
     }
 }