Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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 }
Generated on Thu Jul 21 2022 16:05:53 by
1.7.2