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

Dependencies:   BME280 MFRC522 mbed

Committer:
RickBadKan
Date:
Sun Jun 24 22:13:53 2018 +0000
Revision:
3:3fe778bdb20a
Parent:
2:3dd81ff9eb1f
Atualiza??o dos coment?rios

Who changed what in which revision?

UserRevisionLine numberNew contents of line
RickBadKan 0:91215b8406ee 1 #include "mbed.h"
RickBadKan 0:91215b8406ee 2
RickBadKan 0:91215b8406ee 3 // Biblioteca do BME280: Temperatura e Pressão
RickBadKan 0:91215b8406ee 4 #include "BME280.h"
RickBadKan 0:91215b8406ee 5
RickBadKan 0:91215b8406ee 6 // Biblioteca para utilização do RFID
RickBadKan 0:91215b8406ee 7 #include "MFRC522.h"
RickBadKan 0:91215b8406ee 8
RickBadKan 0:91215b8406ee 9 // Declaração para utilização do serial bluetooth
RickBadKan 0:91215b8406ee 10 Serial bluetooth(p9, p10);
RickBadKan 0:91215b8406ee 11
RickBadKan 0:91215b8406ee 12 // Declaração para utilização do sensor de temperatura e pressão
RickBadKan 0:91215b8406ee 13 BME280 sensor_t_p(p28, p27);
RickBadKan 0:91215b8406ee 14
RickBadKan 0:91215b8406ee 15 // Declaração para utilização da bomba
RickBadKan 0:91215b8406ee 16 PwmOut bomba(p21);
RickBadKan 0:91215b8406ee 17
RickBadKan 0:91215b8406ee 18 // Declaração para utilização do sensor de umidade
RickBadKan 0:91215b8406ee 19 AnalogIn sensor_u(p15);
RickBadKan 0:91215b8406ee 20
RickBadKan 0:91215b8406ee 21 // Declaração para utilização do RFID
RickBadKan 0:91215b8406ee 22 MFRC522 RFID(p11, p12, p13, p14, p8);
RickBadKan 0:91215b8406ee 23
RickBadKan 2:3dd81ff9eb1f 24 // Declaração para status de conexão do bluetooth + controle de login
RickBadKan 2:3dd81ff9eb1f 25 DigitalIn statusBluetooth(p19);
RickBadKan 2:3dd81ff9eb1f 26 int controleReconexao = 0;
RickBadKan 2:3dd81ff9eb1f 27
RickBadKan 1:9c4b2fdf3b67 28 // Variável de verificação de autenticação
RickBadKan 1:9c4b2fdf3b67 29 int autenticado = 0;
RickBadKan 1:9c4b2fdf3b67 30
RickBadKan 1:9c4b2fdf3b67 31 // Variável de entrada bluetooth
RickBadKan 1:9c4b2fdf3b67 32 char input;
RickBadKan 1:9c4b2fdf3b67 33
RickBadKan 2:3dd81ff9eb1f 34 // Controle manual da bomba
RickBadKan 2:3dd81ff9eb1f 35 int controleManual = 0;
RickBadKan 2:3dd81ff9eb1f 36
RickBadKan 2:3dd81ff9eb1f 37
RickBadKan 2:3dd81ff9eb1f 38 // Definição dos protótipos
RickBadKan 2:3dd81ff9eb1f 39 void controleAutomatico();
RickBadKan 2:3dd81ff9eb1f 40 void exibirMenu();
RickBadKan 2:3dd81ff9eb1f 41 void exibirInfo();
RickBadKan 2:3dd81ff9eb1f 42 void flushSerialBuffer();
RickBadKan 2:3dd81ff9eb1f 43 void conexaoBluetooth();
RickBadKan 2:3dd81ff9eb1f 44
RickBadKan 2:3dd81ff9eb1f 45 // Exibição padrão do menu de controle
RickBadKan 2:3dd81ff9eb1f 46 void exibirMenu()
RickBadKan 2:3dd81ff9eb1f 47 {
RickBadKan 2:3dd81ff9eb1f 48 bluetooth.printf("\nSelecione a operacao desejada:\n");
RickBadKan 2:3dd81ff9eb1f 49 bluetooth.printf("(I)nformacoes de Pressao, Temperatura e Umidade\n");
RickBadKan 2:3dd81ff9eb1f 50 bluetooth.printf("(L)igar a Bomba\n");
RickBadKan 2:3dd81ff9eb1f 51 bluetooth.printf("(D)esligar a Bomba\n");
RickBadKan 2:3dd81ff9eb1f 52 bluetooth.printf("(S)air\n");
RickBadKan 2:3dd81ff9eb1f 53 controleAutomatico();
RickBadKan 2:3dd81ff9eb1f 54 conexaoBluetooth();
RickBadKan 2:3dd81ff9eb1f 55 }
RickBadKan 2:3dd81ff9eb1f 56
RickBadKan 3:3fe778bdb20a 57 // Função de controle do status da conexão Bluetooth
RickBadKan 2:3dd81ff9eb1f 58 void conexaoBluetooth()
RickBadKan 2:3dd81ff9eb1f 59 {
RickBadKan 2:3dd81ff9eb1f 60 if (!statusBluetooth) {
RickBadKan 2:3dd81ff9eb1f 61 autenticado = 0;
RickBadKan 2:3dd81ff9eb1f 62 controleManual = 0;
RickBadKan 2:3dd81ff9eb1f 63 controleAutomatico();
RickBadKan 2:3dd81ff9eb1f 64 controleReconexao = 1;
RickBadKan 2:3dd81ff9eb1f 65 }
RickBadKan 2:3dd81ff9eb1f 66 else {
RickBadKan 2:3dd81ff9eb1f 67 if (controleReconexao){
RickBadKan 2:3dd81ff9eb1f 68 wait(2.0f);
RickBadKan 2:3dd81ff9eb1f 69 bluetooth.printf("\n\nBem vindo ao sistema de controle da estufa.\nPara acessar as configuracoes, identifique-se.\n\n");
RickBadKan 2:3dd81ff9eb1f 70 controleReconexao = 0;
RickBadKan 2:3dd81ff9eb1f 71 }
RickBadKan 2:3dd81ff9eb1f 72 }
RickBadKan 2:3dd81ff9eb1f 73 }
RickBadKan 2:3dd81ff9eb1f 74
RickBadKan 2:3dd81ff9eb1f 75 // Função para zerar a entrada depois da autenticação
RickBadKan 2:3dd81ff9eb1f 76 void flushSerialBuffer()
RickBadKan 2:3dd81ff9eb1f 77 {
RickBadKan 2:3dd81ff9eb1f 78 char char1 = 0;
RickBadKan 2:3dd81ff9eb1f 79 while (bluetooth.readable()) {
RickBadKan 2:3dd81ff9eb1f 80 char1 = bluetooth.getc();
RickBadKan 2:3dd81ff9eb1f 81 }
RickBadKan 2:3dd81ff9eb1f 82 }
RickBadKan 1:9c4b2fdf3b67 83
RickBadKan 1:9c4b2fdf3b67 84
RickBadKan 1:9c4b2fdf3b67 85 // Função de exibição dos sensores
RickBadKan 1:9c4b2fdf3b67 86 void exibirInfo()
RickBadKan 1:9c4b2fdf3b67 87 {
RickBadKan 1:9c4b2fdf3b67 88 int aux = 1;
RickBadKan 1:9c4b2fdf3b67 89 char sair;
RickBadKan 2:3dd81ff9eb1f 90 bluetooth.printf("Exibindo informacoes. 'S' para sair.\n");
RickBadKan 2:3dd81ff9eb1f 91 while (aux && autenticado) {
RickBadKan 2:3dd81ff9eb1f 92 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);
RickBadKan 2:3dd81ff9eb1f 93 controleAutomatico();
RickBadKan 2:3dd81ff9eb1f 94 conexaoBluetooth();
RickBadKan 2:3dd81ff9eb1f 95
RickBadKan 2:3dd81ff9eb1f 96 if (bluetooth.readable()) {
RickBadKan 2:3dd81ff9eb1f 97 sair = bluetooth.getc();
RickBadKan 2:3dd81ff9eb1f 98 if (sair == 'S' || sair == 's') {
RickBadKan 2:3dd81ff9eb1f 99 bluetooth.printf("Rotina cancelada.\n");
RickBadKan 2:3dd81ff9eb1f 100 aux = 0;
RickBadKan 2:3dd81ff9eb1f 101 exibirMenu();
RickBadKan 2:3dd81ff9eb1f 102 continue;
RickBadKan 2:3dd81ff9eb1f 103 }
RickBadKan 2:3dd81ff9eb1f 104 }
RickBadKan 2:3dd81ff9eb1f 105 wait(5.0f);
RickBadKan 1:9c4b2fdf3b67 106 }
RickBadKan 1:9c4b2fdf3b67 107 }
RickBadKan 1:9c4b2fdf3b67 108
RickBadKan 2:3dd81ff9eb1f 109 // Função do monitoramento da umidade da terra, para acionar/desativar a bomba
RickBadKan 2:3dd81ff9eb1f 110 void controleAutomatico()
RickBadKan 2:3dd81ff9eb1f 111 {
RickBadKan 2:3dd81ff9eb1f 112 if (!controleManual) {
RickBadKan 2:3dd81ff9eb1f 113 if (((1-sensor_u.read()) * 100.0f)/0.6 < 20.0) {
RickBadKan 2:3dd81ff9eb1f 114 bomba.write(0.2f);
RickBadKan 2:3dd81ff9eb1f 115 }
RickBadKan 1:9c4b2fdf3b67 116
RickBadKan 2:3dd81ff9eb1f 117 if (((1-sensor_u.read()) * 100.0f)/0.6 > 40.0) {
RickBadKan 2:3dd81ff9eb1f 118 bomba.write(0.0f);
RickBadKan 2:3dd81ff9eb1f 119 }
RickBadKan 2:3dd81ff9eb1f 120 }
RickBadKan 2:3dd81ff9eb1f 121 }
RickBadKan 1:9c4b2fdf3b67 122
RickBadKan 2:3dd81ff9eb1f 123 // Programa principal
RickBadKan 1:9c4b2fdf3b67 124 int main()
RickBadKan 1:9c4b2fdf3b67 125 {
RickBadKan 1:9c4b2fdf3b67 126 bomba.period_ms(10);
RickBadKan 1:9c4b2fdf3b67 127 bluetooth.baud(9600);
RickBadKan 1:9c4b2fdf3b67 128 RFID.PCD_Init();
RickBadKan 1:9c4b2fdf3b67 129
RickBadKan 0:91215b8406ee 130
RickBadKan 2:3dd81ff9eb1f 131 bluetooth.printf("\n\nBem vindo ao sistema de controle da estufa.\nPara acessar as configuracoes, identifique-se.\n\n");
RickBadKan 0:91215b8406ee 132
RickBadKan 1:9c4b2fdf3b67 133 while(1) {
RickBadKan 2:3dd81ff9eb1f 134 controleAutomatico();
RickBadKan 2:3dd81ff9eb1f 135 conexaoBluetooth();
RickBadKan 1:9c4b2fdf3b67 136
RickBadKan 1:9c4b2fdf3b67 137 // Programa a ser executado caso esteja autenticado
RickBadKan 1:9c4b2fdf3b67 138 if (autenticado) {
RickBadKan 2:3dd81ff9eb1f 139 exibirMenu();
RickBadKan 0:91215b8406ee 140
RickBadKan 2:3dd81ff9eb1f 141 while (autenticado) {
RickBadKan 2:3dd81ff9eb1f 142 controleAutomatico();
RickBadKan 2:3dd81ff9eb1f 143 conexaoBluetooth();
RickBadKan 2:3dd81ff9eb1f 144 if (bluetooth.readable()) {
RickBadKan 2:3dd81ff9eb1f 145
RickBadKan 1:9c4b2fdf3b67 146 input = bluetooth.getc();
RickBadKan 1:9c4b2fdf3b67 147
RickBadKan 1:9c4b2fdf3b67 148 switch (input) {
RickBadKan 1:9c4b2fdf3b67 149 case 'I':
RickBadKan 2:3dd81ff9eb1f 150 case 'i':
RickBadKan 1:9c4b2fdf3b67 151 exibirInfo();
RickBadKan 1:9c4b2fdf3b67 152 break;
RickBadKan 1:9c4b2fdf3b67 153
RickBadKan 1:9c4b2fdf3b67 154 case 'L':
RickBadKan 2:3dd81ff9eb1f 155 case 'l':
RickBadKan 2:3dd81ff9eb1f 156 bomba.write(0.2f);
RickBadKan 2:3dd81ff9eb1f 157 bluetooth.printf("Bomba acionada.\n");
RickBadKan 2:3dd81ff9eb1f 158 controleManual = 1;
RickBadKan 2:3dd81ff9eb1f 159 wait(1.0f);
RickBadKan 2:3dd81ff9eb1f 160 exibirMenu();
RickBadKan 1:9c4b2fdf3b67 161 break;
RickBadKan 1:9c4b2fdf3b67 162
RickBadKan 1:9c4b2fdf3b67 163 case 'D':
RickBadKan 2:3dd81ff9eb1f 164 case 'd':
RickBadKan 1:9c4b2fdf3b67 165 bomba.write(0.0f);
RickBadKan 2:3dd81ff9eb1f 166 bluetooth.printf("Bomba desativada.\n");
RickBadKan 2:3dd81ff9eb1f 167 controleManual = 0;
RickBadKan 2:3dd81ff9eb1f 168 wait(1.0f);
RickBadKan 2:3dd81ff9eb1f 169 exibirMenu();
RickBadKan 1:9c4b2fdf3b67 170 break;
RickBadKan 0:91215b8406ee 171
RickBadKan 1:9c4b2fdf3b67 172 case 'S':
RickBadKan 2:3dd81ff9eb1f 173 case 's':
RickBadKan 1:9c4b2fdf3b67 174 autenticado = 0;
RickBadKan 2:3dd81ff9eb1f 175 controleManual = 0;
RickBadKan 2:3dd81ff9eb1f 176 controleAutomatico();
RickBadKan 2:3dd81ff9eb1f 177 conexaoBluetooth();
RickBadKan 2:3dd81ff9eb1f 178 bluetooth.printf("Desconectado com sucesso.\nPara logar novamente, aproxime o cracha RFID.\n\n");
RickBadKan 1:9c4b2fdf3b67 179 break;
RickBadKan 1:9c4b2fdf3b67 180 }
RickBadKan 1:9c4b2fdf3b67 181 }
RickBadKan 1:9c4b2fdf3b67 182 }
RickBadKan 1:9c4b2fdf3b67 183 }
RickBadKan 1:9c4b2fdf3b67 184
RickBadKan 1:9c4b2fdf3b67 185 // Procura o card
RickBadKan 1:9c4b2fdf3b67 186 if ( ! RFID.PICC_IsNewCardPresent()) {
RickBadKan 1:9c4b2fdf3b67 187 wait_ms(500);
RickBadKan 1:9c4b2fdf3b67 188 continue;
RickBadKan 1:9c4b2fdf3b67 189 }
RickBadKan 1:9c4b2fdf3b67 190
RickBadKan 1:9c4b2fdf3b67 191 // Seleciona um dos cards
RickBadKan 1:9c4b2fdf3b67 192 if ( ! RFID.PICC_ReadCardSerial()) {
RickBadKan 1:9c4b2fdf3b67 193 wait_ms(500);
RickBadKan 1:9c4b2fdf3b67 194 continue;
RickBadKan 1:9c4b2fdf3b67 195 }
RickBadKan 1:9c4b2fdf3b67 196
RickBadKan 1:9c4b2fdf3b67 197 autenticado = 1;
RickBadKan 2:3dd81ff9eb1f 198
RickBadKan 2:3dd81ff9eb1f 199 flushSerialBuffer();
RickBadKan 1:9c4b2fdf3b67 200
RickBadKan 1:9c4b2fdf3b67 201 bluetooth.printf("Card reconhecido, acesso concedido.\n\n");
RickBadKan 1:9c4b2fdf3b67 202
RickBadKan 2:3dd81ff9eb1f 203 wait(1.0f);
RickBadKan 2:3dd81ff9eb1f 204
RickBadKan 1:9c4b2fdf3b67 205 // Imprime Card UID
RickBadKan 1:9c4b2fdf3b67 206 bluetooth.printf("Card UID: ");
RickBadKan 1:9c4b2fdf3b67 207 for (uint8_t i = 0; i < RFID.uid.size; i++) {
RickBadKan 1:9c4b2fdf3b67 208 bluetooth.printf(" %X02", RFID.uid.uidByte[i]);
RickBadKan 1:9c4b2fdf3b67 209 }
RickBadKan 2:3dd81ff9eb1f 210 bluetooth.printf("\n\n---------------------------------------------------------------------------\n");
RickBadKan 2:3dd81ff9eb1f 211 controleAutomatico();
RickBadKan 2:3dd81ff9eb1f 212 conexaoBluetooth();
RickBadKan 2:3dd81ff9eb1f 213 wait(1.0f);
RickBadKan 0:91215b8406ee 214 }
RickBadKan 0:91215b8406ee 215 }