Ricardo Kannebley / Mbed 2 deprecated projeto_estufa

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 
00003 // Biblioteca do BME280: Temperatura e Pressão
00004 #include "BME280.h"
00005 
00006 // Biblioteca para utilização do RFID
00007 #include "MFRC522.h"
00008 
00009 // Declaração para utilização do serial bluetooth
00010 Serial bluetooth(p9, p10);
00011 
00012 // Declaração para utilização do sensor de temperatura e pressão
00013 BME280 sensor_t_p(p28, p27);
00014 
00015 // Declaração para utilização da bomba
00016 PwmOut bomba(p21);
00017 
00018 // Declaração para utilização do sensor de umidade
00019 AnalogIn sensor_u(p15);
00020 
00021 // Declaração para utilização do RFID
00022 MFRC522 RFID(p11, p12, p13, p14, p8);
00023 
00024 // Declaração para status de conexão do bluetooth + controle de login
00025 DigitalIn statusBluetooth(p19);
00026 int controleReconexao = 0;
00027 
00028 // Variável de verificação de autenticação
00029 int autenticado = 0;
00030 
00031 // Variável de entrada bluetooth
00032 char input;
00033 
00034 // Controle manual da bomba
00035 int controleManual = 0;
00036 
00037 // Variavel intervalo de tempo da bomba
00038 float tempoBomba = 2.0;
00039 
00040 // Definição dos protótipos
00041 void controleAutomatico();
00042 void exibirMenu();
00043 void exibirInfo();
00044 void flushSerialBuffer();
00045 void conexaoBluetooth();
00046 
00047 // Exibição padrão do menu de controle
00048 void exibirMenu()
00049 {
00050     bluetooth.printf("\nSelecione a operacao desejada:\n");
00051     bluetooth.printf("(I)nformacoes de Pressao, Temperatura e Umidade\n");
00052     bluetooth.printf("(L)igar a Bomba\n");
00053     bluetooth.printf("(D)esligar a Bomba\n");
00054     bluetooth.printf("(S)air\n");
00055     controleAutomatico();
00056     conexaoBluetooth();
00057 }
00058 
00059 // Função de controle do status da conexão Bluetooth
00060 void conexaoBluetooth()
00061 {
00062     if (!statusBluetooth) {
00063         autenticado = 0;
00064         controleManual = 0;
00065         controleAutomatico();
00066         controleReconexao = 1;
00067     } else {
00068         if (controleReconexao) {
00069             wait(2.0f);
00070             bluetooth.printf("\n\nBem vindo ao sistema de controle da estufa.\nPara acessar as configuracoes, identifique-se.\n\n");
00071             controleReconexao = 0;
00072         }
00073     }
00074 }
00075 
00076 // Função para zerar a entrada depois da autenticação
00077 void flushSerialBuffer()
00078 {
00079     char char1 = 0;
00080     while (bluetooth.readable()) {
00081         char1 = bluetooth.getc();
00082     }
00083 }
00084 
00085 
00086 // Função de exibição dos sensores
00087 void exibirInfo()
00088 {
00089     tempoBomba = 0.0f;
00090     int aux = 1;
00091     char sair;
00092     bluetooth.printf("Exibindo informacoes. 'S' para sair.\n");
00093     while (aux && autenticado) {
00094         bluetooth.printf("Temperatura: %2.2f C\nPressao: %04.2f hPa\nUmidade: %3.3f%%\n\n", sensor_t_p.getTemperature(), sensor_t_p.getPressure(), ((1-sensor_u.read()) * 100.0f)/0.7);
00095         controleAutomatico();
00096         conexaoBluetooth();
00097 
00098         if (bluetooth.readable()) {
00099             sair = bluetooth.getc();
00100             if (sair == 'S' || sair == 's') {
00101                 bluetooth.printf("Rotina cancelada.\n");
00102                 tempoBomba = 2.0f;
00103                 aux = 0;
00104                 exibirMenu();
00105                 continue;
00106             }
00107         }
00108         wait(5.0f);
00109     }
00110 }
00111 
00112 // Função do monitoramento da umidade da terra, para acionar/desativar a bomba
00113 void controleAutomatico()
00114 {
00115     if (!controleManual) {
00116         if (((1-sensor_u.read()) * 100.0f)/0.6 < 20.0) {
00117             bomba.write(1.0f);
00118             wait(0.5f);
00119             bomba.write(0.0f);
00120             wait(tempoBomba);
00121         }
00122 
00123         if (((1-sensor_u.read()) * 100.0f)/0.6 > 30.0) {
00124             bomba.write(0.0f);
00125         }
00126     }
00127 }
00128 
00129 // Programa principal
00130 int main()
00131 {
00132     bomba.period_ms(10);
00133     bluetooth.baud(9600);
00134     RFID.PCD_Init();
00135 
00136 
00137     bluetooth.printf("\n\nBem vindo ao sistema de controle da estufa.\nPara acessar as configuracoes, identifique-se.\n\n");
00138 
00139     while(1) {
00140         controleAutomatico();
00141         conexaoBluetooth();
00142 
00143         // Programa a ser executado caso esteja autenticado
00144         if (autenticado) {
00145             exibirMenu();
00146 
00147             while (autenticado) {
00148                 controleAutomatico();
00149                 conexaoBluetooth();
00150                 if (bluetooth.readable()) {
00151 
00152                     input = bluetooth.getc();
00153 
00154                     switch (input) {
00155                         case 'I':
00156                         case 'i':
00157                             exibirInfo();
00158                             break;
00159 
00160                         case 'L':
00161                         case 'l':
00162                             bomba.write(1.0f);
00163                             bluetooth.printf("Bomba acionada.\n");
00164                             controleManual = 1;
00165                             wait(1.0f);
00166                             exibirMenu();
00167                             break;
00168 
00169                         case 'D':
00170                         case 'd':
00171                             bomba.write(0.0f);
00172                             bluetooth.printf("Bomba desativada.\n");
00173                             controleManual = 0;
00174                             wait(1.0f);
00175                             exibirMenu();
00176                             break;
00177 
00178                         case 'S':
00179                         case 's':
00180                             autenticado = 0;
00181                             controleManual = 0;
00182                             controleAutomatico();
00183                             conexaoBluetooth();
00184                             bluetooth.printf("Desconectado com sucesso.\nPara logar novamente, aproxime o cracha RFID.\n\n");
00185                             break;
00186                     }
00187                 }
00188             }
00189         }
00190 
00191         // Procura o card
00192         if ( ! RFID.PICC_IsNewCardPresent()) {
00193             wait_ms(500);
00194             continue;
00195         }
00196 
00197         // Seleciona um dos cards
00198         if ( ! RFID.PICC_ReadCardSerial()) {
00199             wait_ms(500);
00200             continue;
00201         }
00202 
00203         autenticado = 1;
00204 
00205         flushSerialBuffer();
00206 
00207         bluetooth.printf("Card reconhecido, acesso concedido.\n\n");
00208 
00209         wait(1.0f);
00210 
00211         // Imprime Card UID
00212         bluetooth.printf("Card UID: ");
00213         for (uint8_t i = 0; i < RFID.uid.size; i++) {
00214             bluetooth.printf(" %X02", RFID.uid.uidByte[i]);
00215         }
00216         bluetooth.printf("\n\n---------------------------------------------------------------------------\n");
00217         controleAutomatico();
00218         conexaoBluetooth();
00219         wait(1.0f);
00220     }
00221 }