Repositório para o código final de Microcontroladores.
Dependencies: BME280 MFRC522 mbed
Diff: main.cpp
- 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); } }