Repositório para o código final de Microcontroladores.
Dependencies: BME280 MFRC522 mbed
main.cpp
- Committer:
- RickBadKan
- Date:
- 2018-06-24
- Revision:
- 3:3fe778bdb20a
- Parent:
- 2:3dd81ff9eb1f
File content as of revision 3:3fe778bdb20a:
#include "mbed.h" // Biblioteca do BME280: Temperatura e Pressão #include "BME280.h" // Biblioteca para utilização do RFID #include "MFRC522.h" // Declaração para utilização do serial bluetooth Serial bluetooth(p9, p10); // Declaração para utilização do sensor de temperatura e pressão BME280 sensor_t_p(p28, p27); // Declaração para utilização da bomba PwmOut bomba(p21); // Declaração para utilização do sensor de umidade AnalogIn sensor_u(p15); // 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(); } // Função de controle do status da conexão Bluetooth 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 void exibirInfo() { int aux = 1; char sair; 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("\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) { exibirMenu(); while (autenticado) { controleAutomatico(); conexaoBluetooth(); if (bluetooth.readable()) { input = bluetooth.getc(); switch (input) { case 'I': case 'i': exibirInfo(); break; case 'L': 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; } } } } // Procura o card if ( ! RFID.PICC_IsNewCardPresent()) { wait_ms(500); continue; } // Seleciona um dos cards if ( ! RFID.PICC_ReadCardSerial()) { wait_ms(500); continue; } 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---------------------------------------------------------------------------\n"); controleAutomatico(); conexaoBluetooth(); wait(1.0f); } }